-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathctrl.sh
executable file
·137 lines (116 loc) · 2.23 KB
/
ctrl.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
129
130
131
132
133
134
135
136
137
#!/bin/bash
cmd=$1
service=$2
key=$3
getPass() {
osascript -l JavaScript getPass.scpt
}
initData() {
pass=$(osascript -l JavaScript confirmInit.scpt)
if [ -z "$pass" ]; then
echo 'Init canceled.'
exit 1
fi
rm -f mfa.key mfa.crt mfalist.dat services.txt
openssl req -x509 -sha256 -days 3650 -subj '/' -newkey rsa:2048 -passout pass:"$pass" -keyout mfa.key -out mfa.crt > /dev/null 2>&1
touch services.txt
echo "Initialized!"
}
addService() {
pass=$(getPass)
if [ -z "$pass" ]; then
echo 'Add canceled.'
exit 1
fi
ret=$(echo $pass | ./mfacodegen -a $service,$key)
if [ $? -ne 0 ]; then
echo "$ret" | head -n 1
exit 1
fi
echo "$ret"
echo $pass | ./mfacodegen -l > services.txt
}
generateServiceList() {
pass=$(getPass)
if [ -z "$pass" ]; then
echo 'List canceled.'
exit 1
fi
ret=$(echo $pass | ./mfacodegen -l 2>&1)
if [ $? -ne 0 ]; then
echo "$ret" | head -n 1
exit 1
fi
echo "$ret" > services.txt
echo "list generated."
}
generateToken() {
pass=$(getPass)
if [ -z "$pass" ]; then
echo 'Generate canceled.'
exit 1
fi
ret=$(echo $pass | ./mfacodegen -s $service 2>&1)
if [ $? -ne 0 ]; then
echo "$ret" | head -n 1
exit 1
fi
data=''
if [ -f ./services.txt ]; then
data=$(egrep -v "^${service}\$" ./services.txt)
fi
(echo "$service"; echo "$data") > services.txt
echo -n $ret
}
removeService() {
pass=$(getPass)
if [ -z "$pass" ]; then
echo 'Remove canceled.'
exit 1
fi
ret=$(echo $pass | ./mfacodegen -d $service)
if [ $? -ne 0 ]; then
echo "$ret" | head -n 1
exit 1
fi
echo "$ret"
echo $pass | ./mfacodegen -l > services.txt
}
filter() {
services=($(grep "$service" "./services.txt"))
arr=()
for s in ${services[@]}; do
arr+=("$(cat << EOI
{
"arg": "$s",
"title": "$s",
"subtitle": "generate MFA token for $s",
"autocomplete": "$s"
}
EOI
)")
done
echo '{"items": ['
(IFS=','; echo "${arr[*]}")
echo ']}'
}
case "$cmd" in
'init' )
initData
;;
'listgen' )
generateServiceList
;;
'add' )
addService
;;
'rm' )
removeService
;;
'filter' )
filter
;;
'token' )
generateToken
;;
esac