Spaces:
Sleeping
Sleeping
| """ | |
| Email validation utilities to ensure only business emails are allowed. | |
| """ | |
| from fastapi import HTTPException | |
| # List of personal email domains to block | |
| PERSONAL_EMAIL_DOMAINS = { | |
| 'gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', | |
| 'aol.com', 'icloud.com', 'mail.com', 'protonmail.com', | |
| 'yandex.com', 'zoho.com', 'gmx.com', 'live.com', 'msn.com', | |
| 'me.com', 'mac.com', 'yahoo.co.uk', 'yahoo.co.jp', 'yahoo.fr', | |
| 'yahoo.de', 'yahoo.it', 'yahoo.es', 'yahoo.in', 'yahoo.com.au', | |
| 'gmail.co.uk', 'gmail.fr', 'gmail.de', 'gmail.it', 'gmail.es', | |
| 'gmail.in', 'gmail.com.au', 'hotmail.co.uk', 'hotmail.fr', | |
| 'hotmail.de', 'hotmail.it', 'hotmail.es', 'outlook.co.uk', | |
| 'outlook.fr', 'outlook.de', 'outlook.it', 'outlook.es', | |
| 'rediffmail.com', 'sina.com', 'qq.com', '163.com', '126.com', | |
| 'mail.ru', 'inbox.com', 'fastmail.com', 'tutanota.com', | |
| 'hey.com', 'pm.me' | |
| } | |
| def is_business_email(email: str) -> bool: | |
| """ | |
| Check if email is a business email (not personal). | |
| Args: | |
| email: Email address to validate | |
| Returns: | |
| True if business email, False if personal email | |
| """ | |
| if not email or '@' not in email: | |
| return False | |
| domain = email.split('@')[1].lower().strip() | |
| return domain not in PERSONAL_EMAIL_DOMAINS | |
| def validate_business_email(email: str) -> None: | |
| """ | |
| Raise exception if email is not a business email. | |
| Args: | |
| email: Email address to validate | |
| Raises: | |
| HTTPException: If email is a personal email domain | |
| """ | |
| if not email: | |
| raise HTTPException( | |
| status_code=400, | |
| detail="Email address is required" | |
| ) | |
| if not is_business_email(email): | |
| raise HTTPException( | |
| status_code=400, | |
| detail="Only business email addresses are allowed. Personal email accounts (Gmail, Yahoo, Outlook, etc.) are not permitted. Please use your work email address." | |
| ) | |