from authlib.integrations.base_client import OAuthError from django.conf import settings from django.shortcuts import redirect from oauth.hep_client import HepClient from oauth.oauth_client import oauth from oauth.models import OAuth2Token from oauth.user_signup_login_handler import handle_user_and_verify_products, EMAIL_NOT_VERIFIED, UNKNOWN_ERROR from django.contrib.auth import login as dj_login def login(request): hep_oauth_client = oauth.create_client('hep') redirect_uri = settings.OAUTH_LOCAL_REDIRECT_URI return hep_oauth_client.authorize_redirect(request, redirect_uri) def authorize(request): hep_client = HepClient() try: token = oauth.hep.authorize_access_token(request) user_data = hep_client.user_details(token=token) user, status_msg = handle_user_and_verify_products(user_data, token) user.sync_with_hep_data(user_data) except OAuthError: return redirect(f'/login-success?state={UNKNOWN_ERROR}') if user and status_msg != EMAIL_NOT_VERIFIED: dj_login(request, user) OAuth2Token.objects.update_or_create_token(token, user) if status_msg: return redirect(f'/login-success?state={status_msg}') # return status_msg # return cls.return_login_message(status_msg) return redirect(f'/login-success?state=success') # def return_login_message(cls, message): # # if message == EMAIL_NOT_VERIFIED or message == UNKNOWN_ERROR or message == 'invalid_credentials': # # raise Exception(message) # return cls(success=True, message=message)