0584ebdc74
Co-authored-by: Cursor <cursoragent@cursor.com>
134 lines
12 KiB
HTML
134 lines
12 KiB
HTML
{% extends "admin/layout.html" %}
|
||
|
||
{% block title %}Настройки — Админка{% endblock %}
|
||
{% block admin_title %}Настройки системы{% endblock %}
|
||
{% block admin_subtitle %}<p class="admin-main__subtitle">Авторизация, captcha, S3, SFTP, FTP, SMTP и лимиты загрузки</p>{% endblock %}
|
||
|
||
{% block admin_content %}
|
||
<form method="post" class="settings-form">
|
||
<input type="hidden" name="action" value="save">
|
||
|
||
<div class="admin-panel">
|
||
<h2 class="admin-panel__title">Загрузка фото</h2>
|
||
<div class="form-group">
|
||
<label for="max_bulk_upload">Максимум файлов за раз (до 100)</label>
|
||
<input type="number" id="max_bulk_upload" name="max_bulk_upload" min="1" max="100" value="{{ settings.max_bulk_upload }}">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">Регистрация и авторизация</h2>
|
||
<label class="form-checkbox"><input type="checkbox" name="registration_enabled" {% if settings.registration_enabled %}checked{% endif %}><span>Разрешить регистрацию</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="password_login_enabled" {% if settings.password_login_enabled %}checked{% endif %}><span>Вход по паролю</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="passkey_enabled" {% if settings.passkey_enabled %}checked{% endif %}><span>Passkey (WebAuthn)</span></label>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">Passkey — RP ID и Origin</h2>
|
||
<p class="folder-hint">Для production укажите домен сайта. Значения из админки имеют приоритет над <code>.env</code>.</p>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>RP ID (домен)</label><input type="text" name="webauthn_rp_id" value="{{ settings.webauthn_rp_id or '' }}" placeholder="example.com"></div>
|
||
<div class="form-group"><label>RP Name</label><input type="text" name="webauthn_rp_name" value="{{ settings.webauthn_rp_name or 'PhotoHost' }}"></div>
|
||
<div class="form-group"><label>Origin (полный URL)</label><input type="text" name="webauthn_origin" value="{{ settings.webauthn_origin or '' }}" placeholder="https://example.com"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">Captcha</h2>
|
||
<div class="form-group">
|
||
<label for="captcha_provider">Провайдер</label>
|
||
<select id="captcha_provider" name="captcha_provider">
|
||
<option value="none" {% if settings.captcha_provider == 'none' %}selected{% endif %}>Отключена</option>
|
||
<option value="turnstile" {% if settings.captcha_provider == 'turnstile' %}selected{% endif %}>Cloudflare Turnstile</option>
|
||
<option value="recaptcha_v2" {% if settings.captcha_provider == 'recaptcha_v2' %}selected{% endif %}>Google reCAPTCHA v2</option>
|
||
<option value="recaptcha_v3" {% if settings.captcha_provider == 'recaptcha_v3' %}selected{% endif %}>Google reCAPTCHA v3</option>
|
||
</select>
|
||
</div>
|
||
<label class="form-checkbox"><input type="checkbox" name="captcha_on_login" {% if settings.captcha_on_login %}checked{% endif %}><span>На странице входа</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="captcha_on_register" {% if settings.captcha_on_register %}checked{% endif %}><span>На странице регистрации</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="captcha_on_forgot_password" {% if settings.captcha_on_forgot_password %}checked{% endif %}><span>На сбросе пароля</span></label>
|
||
|
||
<h3 class="admin-panel__subtitle" style="margin-top:16px">Cloudflare Turnstile</h3>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Site Key</label><input type="text" name="turnstile_site_key" value="{{ settings.turnstile_site_key or '' }}"></div>
|
||
<div class="form-group"><label>Secret Key</label><input type="password" name="turnstile_secret_key" placeholder="оставьте пустым, если не меняете"></div>
|
||
</div>
|
||
|
||
<h3 class="admin-panel__subtitle" style="margin-top:16px">Google reCAPTCHA v2</h3>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Site Key</label><input type="text" name="recaptcha_v2_site_key" value="{{ settings.recaptcha_v2_site_key or '' }}"></div>
|
||
<div class="form-group"><label>Secret Key</label><input type="password" name="recaptcha_v2_secret_key" placeholder="оставьте пустым, если не меняете"></div>
|
||
</div>
|
||
|
||
<h3 class="admin-panel__subtitle" style="margin-top:16px">Google reCAPTCHA v3</h3>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Site Key</label><input type="text" name="recaptcha_v3_site_key" value="{{ settings.recaptcha_v3_site_key or '' }}"></div>
|
||
<div class="form-group"><label>Secret Key</label><input type="password" name="recaptcha_v3_secret_key" placeholder="оставьте пустым, если не меняете"></div>
|
||
<div class="form-group"><label>Мин. score (0–1)</label><input type="number" step="0.1" min="0" max="1" name="recaptcha_v3_min_score" value="{{ settings.recaptcha_v3_min_score or 0.5 }}"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">Amazon S3 / совместимое хранилище</h2>
|
||
<label class="form-checkbox"><input type="checkbox" name="s3_enabled" {% if settings.s3_enabled %}checked{% endif %}><span>Включить S3</span></label>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Endpoint</label><input type="text" name="s3_endpoint" value="{{ settings.s3_endpoint or '' }}" placeholder="https://s3.amazonaws.com"></div>
|
||
<div class="form-group"><label>Bucket</label><input type="text" name="s3_bucket" value="{{ settings.s3_bucket or '' }}"></div>
|
||
<div class="form-group"><label>Access Key</label><input type="text" name="s3_access_key" value="{{ settings.s3_access_key or '' }}"></div>
|
||
<div class="form-group"><label>Secret Key</label><input type="password" name="s3_secret_key" placeholder="оставьте пустым, если не меняете"></div>
|
||
<div class="form-group"><label>Region</label><input type="text" name="s3_region" value="{{ settings.s3_region or 'us-east-1' }}"></div>
|
||
<div class="form-group"><label>Public URL (CDN)</label><input type="text" name="s3_public_url" value="{{ settings.s3_public_url or '' }}"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">SFTP (резервная копия)</h2>
|
||
<label class="form-checkbox"><input type="checkbox" name="sftp_enabled" {% if settings.sftp_enabled %}checked{% endif %}><span>Включить SFTP</span></label>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Host</label><input type="text" name="sftp_host" value="{{ settings.sftp_host or '' }}"></div>
|
||
<div class="form-group"><label>Port</label><input type="number" name="sftp_port" value="{{ settings.sftp_port }}"></div>
|
||
<div class="form-group"><label>Username</label><input type="text" name="sftp_username" value="{{ settings.sftp_username or '' }}"></div>
|
||
<div class="form-group"><label>Password</label><input type="password" name="sftp_password" placeholder="оставьте пустым, если не меняете"></div>
|
||
<div class="form-group"><label>Remote path</label><input type="text" name="sftp_remote_path" value="{{ settings.sftp_remote_path or '/uploads' }}"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">FTP</h2>
|
||
<label class="form-checkbox"><input type="checkbox" name="ftp_enabled" {% if settings.ftp_enabled %}checked{% endif %}><span>Включить FTP</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="ftp_use_tls" {% if settings.ftp_use_tls %}checked{% endif %}><span>FTPS (TLS)</span></label>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Host</label><input type="text" name="ftp_host" value="{{ settings.ftp_host or '' }}"></div>
|
||
<div class="form-group"><label>Port</label><input type="number" name="ftp_port" value="{{ settings.ftp_port }}"></div>
|
||
<div class="form-group"><label>Username</label><input type="text" name="ftp_username" value="{{ settings.ftp_username or '' }}"></div>
|
||
<div class="form-group"><label>Password</label><input type="password" name="ftp_password" placeholder="оставьте пустым, если не меняете"></div>
|
||
<div class="form-group"><label>Remote path</label><input type="text" name="ftp_remote_path" value="{{ settings.ftp_remote_path or '/uploads' }}"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="admin-panel" style="margin-top:24px">
|
||
<h2 class="admin-panel__title">SMTP (email)</h2>
|
||
<label class="form-checkbox"><input type="checkbox" name="smtp_enabled" {% if settings.smtp_enabled %}checked{% endif %}><span>Включить SMTP</span></label>
|
||
<label class="form-checkbox"><input type="checkbox" name="smtp_use_tls" {% if settings.smtp_use_tls %}checked{% endif %}><span>TLS</span></label>
|
||
<div class="settings-grid">
|
||
<div class="form-group"><label>Host</label><input type="text" name="smtp_host" value="{{ settings.smtp_host or '' }}" placeholder="smtp.gmail.com"></div>
|
||
<div class="form-group"><label>Port</label><input type="number" name="smtp_port" value="{{ settings.smtp_port }}"></div>
|
||
<div class="form-group"><label>Username</label><input type="text" name="smtp_username" value="{{ settings.smtp_username or '' }}"></div>
|
||
<div class="form-group"><label>Password</label><input type="password" name="smtp_password" placeholder="оставьте пустым, если не меняете"></div>
|
||
<div class="form-group"><label>From email</label><input type="email" name="smtp_from_email" value="{{ settings.smtp_from_email or '' }}"></div>
|
||
<div class="form-group"><label>From name</label><input type="text" name="smtp_from_name" value="{{ settings.smtp_from_name or 'PhotoHost' }}"></div>
|
||
</div>
|
||
<p class="folder-hint">SMTP используется для сброса пароля, регистрации и уведомлений о загрузке.</p>
|
||
</div>
|
||
|
||
<div class="page-header__actions" style="margin-top:24px">
|
||
<button type="submit" class="btn btn--primary">Сохранить настройки</button>
|
||
</div>
|
||
</form>
|
||
|
||
<form method="post" style="margin-top:16px">
|
||
<input type="hidden" name="action" value="test_smtp">
|
||
<button type="submit" class="btn btn--ghost">Отправить тестовое письмо на {{ current_user.email }}</button>
|
||
</form>
|
||
{% endblock %}
|