#!/usr/bin/env python3 #Curious Greg - Curious Cat to Mastodon crossposter # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. import requests, sqlite3, json from mastodon import Mastodon from flask import Flask, render_template, request, session, redirect, url_for import urllib cfg = json.load(open("meta.json")) db = sqlite3.connect("database.db") c = db.cursor() c.execute("CREATE TABLE IF NOT EXISTS `data` (secret TEXT NOT NULL, appid TEXT NOT NULL, appsecret TEXT NOT NULL, cc VARCHAR, latest_post VARCHAR)") app = Flask(cfg['name']) app.secret_key = cfg['flask_key'] @app.route('/') def main(): if 'acct' not in session: return render_template("landing_page.html") else: return redirect(url_for('home')) @app.route('/home') def home(): if 'acct' in session: acct = session['acct'] return render_template("home.html", acct=acct) else: return redirect(url_for('main')) @app.route('/internal/auth_a') def internal_auth_a(): session['instance_url'] = request.args.get('url', default='mastodon.social', type=str) if not session['instance_url'].startswith("https://"): session['instance_url'] = "https://{}".format(session['instance_url']) session['client_id'], session['client_secret'] = Mastodon.create_app(cfg['name'], api_base_url=session['instance_url'], scopes=["write:statuses"], website=cfg['website'], redirect_uris=['https://cg.lynnesbian.space/internal/auth_b'] ) params = { "client_id": session['client_id'], "client_secret":session['client_secret'], "scope":"write:statuses", "redirect_uri": "https://cg.lynnesbian.space/internal/auth_b", "response_type":"code", } url = "{}/oauth/authorize?{}".format(session['instance_url'], urllib.parse.urlencode(params)) return url @app.route('/internal/auth_b') def internal_auth_b(): session['secret'] = request.args.get('code') #write details to DB c.execute("INSERT INTO data (secret, appid, appsecret) VALUES (?, ?, ?, ?)", (session['secret'], session['client_id'], session['client_secret'])) db.commit() @app.route('/debug') def print_debug_info(): return json.dumps(session._get_current_object()) # return(json.dumps(client_info))