mirror of
				https://github.com/open-webui/open-webui
				synced 2025-06-26 18:26:48 +00:00 
			
		
		
		
	feat/fix: email format validation
This commit is contained in:
		
							parent
							
								
									cbee5621c3
								
							
						
					
					
						commit
						d8754b4486
					
				@ -8,6 +8,7 @@ from pydantic import BaseModel
 | 
			
		||||
import time
 | 
			
		||||
import uuid
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from apps.web.models.auths import (
 | 
			
		||||
    SigninForm,
 | 
			
		||||
    SignupForm,
 | 
			
		||||
@ -20,7 +21,7 @@ from apps.web.models.users import Users
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from utils.utils import get_password_hash, get_current_user, create_token
 | 
			
		||||
from utils.misc import get_gravatar_url
 | 
			
		||||
from utils.misc import get_gravatar_url, validate_email_format
 | 
			
		||||
from constants import ERROR_MESSAGES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -95,33 +96,38 @@ async def signin(form_data: SigninForm):
 | 
			
		||||
@router.post("/signup", response_model=SigninResponse)
 | 
			
		||||
async def signup(request: Request, form_data: SignupForm):
 | 
			
		||||
    if request.app.state.ENABLE_SIGNUP:
 | 
			
		||||
        if not Users.get_user_by_email(form_data.email.lower()):
 | 
			
		||||
            try:
 | 
			
		||||
                role = "admin" if Users.get_num_users() == 0 else "pending"
 | 
			
		||||
                hashed = get_password_hash(form_data.password)
 | 
			
		||||
                user = Auths.insert_new_auth(
 | 
			
		||||
                    form_data.email.lower(), hashed, form_data.name, role
 | 
			
		||||
                )
 | 
			
		||||
        if validate_email_format(form_data.email.lower()):
 | 
			
		||||
            if not Users.get_user_by_email(form_data.email.lower()):
 | 
			
		||||
                try:
 | 
			
		||||
                    role = "admin" if Users.get_num_users() == 0 else "pending"
 | 
			
		||||
                    hashed = get_password_hash(form_data.password)
 | 
			
		||||
                    user = Auths.insert_new_auth(
 | 
			
		||||
                        form_data.email.lower(), hashed, form_data.name, role
 | 
			
		||||
                    )
 | 
			
		||||
 | 
			
		||||
                if user:
 | 
			
		||||
                    token = create_token(data={"email": user.email})
 | 
			
		||||
                    # response.set_cookie(key='token', value=token, httponly=True)
 | 
			
		||||
                    if user:
 | 
			
		||||
                        token = create_token(data={"email": user.email})
 | 
			
		||||
                        # response.set_cookie(key='token', value=token, httponly=True)
 | 
			
		||||
 | 
			
		||||
                    return {
 | 
			
		||||
                        "token": token,
 | 
			
		||||
                        "token_type": "Bearer",
 | 
			
		||||
                        "id": user.id,
 | 
			
		||||
                        "email": user.email,
 | 
			
		||||
                        "name": user.name,
 | 
			
		||||
                        "role": user.role,
 | 
			
		||||
                        "profile_image_url": user.profile_image_url,
 | 
			
		||||
                    }
 | 
			
		||||
                else:
 | 
			
		||||
                    raise HTTPException(500, detail=ERROR_MESSAGES.CREATE_USER_ERROR)
 | 
			
		||||
            except Exception as err:
 | 
			
		||||
                raise HTTPException(500, detail=ERROR_MESSAGES.DEFAULT(err))
 | 
			
		||||
                        return {
 | 
			
		||||
                            "token": token,
 | 
			
		||||
                            "token_type": "Bearer",
 | 
			
		||||
                            "id": user.id,
 | 
			
		||||
                            "email": user.email,
 | 
			
		||||
                            "name": user.name,
 | 
			
		||||
                            "role": user.role,
 | 
			
		||||
                            "profile_image_url": user.profile_image_url,
 | 
			
		||||
                        }
 | 
			
		||||
                    else:
 | 
			
		||||
                        raise HTTPException(
 | 
			
		||||
                            500, detail=ERROR_MESSAGES.CREATE_USER_ERROR
 | 
			
		||||
                        )
 | 
			
		||||
                except Exception as err:
 | 
			
		||||
                    raise HTTPException(500, detail=ERROR_MESSAGES.DEFAULT(err))
 | 
			
		||||
            else:
 | 
			
		||||
                raise HTTPException(400, detail=ERROR_MESSAGES.EMAIL_TAKEN)
 | 
			
		||||
        else:
 | 
			
		||||
            raise HTTPException(400, detail=ERROR_MESSAGES.EMAIL_TAKEN)
 | 
			
		||||
            raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_EMAIL_FORMAT)
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(400, detail=ERROR_MESSAGES.ACCESS_PROHIBITED)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,6 +21,7 @@ class ERROR_MESSAGES(str, Enum):
 | 
			
		||||
        "Your session has expired or the token is invalid. Please sign in again."
 | 
			
		||||
    )
 | 
			
		||||
    INVALID_CRED = "The email or password provided is incorrect. Please check for typos and try logging in again."
 | 
			
		||||
    INVALID_EMAIL_FORMAT = "The email format you entered is invalid. Please double-check and make sure you're using a valid email address (e.g., yourname@example.com)."
 | 
			
		||||
    INVALID_PASSWORD = (
 | 
			
		||||
        "The password provided is incorrect. Please check for typos and try again."
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import hashlib
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_gravatar_url(email):
 | 
			
		||||
@ -21,3 +22,9 @@ def calculate_sha256(file):
 | 
			
		||||
    for chunk in iter(lambda: file.read(8192), b""):
 | 
			
		||||
        sha256.update(chunk)
 | 
			
		||||
    return sha256.hexdigest()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def validate_email_format(email: str) -> bool:
 | 
			
		||||
    if not re.match(r"[^@]+@[^@]+\.[^@]+", email):
 | 
			
		||||
        return False
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user