| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -2,14 +2,113 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import os | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import sys | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import time | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					from syncplay import ep_server | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# def runSyncplay(args: list, envs: dict) -> None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#     os.execvpe('syncplay-server', ['syncplay-server'] + args, envs) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# runSyncplay(['--password', 'test'], {'PYTHONUNBUFFERED': '1'}) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					def checkOpt(args: list, option: str) -> bool: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if option not in args:  # option not found | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return False | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    args.remove(option)  # remove target option | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return True | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					print(sys.argv) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					print(os.environ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					time.sleep(200) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					def fetchOpt(args: list, option: str, default): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if option not in args:  # option not found | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return default | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    index = args.index(option) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if index + 1 == len(args): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Error: `%s` missing value' % option, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        sys.exit(1) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    targetVal = args[index + 1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    del sys.argv[index : index + 2]  # remove target option and value | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if type(default) == int: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return int(targetVal)  # return int value | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return targetVal | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					isDebug = checkOpt(sys.argv, '--debug') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					portValue = None  # no specify in default | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if 'PORT' in os.environ:  # `PORT` env variable | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    portValue = int(os.environ['PORT']) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					portValue = fetchOpt(sys.argv, '--port', portValue) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					passwdStr = None  # no password in default | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if 'PASSWD' in os.environ:  # `PASSWD` env variable | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    passwdStr = os.environ['PASSWD'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					passwdStr = fetchOpt(sys.argv, '--password', passwdStr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					saltValue = ''  # using empty string in default | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if 'SALT' in os.environ:  # `SALT` env variable | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    saltValue = os.environ['SALT'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if checkOpt(sys.argv, '--random-salt'): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    saltValue = None | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					saltValue = fetchOpt(sys.argv, '--salt', saltValue) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tlsPath = '/certs' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if 'TLS_PATH' in os.environ:  # `TLS_PATH` env variable | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    tlsPath = os.environ['TLS_PATH'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					tlsPath = fetchOpt(sys.argv, '--tls', tlsPath) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					enableTls = False | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if checkOpt(sys.argv, '--enable-tls'): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    enableTls = True | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if 'TLS' in os.environ and os.environ['TLS'] in ['ON', 'TRUE']: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    enableTls = True | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					motdMessage = fetchOpt(sys.argv, '--motd', None)  # without motd message in default | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					motdFile = fetchOpt(sys.argv, '--motd-file', None) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if motdFile is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    motdMessage = None  # cover motd message | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					elif motdMessage is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    motdFile = '/app/syncplay/motd' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    os.system('mkdir -p /app/syncplay/') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    with open(motdFile, mode = 'w', encoding = 'utf-8') as fileObj: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        fileObj.write(str(motdMessage)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if isDebug:  # print debug log | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if portValue is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Port -> %d' % portValue) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if saltValue is None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Using random salt', file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Salt -> `%s`' % saltValue, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if passwdStr is None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Running without password', file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('Password -> `%s`' % passwdStr, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if enableTls: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('TLS enabled -> `%s`' % tlsPath, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if motdFile is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('MOTD File -> `%s`' % motdFile, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if motdMessage is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print('MOTD message -> `%s`' % motdMessage, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if portValue is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sys.argv += ['--port', str(portValue)] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if passwdStr is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sys.argv += ['--password', passwdStr] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if saltValue is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sys.argv += ['--salt', saltValue] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if enableTls: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sys.argv += ['--tls', tlsPath] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if motdFile is not None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    sys.argv += ['--motd-file', motdFile] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					if isDebug:  # print debug log | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    print('Boot args -> %s' % sys.argv, file = sys.stderr) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					sys.exit(ep_server.main()) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |