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()
|