from app import db from app.models import SiteSettings def get_settings(): settings = db.session.get(SiteSettings, 1) if settings is None: settings = SiteSettings(id=1) db.session.add(settings) db.session.commit() return settings def update_settings_from_form(form): settings = get_settings() settings.max_bulk_upload = max(1, min(100, int(form.get("max_bulk_upload") or 100))) settings.s3_enabled = form.get("s3_enabled") == "on" settings.s3_endpoint = form.get("s3_endpoint", "").strip() or None settings.s3_bucket = form.get("s3_bucket", "").strip() or None settings.s3_access_key = form.get("s3_access_key", "").strip() or None if form.get("s3_secret_key", "").strip(): settings.s3_secret_key = form.get("s3_secret_key", "").strip() settings.s3_region = form.get("s3_region", "").strip() or "us-east-1" settings.s3_public_url = form.get("s3_public_url", "").strip() or None settings.sftp_enabled = form.get("sftp_enabled") == "on" settings.sftp_host = form.get("sftp_host", "").strip() or None settings.sftp_port = int(form.get("sftp_port") or 22) settings.sftp_username = form.get("sftp_username", "").strip() or None if form.get("sftp_password", "").strip(): settings.sftp_password = form.get("sftp_password", "").strip() settings.sftp_remote_path = form.get("sftp_remote_path", "").strip() or "/uploads" settings.ftp_enabled = form.get("ftp_enabled") == "on" settings.ftp_host = form.get("ftp_host", "").strip() or None settings.ftp_port = int(form.get("ftp_port") or 21) settings.ftp_username = form.get("ftp_username", "").strip() or None if form.get("ftp_password", "").strip(): settings.ftp_password = form.get("ftp_password", "").strip() settings.ftp_remote_path = form.get("ftp_remote_path", "").strip() or "/uploads" settings.ftp_use_tls = form.get("ftp_use_tls") == "on" settings.smtp_enabled = form.get("smtp_enabled") == "on" settings.smtp_host = form.get("smtp_host", "").strip() or None settings.smtp_port = int(form.get("smtp_port") or 587) settings.smtp_username = form.get("smtp_username", "").strip() or None if form.get("smtp_password", "").strip(): settings.smtp_password = form.get("smtp_password", "").strip() settings.smtp_from_email = form.get("smtp_from_email", "").strip() or None settings.smtp_from_name = form.get("smtp_from_name", "").strip() or "PhotoHost" settings.smtp_use_tls = form.get("smtp_use_tls") == "on" settings.registration_enabled = form.get("registration_enabled") == "on" settings.password_login_enabled = form.get("password_login_enabled") == "on" settings.passkey_enabled = form.get("passkey_enabled") == "on" settings.webauthn_rp_id = form.get("webauthn_rp_id", "").strip() or None settings.webauthn_rp_name = form.get("webauthn_rp_name", "").strip() or "PhotoHost" settings.webauthn_origin = form.get("webauthn_origin", "").strip() or None provider = form.get("captcha_provider", "none").strip() if provider not in ("none", "turnstile", "recaptcha_v2", "recaptcha_v3"): provider = "none" settings.captcha_provider = provider settings.turnstile_site_key = form.get("turnstile_site_key", "").strip() or None if form.get("turnstile_secret_key", "").strip(): settings.turnstile_secret_key = form.get("turnstile_secret_key", "").strip() settings.recaptcha_v2_site_key = form.get("recaptcha_v2_site_key", "").strip() or None if form.get("recaptcha_v2_secret_key", "").strip(): settings.recaptcha_v2_secret_key = form.get("recaptcha_v2_secret_key", "").strip() settings.recaptcha_v3_site_key = form.get("recaptcha_v3_site_key", "").strip() or None if form.get("recaptcha_v3_secret_key", "").strip(): settings.recaptcha_v3_secret_key = form.get("recaptcha_v3_secret_key", "").strip() try: settings.recaptcha_v3_min_score = max(0.0, min(1.0, float(form.get("recaptcha_v3_min_score") or 0.5))) except ValueError: settings.recaptcha_v3_min_score = 0.5 settings.captcha_on_login = form.get("captcha_on_login") == "on" settings.captcha_on_register = form.get("captcha_on_register") == "on" settings.captcha_on_forgot_password = form.get("captcha_on_forgot_password") == "on" db.session.commit() return settings def get_auth_public_settings(): settings = get_settings() return { "registration_enabled": settings.registration_enabled, "password_login_enabled": settings.password_login_enabled, "passkey_enabled": settings.passkey_enabled, }