diff --git a/portal/rest/auth/gitlab.py b/portal/rest/auth/gitlab.py index 485a99f855994e19691c86dbd2bc71746902e51c..0d252137070dec2cab166503b85955423af34e26 100644 --- a/portal/rest/auth/gitlab.py +++ b/portal/rest/auth/gitlab.py @@ -1,10 +1,11 @@ import logging from typing import Union -from flask import Flask, Response, make_response, redirect, request, session, url_for +from flask import Flask, Response, make_response, redirect, request, session from flask_oauthlib.client import OAuth, OAuthRemoteApp from flask_restplus import Namespace, Resource from portal import oauth +from portal.rest import rest_api from portal.service import general from portal.service.users import create_user @@ -23,7 +24,7 @@ def extract_user_info(me: dict) -> dict: ) -def gitlab_enabled(app: Flask)-> bool: +def gitlab_enabled(app: Flask) -> bool: return app.config.get('GITLAB_URL') and \ app.config.get('GITLAB_CLIENT_ID') and \ app.config.get('GITLAB_CLIENT_SECRET') @@ -54,13 +55,12 @@ gitlab = create_gitlab_app(oauth_app=oauth) @oauth_namespace.route('/login') class OAuthLogin(Resource): - def get(self): if not gitlab: return {'message': 'Gitlab OAuth is not enabled'}, 404 - callback = url_for('oauth.oauth_authorized', - _external=True, _scheme='https') + callback = rest_api.url_for(OAuthLoginAuthorized, _external=True) + log.debug(f"Callback set: {callback}") return gitlab.authorize(callback=callback) @@ -88,7 +88,6 @@ def user_login(user_info) -> Response: @oauth_namespace.route('/login/authorized') class OAuthLoginAuthorized(Resource): - def get(self): if not gitlab: return {'message': 'Gitlab OAuth is not enabled'}, 404 diff --git a/portal/rest/auth/login.py b/portal/rest/auth/login.py index 98f2c4339f3538e7043f7d7b2e107f745f081e81..2b980f3c277a9c55efe24a809fab9ebb399e0170 100644 --- a/portal/rest/auth/login.py +++ b/portal/rest/auth/login.py @@ -6,6 +6,7 @@ from flask_restplus import Namespace, Resource, fields from portal import jwt from portal.database.models import Component, User +from portal.rest import rest_api from portal.service import general from portal.service.auth import login_component, login_user from portal.service.errors import PortalAPIError, UnauthorizedError @@ -18,16 +19,16 @@ login_schema = auth_namespace.model('LoginSchema', { 'id': fields.String, 'access_token': fields.String, 'refresh_token': fields.String -}) + }) refresh_schema = auth_namespace.model('RefreshSchema', { 'refresh_token': fields.String -}) + }) logout_schema = auth_namespace.model('LogoutSchema', { 'access_token': fields.String, 'refresh_token': fields.String -}) + }) @jwt.user_claims_loader @@ -77,7 +78,7 @@ def _create_tokens(client) -> dict: id=client_id, access_token=create_access_token(identity=client_id), refresh_token=create_refresh_token(identity=client_id) - ) + ) @auth_namespace.route('/login') diff --git a/portal/service/users.py b/portal/service/users.py index 528e03a619f9b4ab2817130d2c1d0fbd4d869aec..a17e1f63cd59c2488744e711bb5560927be2787e 100644 --- a/portal/service/users.py +++ b/portal/service/users.py @@ -32,10 +32,9 @@ def create_user(**data) -> User: data['is_admin'] = data.get('is_admin', False) username = data['username'] new_user = User(username=username) - __set_user_data(new_user, data, True) - if data['uco'] is None and ldap_wrapper.is_enabled: - new_user.uco = ldap_get_uco_for_user(username) + data['uco'] = ldap_get_uco_for_user(username) + __set_user_data(new_user, data, True) emails.notify_user(new_user, 'users', 'created', context=dict(username=username)) @@ -54,7 +53,7 @@ def ldap_get_uco_for_user(username: str) -> int: if not user_dict: return 0 desc = user_dict[0]['description'] - uco = [u for u in desc if u.startswith('UCO=')] + uco = [str(u) for u in desc if str(u).startswith('UCO=')] if not uco: return 0 return int(uco[0][4:])