feat(auth): switch signup to OTP verification flow
Replace legacy signup with start/verify/resend endpoints, add OTP-focused mail templates and auth rate limits, and align compose/env/runbook for local self-hosted Supabase OTP behavior.
This commit is contained in:
@@ -78,66 +78,6 @@ class CelerySettings(BaseModel):
|
||||
task_max_retries: int = 3
|
||||
|
||||
|
||||
class WebSettings(BaseModel):
|
||||
server: Literal["uvicorn", "gunicorn"] = "gunicorn"
|
||||
host: str = "0.0.0.0"
|
||||
port: int = Field(default=8000, ge=1, le=65535)
|
||||
reload: bool = False
|
||||
workers: int = Field(default=2, ge=1, le=64)
|
||||
worker_class: str = "uvicorn.workers.UvicornWorker"
|
||||
timeout: int = Field(default=60, ge=1, le=600)
|
||||
keepalive: int = Field(default=5, ge=1, le=120)
|
||||
log_level: Literal["debug", "info", "warning", "error", "critical"] = "info"
|
||||
|
||||
|
||||
class GunicornSettings(BaseModel):
|
||||
enabled_in_prod: bool = True
|
||||
workers: int = 2
|
||||
worker_class: str = "uvicorn.workers.UvicornWorker"
|
||||
worker_connections: int = 1000
|
||||
timeout: int = 60
|
||||
graceful_timeout: int = 30
|
||||
keepalive: int = 5
|
||||
max_requests: int = 1000
|
||||
max_requests_jitter: int = 50
|
||||
preload_app: bool = False
|
||||
|
||||
|
||||
class WorkerGroupSettings(BaseModel):
|
||||
concurrency: int = Field(default=2, ge=1, le=32)
|
||||
pool: Literal["prefork", "threads", "solo", "eventlet", "gevent"] = "prefork"
|
||||
time_limit: int = Field(default=300, ge=1, le=7200)
|
||||
soft_time_limit: int = Field(default=240, ge=1, le=3600)
|
||||
max_tasks_per_child: int = Field(default=200, ge=1, le=1000)
|
||||
prefetch_multiplier: int = Field(default=1, ge=1, le=10)
|
||||
|
||||
|
||||
class WorkerSettings(BaseModel):
|
||||
groups: dict[str, WorkerGroupSettings] = Field(
|
||||
default_factory=lambda: {
|
||||
"critical": WorkerGroupSettings(
|
||||
concurrency=2,
|
||||
prefetch_multiplier=1,
|
||||
time_limit=300,
|
||||
),
|
||||
"default": WorkerGroupSettings(
|
||||
concurrency=2,
|
||||
prefetch_multiplier=4,
|
||||
time_limit=600,
|
||||
),
|
||||
"bulk": WorkerGroupSettings(
|
||||
concurrency=1,
|
||||
prefetch_multiplier=1,
|
||||
time_limit=3600,
|
||||
max_tasks_per_child=100,
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
def get_group_config(self, group_name: str) -> WorkerGroupSettings:
|
||||
return self.groups.get(group_name, WorkerGroupSettings())
|
||||
|
||||
|
||||
class CorsSettings(BaseModel):
|
||||
allow_origins: list[str] = Field(
|
||||
default_factory=lambda: [
|
||||
@@ -220,14 +160,11 @@ def _resolve_env_file() -> str:
|
||||
|
||||
class Settings(BaseSettings):
|
||||
runtime: RuntimeSettings = RuntimeSettings()
|
||||
web: WebSettings = WebSettings()
|
||||
gunicorn: GunicornSettings = GunicornSettings()
|
||||
cors: CorsSettings = CorsSettings()
|
||||
redis: RedisSettings = RedisSettings()
|
||||
supabase: SupabaseSettings = SupabaseSettings()
|
||||
celery: CelerySettings = CelerySettings()
|
||||
database: DatabaseSettings = DatabaseSettings()
|
||||
worker: WorkerSettings = WorkerSettings()
|
||||
|
||||
@computed_field
|
||||
@property
|
||||
|
||||
Reference in New Issue
Block a user