initial commit
- This code now fully works, but it may not produce the best appearance.
This commit is contained in:
		
							parent
							
								
									f81ba576b6
								
							
						
					
					
						commit
						7725fe753c
					
				
					 1 changed files with 163 additions and 0 deletions
				
			
		
							
								
								
									
										163
									
								
								betaEnrollment.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								betaEnrollment.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,163 @@ | ||||||
|  | #! /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() | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue