from authlib.integrations.flask_client import OAuth, token_update, OAuthError from flask import Flask, request, url_for, render_template, redirect, session import urllib import base64 def fetch_token(name): return session['token'] app = Flask(__name__) app.secret_key = 'super secret key' oauth = OAuth(app, fetch_token=fetch_token) oauth.register( name='gitea', client_id='950be675-a53d-4d3b-a3c2-d2f5331581aa', client_secret='PuiKSkdR5GxLJGXo_A2irUGjL0ZQdwHLsrSRFUM0_8U=', access_token_url='https://git.seidlm.at/login/oauth/access_token', access_token_params=None, authorize_url='https://git.seidlm.at/login/oauth/authorize', authorize_params=None, api_base_url='https://git.seidlm.at/api/v1/', client_kwargs=None, ) @token_update.connect_via(app) def on_token_update(sender, name, token, refresh_token=None, access_token=None): if refresh_token: item = OAuth2Token.find(name=name, refresh_token=refresh_token) elif access_token: item = OAuth2Token.find(name=name, access_token=access_token) else: return # update old token item.access_token = token['access_token'] item.refresh_token = token.get('refresh_token') item.expires_at = token['expires_at'] item.save() @app.errorhandler(OAuthError) def handle_error(error): return render_template('error.html', error=error) @app.route('/login') def login(): redirect_uri = url_for('authorize', _external=True) return oauth.gitea.authorize_redirect(redirect_uri) @app.route('/authorize') def authorize(): token = oauth.gitea.authorize_access_token() resp = oauth.gitea.get('user') user = resp.json() session['token'] = token session['user'] = user return redirect('/') @app.route('/logout') def logout(): session.pop('token', None) session.pop('user', None) return redirect('/') @app.route('/') def home(): user = session.get('user') return render_template('home.html', user=user) @app.route('/test') def test(): resp = oauth.gitea.get(urllib.parse.quote('repos/seidl/blog/contents//recipes/recipes/30_knoblauchpüree.rst')) content = base64.b64decode(resp.json()['content']).decode('UTF-8') return render_template('test.html',content=content) @app.route('/update', methods=['POST']) def update(): content = request.form.get('content') content = base64.b64encode(content.encode('UTF-8')) resp = oauth.gitea.put(urllib.parse.quote('repos/seidl/blog/contents//recipes/recipes/30_knoblauchpüree.rst'), json={"author": { "email": "user@example.com", "name": "string" }, "branch": "master", "committer": { "email": "user@example.com", "name": "string" },"content": content.decode('UTF-8'), "dates": { "author": "2020-11-17T22:59:16.418Z", "committer": "2020-11-17T22:59:16.418Z" }, "from_path": "string", "message": "string", "new_branch": "master", "sha": "string"}) return str(resp) if __name__ == "__main__": gitea = oauth.create_client('gitea') app.run(debug=True)