# Python imports import os # Module imports from plane.authentication.adapter.credential import CredentialAdapter from plane.db.models import User from plane.authentication.adapter.error import ( AUTHENTICATION_ERROR_CODES, AuthenticationException, ) from plane.license.utils.instance_value import get_configuration_value class EmailProvider(CredentialAdapter): provider = "email" def __init__(self, request, key=None, code=None, is_signup=False, callback=None): super().__init__(request=request, provider=self.provider, callback=callback) self.key = key self.code = code self.is_signup = is_signup (ENABLE_EMAIL_PASSWORD,) = get_configuration_value( [ { "key": "ENABLE_EMAIL_PASSWORD", "default": os.environ.get("ENABLE_EMAIL_PASSWORD"), } ] ) if ENABLE_EMAIL_PASSWORD == "0": raise AuthenticationException( error_code=AUTHENTICATION_ERROR_CODES[ "EMAIL_PASSWORD_AUTHENTICATION_DISABLED" ], error_message="EMAIL_PASSWORD_AUTHENTICATION_DISABLED", ) def set_user_data(self): if self.is_signup: # Check if the user already exists if User.objects.filter(email=self.key).exists(): raise AuthenticationException( error_message="USER_ALREADY_EXIST", error_code=AUTHENTICATION_ERROR_CODES["USER_ALREADY_EXIST"], ) super().set_user_data( { "email": self.key, "user": { "avatar": "", "first_name": "", "last_name": "", "provider_id": "", "is_password_autoset": False, }, } ) return else: user = User.objects.filter(email=self.key).first() # User does not exists if not user: raise AuthenticationException( error_message="USER_DOES_NOT_EXIST", error_code=AUTHENTICATION_ERROR_CODES["USER_DOES_NOT_EXIST"], payload={"email": self.key}, ) # Check user password if not user.check_password(self.code): raise AuthenticationException( error_message=( "AUTHENTICATION_FAILED_SIGN_UP" if self.is_signup else "AUTHENTICATION_FAILED_SIGN_IN" ), error_code=AUTHENTICATION_ERROR_CODES[ ( "AUTHENTICATION_FAILED_SIGN_UP" if self.is_signup else "AUTHENTICATION_FAILED_SIGN_IN" ) ], payload={"email": self.key}, ) super().set_user_data( { "email": self.key, "user": { "avatar": "", "first_name": "", "last_name": "", "provider_id": "", "is_password_autoset": False, }, } ) return