-
Notifications
You must be signed in to change notification settings - Fork 0
/
whitelist.sh
executable file
·128 lines (113 loc) · 2.57 KB
/
whitelist.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env dash
#
# Copyright (C) 2024 Maria Lisina
# Copyright (C) 2024 Danil Lisin
# SPDX-License-Identifier: Apache-2.0
#
# Run this software with `env -i` to avoid variable conflict
set -e
umask 77
lists="${0%/*}/lists"
list="${lists}/whitelist.txt"
if [ -n "${1}" ]
then
action="${1}"
case "${action}" in
(help)
help=0
;;
(show | add | del | reset)
;;
(*)
echo "Unrecognized action ${action}" \
"\nSee '${0} help'"
exit 1
;;
esac
shift
else
help=0
fi
if [ -n "${help}" ]
then
echo "Whitelist Manager" \
"\n\nUsage: ${0} [action] [IDs]" \
"\n\nActions:" \
"\n help\t\tShow help information" \
"\n show\t\tShow whitelist entries" \
"\n add\t\tAdd user IDs to the whitelist" \
"\n del\t\tRemove user IDs from the whitelist" \
"\n reset\t\tRemove all whitelist entries"
exit 0
fi
for required in busybox
do
if ! command -v ${required} > /dev/null
then
missing="${missing} ${required}"
fi
done
if [ -n "${missing}" ]
then
echo "Missing dependencies:${missing}" \
"\nFor more information follow: https://command-not-found.com/"
exit 1
fi
for function in cat grep mkdir sed
do
if busybox ${function} --help > /dev/null 2>&1
then
alias ${function}="busybox ${function}"
else
missing="${missing} ${function}"
fi
done
if [ -n "${missing}" ]
then
echo "Missing BusyBox functions:${missing}" \
"\nUpdate your BusyBox or get a version with all the required functions"
exit 1
fi
case "${action}" in
(add | del)
if [ -n "${1}" ]
then
user_id="${1}"
if ! test ${user_id} -gt 0 > /dev/null 2>&1
then
echo "Illegal user ID ${user_id}"
exit 1
fi
shift
else
echo "You must specify the user ID" \
"\nSee '${0} help'"
exit 1
fi
;;
esac
case "${action}" in
(show)
if [ -s "${list}" ]
then
cat "${list}"
fi
;;
(add)
if [ -s "${list}" ] && grep -qxe "${user_id}" "${list}"
then
echo "User ID ${user_id} is already in the whitelist"
exit 1
fi
printf "%s\n" "${user_id}" >> "${list}"
;;
(del)
if [ -s "${list}" ]
then
sed -e "s/^${user_id}$//" -e '/^$/d' -i "${list}"
fi
;;
(reset)
cat "${list}.default" > "${list}"
;;
esac