123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/usr/bin/env python3
- import logging
- import os
- from flask import Flask, request, render_template, redirect, url_for, session, send_file
- from download_utils import APK, BadPackageNameException
- from subprocess import CalledProcessError
- if "LOG_LEVEL" in os.environ:
- log_level = os.environ["LOG_LEVEL"]
- else:
- log_level = logging.INFO
- # Logging configuration.
- logger = logging.getLogger(__name__)
- logging.basicConfig(
- format="%(asctime)s> [%(levelname)s] %(message)s",
- datefmt="%d/%m/%Y %H:%M:%S",
- level=log_level,
- )
- logging.getLogger("werkzeug").disabled = True
- if os.environ.get('CONF_FOLDER') is None:
- logger.error("No conf folder available")
- exit(1)
- TOKEN = None
- with open(os.path.join(os.environ['CONF_FOLDER'], 'web.token')) as f:
- TOKEN = f.read().strip()
- CONF = {
- 'yes': True,
- 'verbose': False,
- 'tokencachefile': os.path.join(os.environ['CONF_FOLDER'], 'token.cache'),
- }
- CONF_FILE = os.path.join(os.environ['CONF_FOLDER'], 'gplaycli.conf')
- app = Flask(__name__)
- app.secret_key = TOKEN
- @app.errorhandler(400)
- @app.errorhandler(404)
- @app.errorhandler(500)
- def application_error(error):
- logger.error(error)
- return render_template('error.html', code=error.code, error=str(error)), error.code
- @app.route("/return-file/")
- def return_file():
- package_name = session.get("package_name")
- filename = f"{package_name}.apk"
- location = session.get("filename", '')
- if location != '':
- location = os.path.join('/bot', location)
- logging.info(f"sending {location}")
- return send_file(location, attachment_filename=filename, as_attachment=True)
- @app.route("/download/<package_name>", methods=["GET"])
- def get_download(package_name):
- return download(package_name)
- @app.route("/download/", methods=["POST"])
- def post_download():
- package_name = request.form.get('package_name', '').strip()
- return download(package_name)
- def download(package_name):
- logger.info("downloading {} ...".format(package_name))
- apk = APK(package_name, conf=CONF, conf_file=CONF_FILE)
- try:
- apk.download()
- with apk.send(split=False, remove=False) as files:
- for f in files:
- session['package_name'] = package_name
- session['filename'] = f
- except BadPackageNameException as e:
- logger.error("Bad package name: {}".format(e))
- return render_template('error.html', code=500, error="Bad package name: {}".format(e)), 500
- except CalledProcessError:
- logger.error("Failed to send APK file")
- return render_template('error.html', code=500, error="Failed to send APK file"), 500
- return redirect(url_for("return_file"))
- @app.route("/", methods=["GET"], strict_slashes=False)
- def home():
- return render_template('home.html')
- if __name__ == "__main__":
- app.run(host="0.0.0.0", port=5000)
|