diff options
Diffstat (limited to 'python/fatcat_web')
-rw-r--r-- | python/fatcat_web/__init__.py | 12 | ||||
-rw-r--r-- | python/fatcat_web/auth.py | 14 | ||||
-rw-r--r-- | python/fatcat_web/routes.py | 31 | ||||
-rw-r--r-- | python/fatcat_web/templates/auth_account.html | 27 | ||||
-rw-r--r-- | python/fatcat_web/templates/base.html | 15 | ||||
-rw-r--r-- | python/fatcat_web/templates/editor_changelog.html | 4 | ||||
-rw-r--r-- | python/fatcat_web/templates/editor_view.html | 4 |
7 files changed, 85 insertions, 22 deletions
diff --git a/python/fatcat_web/__init__.py b/python/fatcat_web/__init__.py index 9cd5f812..0afee70e 100644 --- a/python/fatcat_web/__init__.py +++ b/python/fatcat_web/__init__.py @@ -23,21 +23,17 @@ oauth = OAuth(app) sentry = Sentry(app) conf = fatcat_client.Configuration() -conf.host = "http://localhost:9411/v0" +conf.host = Config.FATCAT_API_HOST api = fatcat_client.DefaultApi(fatcat_client.ApiClient(conf)) +from fatcat_web import routes, auth + if Config.FATCAT_API_AUTH_TOKEN: print("Found and using privileged token (eg, for account signup)") - priv_conf = fatcat_client.Configuration() - priv_conf.api_key["Authorization"] = Config.FATCAT_API_AUTH_TOKEN - priv_conf.api_key_prefix["Authorization"] = "Bearer" - priv_conf.host = 'http://localhost:9411/v0' - priv_api = fatcat_client.DefaultApi(fatcat_client.ApiClient(local_conf)) + priv_api = auth.auth_api(Config.FATCAT_API_AUTH_TOKEN) else: print("No privileged token found") priv_api = None -from fatcat_web import routes, auth - gitlab_bp = create_flask_blueprint(Gitlab, oauth, auth.handle_oauth) app.register_blueprint(gitlab_bp, url_prefix='/auth/gitlab') diff --git a/python/fatcat_web/auth.py b/python/fatcat_web/auth.py index 385f5c49..c6e6f04c 100644 --- a/python/fatcat_web/auth.py +++ b/python/fatcat_web/auth.py @@ -1,10 +1,17 @@ from flask import Flask, render_template, send_from_directory, request, \ - url_for, abort, g, redirect, jsonify, session -from fatcat_web import login_manager, api + url_for, abort, g, redirect, jsonify, session, flash +from fatcat_web import login_manager, api, Config from flask_login import logout_user, login_user, UserMixin import pymacaroons +import fatcat_client +def auth_api(token): + conf = fatcat_client.Configuration() + conf.api_key["Authorization"] = token + conf.api_key_prefix["Authorization"] = "Bearer" + conf.host = Config.FATCAT_API_HOST + return fatcat_client.DefaultApi(fatcat_client.ApiClient(conf)) def handle_logout(): logout_user() @@ -31,7 +38,7 @@ def handle_token_login(token): session['api_token'] = token session['editor'] = editor login_user(load_user(editor_id)) - return redirect("/") + return redirect("/auth/account") # This will need to login/signup via fatcatd API, then set token in session def handle_oauth(remote, token, user_info): @@ -70,6 +77,7 @@ def load_user(editor_id): token = session['api_token'] user = UserMixin() user.id = editor_id + user.editor_id = editor_id user.username = editor['username'] user.token = token return user diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 5d46fe0b..07947fd5 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -2,9 +2,10 @@ import os import json from flask import Flask, render_template, send_from_directory, request, \ - url_for, abort, g, redirect, jsonify, session + url_for, abort, g, redirect, jsonify, session, flash +from flask_login import login_required from fatcat_web import app, api -from fatcat_web.auth import handle_token_login, handle_logout +from fatcat_web.auth import handle_token_login, handle_logout, load_user, auth_api from fatcat_client.rest import ApiException from fatcat_web.search import do_search @@ -389,6 +390,23 @@ def token_login(): return handle_token_login(request.form.get('token')) return render_template('auth_token_login.html') +@app.route('/auth/change_username', methods=['POST']) +@login_required +def change_username(): + # show the user a list of login options + if not 'username' in request.form: + abort(400) + # on behalf of user... + user_api = auth_api(session['api_token']) + editor = user_api.get_editor(session['editor']['editor_id']) + editor.username = request.form['username'] + editor = user_api.update_editor(editor.editor_id, editor) + # update our session + session['editor'] = editor.to_dict() + load_user(editor.editor_id) + flash("Username updated successfully") + return redirect('/auth/account') + @app.route('/auth/logout') def logout(): # TODO: clear extra session info @@ -397,10 +415,11 @@ def logout(): @app.route('/auth/account') @login_required -def logout(): - # TODO: clear extra session info - handle_logout() - return render_template('auth_logout.html') +def auth_account(): + editor = api.get_editor(session['editor']['editor_id']) + session['editor'] = editor.to_dict() + load_user(editor.editor_id) + return render_template('auth_account.html') ### Static Routes ########################################################### diff --git a/python/fatcat_web/templates/auth_account.html b/python/fatcat_web/templates/auth_account.html new file mode 100644 index 00000000..57155722 --- /dev/null +++ b/python/fatcat_web/templates/auth_account.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} +{% block body %} + +<h1>Your Account</h1> + +<p><b>Username:</b> <code>{{ current_user.username }}</code> +<p><b>Editor Id:</b> <code><a href="/editor/{{ current_user.editor_id }}">{{ current_user.editor_id }}</a></code> + +<div> +<p>Change username: +<form class="" role="change_username" action="/auth/change_username" method="post"> + <div class="ui form"> + <div class="ui action input medium fluid"> + <input type="text" name="username" value="{{ current_user.username }}" aria-label="account username"> + <button class="ui button">Update</button> + </div> + </div> +</form> +</div> + +<p>In the future, you might be able to... +<ul> + <li>Create a bot user + <li>Generate an API token +</ul> + +{% endblock %} diff --git a/python/fatcat_web/templates/base.html b/python/fatcat_web/templates/base.html index 892ca788..27b163d2 100644 --- a/python/fatcat_web/templates/base.html +++ b/python/fatcat_web/templates/base.html @@ -34,7 +34,7 @@ {{ current_user.username }} <i class="dropdown icon"></i> <div class="menu"> <a class="item" href="/editgroup/current"><i class="edit icon"></i>Edits in Progress</a> - <a class="item" href="/editor/{{ current_user.id }}/changelog"><i class="history icon"></i>History</a> + <a class="item" href="/editor/{{ current_user.editor_id }}/changelog"><i class="history icon"></i>History</a> <div class="divider"></div> <a class="item" href="/auth/account"><i class="user icon"></i>Account</a> <a class="item" href="/auth/logout"><i class="sign out icon"></i>Logout</a> @@ -51,6 +51,19 @@ <!-- 4em top margin is "enough" --> <main class="ui main container" style="margin-top: 6em; margin-bottom: 2em;"> +{% with messages = get_flashed_messages() %} + {% if messages %} + <div class="ui message"> + {# Needs more javascript: <i class="close icon"></i> #} + <div class="header">Now Hear This!</div> + <ul class="list"> + {% for message in messages %} + <li>{{ message }} + {% endfor %} + </ul> + </div> + {% endif %} +{% endwith %} {% block fullbody %} <div class="ui container text"> {% block body %}Nothing to see here.{% endblock %} diff --git a/python/fatcat_web/templates/editor_changelog.html b/python/fatcat_web/templates/editor_changelog.html index 79127312..785c19bd 100644 --- a/python/fatcat_web/templates/editor_changelog.html +++ b/python/fatcat_web/templates/editor_changelog.html @@ -3,8 +3,8 @@ <h1 class="ui header">Editor Changelog: {{ editor.username }} <div class="sub header"> - <a href="/editor/{{editor.id}}"> - <code>editor {{ editor.id }}</code> + <a href="/editor/{{editor.editor_id}}"> + <code>editor {{ editor.editor_id }}</code> </a> </div> </h1> diff --git a/python/fatcat_web/templates/editor_view.html b/python/fatcat_web/templates/editor_view.html index c9b61f5d..eef4f040 100644 --- a/python/fatcat_web/templates/editor_view.html +++ b/python/fatcat_web/templates/editor_view.html @@ -3,10 +3,10 @@ <h1 class="ui header">{{ editor.username }} <div class="sub header"> - <code>editor {{ editor.id }}</code> + <code>editor {{ editor.editor_id }}</code> </div> </h1> -<p><b><a href="/editor/{{ editor.id }}/changelog">View editor's changelog</a></b> +<p><b><a href="/editor/{{ editor.editor_id }}/changelog">View editor's changelog</a></b> {% endblock %} |