-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathGateKeeper_Helper.command
executable file
·214 lines (181 loc) · 5.28 KB
/
GateKeeper_Helper.command
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#!/bin/zsh
#Attribute
GITHUB_URL="https://github.com/wynioux/macOS-GateKeeper-Helper"
RELEASE_VERSION="v1.2.2"
ROOT_PASSWORD=0
# Color Set
# Reset
Color_Off='\033[0m' # Text Reset
# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White
# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White
# Underline
UBlack='\033[4;30m' # Black
URed='\033[4;31m' # Red
UGreen='\033[4;32m' # Green
UYellow='\033[4;33m' # Yellow
UBlue='\033[4;34m' # Blue
UPurple='\033[4;35m' # Purple
UCyan='\033[4;36m' # Cyan
UWhite='\033[4;37m' # White
# Functions
# Shows menu.
showMenu()
{
echo "\n GateKeeper Helper ${RELEASE_VERSION}"
echo " ${Blue}${GITHUB_URL}${Color_Off}\n"
echo "${BGreen}Option 1: ${Green}Show GateKeeper Status${Color_Off}"
echo " ${BRed}Means:${Color_Off} Check GateKeeper status.\n"
echo "${BGreen}Option 2: ${Green}Enable GateKeeper${Color_Off}"
echo " ${BRed}Means:${Color_Off} Enables GateKeeper."
echo " ${BCyan}>>${Color_Off} Best security.\n"
echo "${BGreen}Option 3: ${Green}Disable GateKeeper${Color_Off}"
echo " ${BRed}Means:${Color_Off} Completely disables GateKeeper."
echo " ${BCyan}>>${Color_Off} Note that doing this introduces a major security risk in macOS.\n"
echo "${BGreen}Option 4: ${Green}Remove app from GateKeeper quarantine${Color_Off}"
echo " ${BRed}Means:${Color_Off} Allows an individual quarantined app to run.\n"
echo "${BGreen}Option 5: ${Green}Self-sign the app${Color_Off}"
echo " ${BRed}Means:${Color_Off} If GateKeeper is on and your app quits unexpectedly, try self-signing.\n"
echo "${BGreen}Option 6: ${Green}Quit${Color_Off}"
echo " ${BRed}Means:${Color_Off} Quit script.\n"
}
# Asks password.
askPassword()
{
case $ROOT_PASSWORD in
0)
echo "${Cyan}Please provide your password to proceed, or press ^C to quit.${Color_Off}"
ROOT_PASSWORD=1
;;
esac
}
# Shows continue message.
continueMessage()
{
echo "\nPress any key to continue."
read
}
# Shows gatekeeper status.
showGateKeeperStatus()
{
echo "${Green}You choose to show GateKeeper status.${Color_Off}"
askPassword
sudo spctl --status
continueMessage
}
# Enables gatekeeper.
enableGateKeeper()
{
echo "${Green}You chose to enable GateKeeper. Good for you!${Color_Off}"
askPassword
sudo spctl --master-enable
echo "${Red}GateKeeper enabled.${Color_Off}"
continueMessage
}
# Disables gatekeeper.
disableGateKeeper()
{
echo "${Green}You chose to disable GateKeeper.${Color_Off}"
echo -e " ${Red}>> Danger!${Color_Off}"
echo -e " Disabling GateKeeper is a very bad idea and creates"
echo -e " a major security hole in macOS\n"
askPassword
sudo spctl --master-disable
echo "${Red}GateKeeper disabled.${Color_Off}"
continueMessage
}
# Removes an app from gatekeeper quarantine
removeAppFromGateKeeper()
{
echo "${Green}You chose to remove the app from GateKeeper quarantine.${Color_Off}"
read "?Drag & drop the app on this window and then press Return: " FILEPATH
askPassword
sudo xattr -rd com.apple.quarantine "$FILEPATH"
if [ $? -eq 0 ]; then
echo "${Red}App removed from quarantine.${Color_Off}"
else
echo "${Red}App could not be removed from quarantine!${Color_Off}"
fi
continueMessage
}
# Self-signs an app.
selfSignApp()
{
echo "${Green}You chose to self-sign an app.${Color_Off}"
read "?Drag & drop the app on this window and then press Return: " FILEPATH
askPassword
sudo codesign -f -s - --deep "$FILEPATH"
echo "${Red}If you see - replacing existing signature - that means you are done!${Color_Off}"
echo "${Red}Otherwise please try again, sometimes it works second time.${Color_Off}"
continueMessage
}
# Shows quit message.
quitScript()
{
echo "Quitting..."
continueMessage
}
# Shows invalid option message.
showInvalid()
{
echo "${Red}Invalid option: ${BRed}${SELECTED_OPTION}${Color_Off}"
continueMessage
}
# Main function of the script.
startScript()
{
while :
do
clear
showMenu
read "?Please select an option: " SELECTED_OPTION
case $SELECTED_OPTION in
1)
clear
showGateKeeperStatus
;;
2)
clear
enableGateKeeper
;;
3)
clear
disableGateKeeper
;;
4)
clear
removeAppFromGateKeeper
;;
5)
clear
selfSignApp
;;
6)
clear
quitScript
break
;;
*)
clear
showInvalid
;;
esac
done
}
# Script starts here.
startScript