#!/usr/bin/env python3 from flask import Flask, abort, redirect, request, jsonify from http import HTTPStatus from flask_httpauth import HTTPBasicAuth from bs4 import BeautifulSoup app = Flask(__name__) auth = HTTPBasicAuth() @auth.verify_password def verify_password(username, password): return username == 'garmin-live' and password == 'xxx' @app.route('/mailhook', methods=['POST']) @auth.login_required def cloudmailin_webhook(): data = request.get_json() import tempfile, os t = tempfile.mkstemp() with os.fdopen(t[0], "w") as f: f.write("%r" % data) spf = data["envelope"]["spf"] # assert spf["result"] == "pass" assert spf["domain"] in ("garmin.com", "gaast.net") soup = BeautifulSoup(data["html"]) for l in soup.find_all('a',href=True): url = l.get("href") if url.startswith("https://livetrack.garmin.com/"): date = data["headers"]["date"] open("log", "a").write(f"{url} {date}\n") break else: abort(422) return jsonify(status='ok') @app.route('/') def root(): log = open("log", "r").readlines() return redirect(log[-1].split()[0], code=302) #import sys #if len(sys.argv) > 1: # data = eval(open(sys.argv[1], "r").read()) if __name__ == "__main__": app.run(host='0.0.0.0', port=1375, debug=False)