Initial commit
Dieser Commit ist enthalten in:
122
social_networks/gmail/gmail_utils.py
Normale Datei
122
social_networks/gmail/gmail_utils.py
Normale Datei
@ -0,0 +1,122 @@
|
||||
"""
|
||||
Gmail Utils - Utility-Funktionen für Gmail
|
||||
"""
|
||||
|
||||
import logging
|
||||
import random
|
||||
import string
|
||||
from typing import Optional
|
||||
|
||||
logger = logging.getLogger("gmail_utils")
|
||||
|
||||
class GmailUtils:
|
||||
"""
|
||||
Utility-Funktionen für Gmail/Google Accounts
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def generate_gmail_username(first_name: str, last_name: str) -> str:
|
||||
"""
|
||||
Generiert einen Gmail-kompatiblen Benutzernamen
|
||||
"""
|
||||
# Basis aus Vor- und Nachname
|
||||
first_clean = ''.join(c.lower() for c in first_name if c.isalnum())
|
||||
last_clean = ''.join(c.lower() for c in last_name if c.isalnum())
|
||||
|
||||
# Verschiedene Varianten
|
||||
variants = [
|
||||
f"{first_clean}{last_clean}",
|
||||
f"{first_clean}.{last_clean}",
|
||||
f"{last_clean}{first_clean}",
|
||||
f"{first_clean[0]}{last_clean}",
|
||||
f"{first_clean}{last_clean[0]}"
|
||||
]
|
||||
|
||||
# Wähle eine zufällige Variante
|
||||
base = random.choice(variants)
|
||||
|
||||
# Füge zufällige Zahlen hinzu
|
||||
random_suffix = ''.join(random.choices(string.digits, k=random.randint(2, 4)))
|
||||
|
||||
return f"{base}{random_suffix}"
|
||||
|
||||
@staticmethod
|
||||
def generate_secure_password(length: int = 16) -> str:
|
||||
"""
|
||||
Generiert ein sicheres Passwort für Google-Anforderungen
|
||||
- Mindestens 8 Zeichen
|
||||
- Mischung aus Buchstaben, Zahlen und Symbolen
|
||||
"""
|
||||
# Stelle sicher dass alle Zeichentypen enthalten sind
|
||||
password_chars = []
|
||||
|
||||
# Mindestens 2 Kleinbuchstaben
|
||||
password_chars.extend(random.choices(string.ascii_lowercase, k=2))
|
||||
|
||||
# Mindestens 2 Großbuchstaben
|
||||
password_chars.extend(random.choices(string.ascii_uppercase, k=2))
|
||||
|
||||
# Mindestens 2 Zahlen
|
||||
password_chars.extend(random.choices(string.digits, k=2))
|
||||
|
||||
# Mindestens 2 Sonderzeichen
|
||||
special_chars = "!@#$%^&*"
|
||||
password_chars.extend(random.choices(special_chars, k=2))
|
||||
|
||||
# Fülle mit zufälligen Zeichen auf
|
||||
remaining_length = length - len(password_chars)
|
||||
all_chars = string.ascii_letters + string.digits + special_chars
|
||||
password_chars.extend(random.choices(all_chars, k=remaining_length))
|
||||
|
||||
# Mische die Zeichen
|
||||
random.shuffle(password_chars)
|
||||
|
||||
return ''.join(password_chars)
|
||||
|
||||
@staticmethod
|
||||
def is_valid_gmail_address(email: str) -> bool:
|
||||
"""
|
||||
Prüft ob eine Gmail-Adresse gültig ist
|
||||
"""
|
||||
if not email.endswith("@gmail.com"):
|
||||
return False
|
||||
|
||||
username = email.split("@")[0]
|
||||
|
||||
# Gmail-Regeln:
|
||||
# - 6-30 Zeichen
|
||||
# - Buchstaben, Zahlen und Punkte
|
||||
# - Muss mit Buchstabe oder Zahl beginnen
|
||||
# - Kein Punkt am Anfang oder Ende
|
||||
# - Keine aufeinanderfolgenden Punkte
|
||||
|
||||
if len(username) < 6 or len(username) > 30:
|
||||
return False
|
||||
|
||||
if not username[0].isalnum() or not username[-1].isalnum():
|
||||
return False
|
||||
|
||||
if ".." in username:
|
||||
return False
|
||||
|
||||
# Prüfe erlaubte Zeichen
|
||||
for char in username:
|
||||
if not (char.isalnum() or char == "."):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def format_phone_for_google(phone: str, country_code: str = "+1") -> str:
|
||||
"""
|
||||
Formatiert eine Telefonnummer für Google
|
||||
"""
|
||||
# Entferne alle nicht-numerischen Zeichen
|
||||
phone_digits = ''.join(c for c in phone if c.isdigit())
|
||||
|
||||
# Wenn die Nummer bereits mit Ländercode beginnt
|
||||
if phone.startswith("+"):
|
||||
return phone
|
||||
|
||||
# Füge Ländercode hinzu
|
||||
return f"{country_code}{phone_digits}"
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren