add bots
This commit is contained in:
		
							parent
							
								
									a014acd35d
								
							
						
					
					
						commit
						d4981b23de
					
				@ -157,6 +157,7 @@ def validate_username(value: str,
 | 
				
			|||||||
                      field_name: str = "login",
 | 
					                      field_name: str = "login",
 | 
				
			||||||
                      with_httpexception=False,
 | 
					                      with_httpexception=False,
 | 
				
			||||||
                      need_back=False,
 | 
					                      need_back=False,
 | 
				
			||||||
 | 
					                      is_bot=False,
 | 
				
			||||||
                      min_length=3,
 | 
					                      min_length=3,
 | 
				
			||||||
                      max_length=32,
 | 
					                      max_length=32,
 | 
				
			||||||
                      error_status_code: int = status.HTTP_401_UNAUTHORIZED,
 | 
					                      error_status_code: int = status.HTTP_401_UNAUTHORIZED,
 | 
				
			||||||
@ -169,7 +170,7 @@ def validate_username(value: str,
 | 
				
			|||||||
    - no consecutive underscores
 | 
					    - no consecutive underscores
 | 
				
			||||||
    - only [A-Za-z0-9_]
 | 
					    - only [A-Za-z0-9_]
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    valid, result = core_validate_username(value, field_name, need_back=True, min_length=min_length, max_length=max_length)
 | 
					    valid, result = core_validate_username(value, field_name, need_back=True, is_bot=is_bot, min_length=min_length, max_length=max_length)
 | 
				
			||||||
    if not valid:
 | 
					    if not valid:
 | 
				
			||||||
        if with_httpexception:
 | 
					        if with_httpexception:
 | 
				
			||||||
            raise HTTPException(status_code=error_status_code, detail=error_detail)
 | 
					            raise HTTPException(status_code=error_status_code, detail=error_detail)
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ import re
 | 
				
			|||||||
def validate_username(value: str,
 | 
					def validate_username(value: str,
 | 
				
			||||||
                      field_name: str = "login",
 | 
					                      field_name: str = "login",
 | 
				
			||||||
                      need_back=False,
 | 
					                      need_back=False,
 | 
				
			||||||
 | 
					                      is_bot=False,
 | 
				
			||||||
                      min_length=3,
 | 
					                      min_length=3,
 | 
				
			||||||
                      max_length=32) -> str:
 | 
					                      max_length=32) -> str:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
@ -38,7 +39,25 @@ def validate_username(value: str,
 | 
				
			|||||||
        msg = f"{field_name.capitalize()} must contain only English letters, digits, and underscores"
 | 
					        msg = f"{field_name.capitalize()} must contain only English letters, digits, and underscores"
 | 
				
			||||||
        return (False, msg) if need_back else False
 | 
					        return (False, msg) if need_back else False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (True, value.lower()) if need_back else value.lower()
 | 
					    val_lower = value.lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Проверка окончания имени в зависимости от is_bot
 | 
				
			||||||
 | 
					    if is_bot and not val_lower.endswith("bot"):
 | 
				
			||||||
 | 
					        msg = f"{field_name.capitalize()} must end with 'bot' for bot accounts"
 | 
				
			||||||
 | 
					        return (False, msg) if need_back else False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not is_bot and val_lower.endswith("bot"):
 | 
				
			||||||
 | 
					        msg = f"{field_name.capitalize()} must not end with 'bot' for non-bot accounts"
 | 
				
			||||||
 | 
					        return (False, msg) if need_back else False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Если заканчивается на 'bot', то перед ним должно быть >=3 символов (кроме '_')
 | 
				
			||||||
 | 
					    if val_lower.endswith("bot"):
 | 
				
			||||||
 | 
					        prefix = re.sub(r'_+', '', val_lower[:-3])  # убираем все подчёркивания
 | 
				
			||||||
 | 
					        if len(prefix) < 3:
 | 
				
			||||||
 | 
					            msg = f"{field_name.capitalize()} must contain at least 3 non-underscore characters before 'bot'"
 | 
				
			||||||
 | 
					            return (False, msg) if need_back else False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (True, val_lower) if need_back else val_lower
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def validate_password(value: str,
 | 
					def validate_password(value: str,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
[project]
 | 
					[project]
 | 
				
			||||||
name = "common-lib"
 | 
					name = "common-lib"
 | 
				
			||||||
version = "0.0.34"
 | 
					version = "0.0.35"
 | 
				
			||||||
description = "Библиотека общих компонентов для микросервисов yobble"
 | 
					description = "Библиотека общих компонентов для микросервисов yobble"
 | 
				
			||||||
authors = [{ name = "cheykrym", email = "you@example.com" }]
 | 
					authors = [{ name = "cheykrym", email = "you@example.com" }]
 | 
				
			||||||
license = "MIT"
 | 
					license = "MIT"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user