rstcms/app.py

103 lines
3.0 KiB
Python

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)