163 lines
4.5 KiB
Python
163 lines
4.5 KiB
Python
#! /usr/local/bin/python3
|
||
|
||
""" betaEnrollment
|
||
install beta macOS software
|
||
"""
|
||
|
||
|
||
# Import modules.
|
||
import os; import time as clock
|
||
|
||
# on Terminal outputs
|
||
class screen:
|
||
class formatting:
|
||
# text formatting
|
||
clear = '\033[0m'
|
||
class color:
|
||
purple = '\033[95m'
|
||
cyan = '\033[96m'
|
||
cyan_dark = '\033[36m'
|
||
blue = '\033[94m'
|
||
green = '\033[92m'
|
||
yellow = '\033[93m'
|
||
red = '\033[91m'
|
||
class font:
|
||
bold = '\033[1m'
|
||
underline = '\033[4m'
|
||
|
||
# screen functions
|
||
def cls(times = 1): # to clear screen
|
||
times = int(abs(times));
|
||
for _ in range(times):
|
||
try:
|
||
clear
|
||
except NameError:
|
||
import os; return(os.system('clear'))
|
||
|
||
class info: ### screen messages
|
||
def status(message): print(formatting.font.bold + 'ℹ️\t' + formatting.clear + message)
|
||
def err(message): print(formatting.font.bold + formatting.color.red + '❌\t' + formatting.clear + formatting.clear + message)
|
||
def warning(message): print(formatting.font.bold + formatting.color.yellow + '⚠️\t' + formatting.clear + formatting.clear + message)
|
||
def success(message): print(formatting.font.bold + formatting.color.green + '✅\t' + formatting.clear + formatting.clear + message)
|
||
|
||
|
||
class user:
|
||
result = ''
|
||
betaRequest = None
|
||
|
||
class execution:
|
||
command = None
|
||
output = None
|
||
|
||
class programs:
|
||
def displayCurrent():
|
||
# display current seeding information, and at the same time, check if the user is an administrator
|
||
|
||
if (os.system('sudo /System/Library/PrivateFrameworks/Seeding.framework/Versions/A/Resources/seedutil current')):
|
||
# If this is true, then the user is not an administrator, or it was cancelled. The warning alone is good enough, we could safely cancel the operation.
|
||
exit()
|
||
return (False)
|
||
else:
|
||
print('')
|
||
return (True)
|
||
|
||
def enrollBeta(betaType):
|
||
# import modules
|
||
import os
|
||
|
||
# Enroll to the beta.
|
||
execution.command = 'sudo /System/Library/PrivateFrameworks/Seeding.framework/Versions/A/Resources/seedutil '
|
||
|
||
if not(betaType):
|
||
execution.command += 'unenroll'
|
||
else:
|
||
execution.command += 'enroll '
|
||
|
||
if betaType == 1:
|
||
execution.command += 'PublicSeed'
|
||
elif betaType == 2:
|
||
execution.command += 'DeveloperSeed'
|
||
|
||
execution.output = os.system(execution.command)
|
||
|
||
return(execution.output)
|
||
|
||
def viewLisenceAgreement(betaType):
|
||
if (betaType):
|
||
# import the module
|
||
import os
|
||
import time as clock
|
||
|
||
# Remove the wrong lisence agreement if it still exists.
|
||
if (os.path.exists('/tmp/Beta Lisence Agreement.pdf')):
|
||
os.remove('/tmp/Beta Lisence Agreement.pdf')
|
||
|
||
# Pre-load the curl command.
|
||
execution.command = 'curl -s '
|
||
|
||
# Download and show the lisence agreement.
|
||
if betaType == 1:
|
||
execution.command += 'https://beta.apple.com/agreements/Beta_20200622.pdf -o /tmp/Beta\ Lisence\ Agreement.pdf '
|
||
elif betaType == 2:
|
||
execution.command += 'https://developer.apple.com/support/downloads/terms/apple-developer-program/Apple-Developer-Program-License-Agreement-20220606-English.pdf -o /tmp/Beta\ Lisence\ Agreement.pdf '
|
||
|
||
# Download the file.
|
||
execution.output = os.system(execution.command)
|
||
|
||
# Open the file.
|
||
if not(execution.output):
|
||
os.system('open /tmp/Beta\ Lisence\ Agreement.pdf')
|
||
print('\n' + screen.formatting.font.bold + 'Please carefully read the lisence agreement.' + screen.formatting.clear + ' [⌃C: cancel | ⏎: agree]')
|
||
clock.sleep(10)
|
||
|
||
# Prompt whether or not the user agrees with it.
|
||
if not(execution.output):
|
||
print('Do you agree with the terms and conditions?')
|
||
try:
|
||
input('').strip()
|
||
except KeyboardInterrupt:
|
||
return(False)
|
||
else:
|
||
return(True)
|
||
else:
|
||
return (True)
|
||
|
||
def promptChange():
|
||
# import modules
|
||
import os
|
||
import time as clock
|
||
|
||
print(screen.formatting.font.bold + 'Would you want to use the public beta (1), private beta (2), or unenroll (0)? ' + screen.formatting.clear)
|
||
clock.sleep(0.1)
|
||
|
||
try:
|
||
# Request for user input.
|
||
user.result = abs(int(input('Please type your numerical choice to continue: ')))
|
||
user.betaRequest = user.result
|
||
|
||
if (user.result > 2):
|
||
# Keep looping until the user does it right
|
||
os.system('clear')
|
||
return(False)
|
||
else:
|
||
if (programs.viewLisenceAgreement(user.betaRequest)):
|
||
return(not(bool(programs.enrollBeta(user.betaRequest))))
|
||
|
||
except KeyboardInterrupt:
|
||
exit()
|
||
|
||
def main():
|
||
while True:
|
||
# import modules
|
||
import time as clock
|
||
import os
|
||
|
||
# Run the programs.
|
||
programs.displayCurrent()
|
||
|
||
if (programs.promptChange()):
|
||
exit()
|
||
|
||
|
||
main()
|
||
|