#!/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)