71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import argparse
 | 
						|
from tornado import httpserver
 | 
						|
from tornado import ioloop as io
 | 
						|
import functools
 | 
						|
import tornado_crontab
 | 
						|
import os
 | 
						|
import configparser
 | 
						|
 | 
						|
from playmaker.server import createServer
 | 
						|
from playmaker.service import Play
 | 
						|
 | 
						|
 | 
						|
def auto_update(service):
 | 
						|
    if service.loggedIn:
 | 
						|
        print('Executing auto update cron task')
 | 
						|
        apps = service.check_local_apks().get('message')
 | 
						|
        if len(apps) > 0:
 | 
						|
            service.download_selection(apps)
 | 
						|
            service.fdroid_update()
 | 
						|
 | 
						|
 | 
						|
# tornado setup
 | 
						|
if __name__ == '__main__':
 | 
						|
    # arguments parsing
 | 
						|
    ap = argparse.ArgumentParser(description='Apk and fdroid repository ' +
 | 
						|
                                 'manager with a web interface.')
 | 
						|
    ap.add_argument('-f', '--fdroid', dest='fdroid',
 | 
						|
                    action='store_true', default=False,
 | 
						|
                    help='Enable fdroid integration')
 | 
						|
    ap.add_argument('-d', '--debug', dest='debug',
 | 
						|
                    action='store_true', default=False,
 | 
						|
                    help='Enable debug output')
 | 
						|
    args = ap.parse_args()
 | 
						|
    service = Play(debug=args.debug, fdroid=args.fdroid)
 | 
						|
    app = createServer(service)
 | 
						|
 | 
						|
    # server setup
 | 
						|
    certfile = os.environ.get('HTTPS_CERTFILE')
 | 
						|
    keyfile = os.environ.get('HTTPS_KEYFILE')
 | 
						|
    server = (httpserver.HTTPServer(app)
 | 
						|
              if certfile is None or keyfile is None else
 | 
						|
              httpserver.HTTPServer(app,
 | 
						|
                                    ssl_options={'certfile': certfile,
 | 
						|
                                                 'keyfile': keyfile}))
 | 
						|
    server.listen(5000, address='0.0.0.0')
 | 
						|
 | 
						|
    # credentials setup
 | 
						|
    auth_file_parser = configparser.ConfigParser()
 | 
						|
    auth_file_parser.read('credentials.conf')
 | 
						|
    if 'google' in auth_file_parser:
 | 
						|
        google_section = auth_file_parser['google']
 | 
						|
        if 'email' in google_section and 'password' in google_section:
 | 
						|
            service.set_credentials(google_section['email'], google_section['password'])
 | 
						|
        elif 'gsfId' in google_section and 'token' in google_section:
 | 
						|
            service.set_token_credentials(google_section['gsfId'], google_section['token'])
 | 
						|
 | 
						|
    if service.has_credentials():
 | 
						|
        service.login()
 | 
						|
        service.update_state()
 | 
						|
 | 
						|
    # cron task settings
 | 
						|
    cron_string = os.environ.get('CRONTAB_STRING')
 | 
						|
    if cron_string is None:
 | 
						|
        # default is every night at 2AM
 | 
						|
        cron_string = '0 2 * * *'
 | 
						|
    _func = functools.partial(auto_update, *[service])
 | 
						|
    tornado_crontab.CronTabCallback(_func, cron_string).start()
 | 
						|
    io.IOLoop.instance().start()
 |