initial
This commit is contained in:
commit
7298bc0c73
|
|
@ -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)
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<h1>Error</h1>
|
||||||
|
<p>{{ error.description }}</p>
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
<style>
|
||||||
|
pre { max-width: 100%; overflow: scroll; }
|
||||||
|
</style>
|
||||||
|
{% if user %}
|
||||||
|
<div>
|
||||||
|
Logged in as
|
||||||
|
<span><img src='{{ user.avatar_url }}'></span>
|
||||||
|
<span>{{ user.username }}</span>
|
||||||
|
</div>
|
||||||
|
<a href="/test">test</a>
|
||||||
|
<a href="/logout">logout</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="/login">login</a>
|
||||||
|
{% endif %}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
<style>
|
||||||
|
pre { max-width: 100%; overflow: scroll; }
|
||||||
|
</style>
|
||||||
|
<form action='/update' method='POST'>
|
||||||
|
<textarea rows = "5" cols = "60" name = "content" id="content">
|
||||||
|
{% if content %}
|
||||||
|
{{ content }}
|
||||||
|
{% endif %}
|
||||||
|
</textarea><br>
|
||||||
|
<button type="submit">Update in GIT!!</button>
|
||||||
|
</form>
|
||||||
Loading…
Reference in New Issue