Loading portal/rest/auth/gitlab.py +37 −5 Original line number Diff line number Diff line import logging from flask import Blueprint, Flask, Config, url_for, request, redirect, session, jsonify, \ make_response from flask_oauthlib.client import OAuth, OAuthRemoteApp from portal import oauth from portal.database.models import User from portal.service import service log = logging.getLogger(__name__) def extract_user_info(me: dict) -> dict: Loading Loading @@ -32,16 +38,41 @@ def create_gitlab_app(oauth: OAuth) -> OAuthRemoteApp: gitlab = create_gitlab_app(oauth=oauth) oauth = Blueprint('oauth', __name__, url_prefix='/oauth') oauth_blueprint = Blueprint('oauth', __name__, url_prefix='/oauth') @oauth.route('/login', methods=['GET']) @oauth_blueprint.route('/login', methods=['GET']) def oauth_login(): callback = url_for('oauth.oauth_authorized', _external=True, _scheme='https') return gitlab.authorize(callback=callback) @oauth.route('/login/authorized', methods=['GET']) def user_oauth_login(user): pass def user_oauth_register(user_info): new_user = User( uco=None, email=user_info['email'], username=user_info['username'], is_admin=False ) new_user.name = user_info['name'] service.write_entity(new_user) log.debug(f"Created user={new_user}") def user_login(user_info): user = User.query.find_by(username=user_info['user_name']) if not user: return user_oauth_register(user_info) resp = make_response(redirect(oauth.app.config.get('FRONTEND_URL'))) resp.set_cookie('user_name', user.username) return resp @oauth_blueprint.route('/login/authorized', methods=['GET']) def oauth_authorized(): resp = gitlab.authorized_response() if resp is None: Loading @@ -54,8 +85,9 @@ def oauth_authorized(): session['gitlab_token'] = (token, '') me = gitlab.get('/api/v4/user') user_info = extract_user_info(me.data) data = dict(data=me.data, token=token) return jsonify(data) login = user_login(user_info) login.set_cookie('gitlab_token', token) return login @gitlab.tokengetter Loading portal/rest/users/users.py +1 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ class UserList(Resource): admin = data.get('is_admin') or False new_user = User(uco=data['uco'], email=data['email'], username=data['username'], is_admin=admin) service.write_entity(new_user) log.debug(f"Created user={User}") log.debug(f"Created user={new_user}") return user_schema.dump(new_user)[0], 201 Loading run.py +2 −2 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ def register_blueprints(app): app.register_blueprint(projects, url_prefix=f"{api_prefix}/courses/<string:cid>/projects") app.register_blueprint(submissions, url_prefix=f"{api_prefix}/submissions") app.register_blueprint(auth, url_prefix=f"{api_prefix}/auth") from portal.rest.auth.gitlab import oauth app.register_blueprint(oauth) from portal.rest.auth.gitlab import oauth_blueprint app.register_blueprint(oauth_blueprint, url_prefix=f"{api_prefix}/oauth") def setup_application(): Loading Loading
portal/rest/auth/gitlab.py +37 −5 Original line number Diff line number Diff line import logging from flask import Blueprint, Flask, Config, url_for, request, redirect, session, jsonify, \ make_response from flask_oauthlib.client import OAuth, OAuthRemoteApp from portal import oauth from portal.database.models import User from portal.service import service log = logging.getLogger(__name__) def extract_user_info(me: dict) -> dict: Loading Loading @@ -32,16 +38,41 @@ def create_gitlab_app(oauth: OAuth) -> OAuthRemoteApp: gitlab = create_gitlab_app(oauth=oauth) oauth = Blueprint('oauth', __name__, url_prefix='/oauth') oauth_blueprint = Blueprint('oauth', __name__, url_prefix='/oauth') @oauth.route('/login', methods=['GET']) @oauth_blueprint.route('/login', methods=['GET']) def oauth_login(): callback = url_for('oauth.oauth_authorized', _external=True, _scheme='https') return gitlab.authorize(callback=callback) @oauth.route('/login/authorized', methods=['GET']) def user_oauth_login(user): pass def user_oauth_register(user_info): new_user = User( uco=None, email=user_info['email'], username=user_info['username'], is_admin=False ) new_user.name = user_info['name'] service.write_entity(new_user) log.debug(f"Created user={new_user}") def user_login(user_info): user = User.query.find_by(username=user_info['user_name']) if not user: return user_oauth_register(user_info) resp = make_response(redirect(oauth.app.config.get('FRONTEND_URL'))) resp.set_cookie('user_name', user.username) return resp @oauth_blueprint.route('/login/authorized', methods=['GET']) def oauth_authorized(): resp = gitlab.authorized_response() if resp is None: Loading @@ -54,8 +85,9 @@ def oauth_authorized(): session['gitlab_token'] = (token, '') me = gitlab.get('/api/v4/user') user_info = extract_user_info(me.data) data = dict(data=me.data, token=token) return jsonify(data) login = user_login(user_info) login.set_cookie('gitlab_token', token) return login @gitlab.tokengetter Loading
portal/rest/users/users.py +1 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,7 @@ class UserList(Resource): admin = data.get('is_admin') or False new_user = User(uco=data['uco'], email=data['email'], username=data['username'], is_admin=admin) service.write_entity(new_user) log.debug(f"Created user={User}") log.debug(f"Created user={new_user}") return user_schema.dump(new_user)[0], 201 Loading
run.py +2 −2 Original line number Diff line number Diff line Loading @@ -25,8 +25,8 @@ def register_blueprints(app): app.register_blueprint(projects, url_prefix=f"{api_prefix}/courses/<string:cid>/projects") app.register_blueprint(submissions, url_prefix=f"{api_prefix}/submissions") app.register_blueprint(auth, url_prefix=f"{api_prefix}/auth") from portal.rest.auth.gitlab import oauth app.register_blueprint(oauth) from portal.rest.auth.gitlab import oauth_blueprint app.register_blueprint(oauth_blueprint, url_prefix=f"{api_prefix}/oauth") def setup_application(): Loading