commit 7298bc0c732642e6dd9d10c273c6638be48da3b1 Author: Matthias Seidl Date: Thu Nov 19 16:52:32 2020 +0100 initial diff --git a/app.py b/app.py new file mode 100644 index 0000000..c2a2b60 --- /dev/null +++ b/app.py @@ -0,0 +1,102 @@ +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) diff --git a/templates/error.html b/templates/error.html new file mode 100644 index 0000000..3eb64fe --- /dev/null +++ b/templates/error.html @@ -0,0 +1,2 @@ +

Error

+

{{ error.description }}

diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..c7ef6a8 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,14 @@ + +{% if user %} +
+ Logged in as + + {{ user.username }} +
+test +logout +{% else %} +login +{% endif %} diff --git a/templates/test.html b/templates/test.html new file mode 100644 index 0000000..9d26f81 --- /dev/null +++ b/templates/test.html @@ -0,0 +1,11 @@ + +
+
+ +