Files
vibeproxy/internal/web/templates/settings.html
T
owenandClaude Sonnet 5 ba1f7c4c03 Initial vibeproxy implementation
Self-contained HTTP/HTTPS/TCP/UDP reverse proxy manager written in Go,
with SQLite storage, a Bootstrap 5 admin UI (Go templates, no JS
framework), and a REST API under /api/v1.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTXFrNP1imCW7jtfL5SZrw
2026-08-17 10:28:59 -05:00

92 lines
4.4 KiB
HTML

{{define "settings"}}{{template "header" .}}
{{$s := .Data}}
<div class="row g-3">
<div class="col-lg-7">
<div class="card mb-3">
<div class="card-header">Let's Encrypt / ACME</div>
<div class="card-body">
<form method="post" action="/settings">
{{template "csrf_field" .CSRFToken}}
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Contact Email</label>
<input class="form-control" name="acme_email" value="{{$s.ACMEEmail}}">
</div>
<div class="col-md-6">
<label class="form-label">Renewal Window (days before expiry)</label>
<input class="form-control" name="acme_renewal_window_days" value="{{$s.ACMERenewalWindowDays}}">
</div>
<div class="col-md-6">
<div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" name="acme_staging" id="staging" {{if $s.ACMEStaging}}checked{{end}}>
<label class="form-check-label" for="staging">Use Let's Encrypt staging environment</label>
</div>
</div>
<div class="col-md-12">
<label class="form-label">Certificate Storage Path</label>
<input class="form-control" name="cert_storage_path" value="{{$s.CertStoragePath}}">
</div>
<div class="col-md-12">
<label class="form-label">Trusted Proxy Networks (CIDR, one per line — only these may set X-Forwarded-For)</label>
<textarea class="form-control" name="trusted_proxy_cidrs" rows="3">{{join $s.TrustedProxyCIDRs "\n"}}</textarea>
</div>
<div class="col-md-6">
<label class="form-label">Log Retention (days)</label>
<input class="form-control" name="log_retention_days" value="{{$s.LogRetentionDays}}">
</div>
</div>
<hr>
<h6>Backups</h6>
<div class="row g-3">
<div class="col-md-4">
<div class="form-check form-switch mt-4">
<input class="form-check-input" type="checkbox" name="backup_enabled" id="backupEn" {{if $s.BackupEnabled}}checked{{end}}>
<label class="form-check-label" for="backupEn">Automatic backups enabled</label>
</div>
</div>
<div class="col-md-4">
<label class="form-label">Interval (hours)</label>
<input class="form-control" name="backup_interval_hours" value="{{$s.BackupIntervalHours}}">
</div>
<div class="col-md-4">
<label class="form-label">Keep last N backups</label>
<input class="form-control" name="backup_retention_count" value="{{$s.BackupRetentionCount}}">
</div>
<div class="col-12">
<label class="form-label">Backup Directory</label>
<input class="form-control" name="backup_path" value="{{$s.BackupPath}}">
</div>
</div>
<div class="mt-4"><button class="btn btn-primary"><i class="bi bi-check-lg"></i> Save Settings</button></div>
</form>
</div>
</div>
<div class="card mb-3">
<div class="card-header">Manual Backup</div>
<div class="card-body">
<form method="post" action="/settings/backup">
{{template "csrf_field" .CSRFToken}}
<button class="btn btn-outline-primary"><i class="bi bi-download"></i> Backup Now</button>
</form>
</div>
</div>
</div>
<div class="col-lg-5">
<div class="card mb-3">
<div class="card-header">Administrator Account</div>
<div class="card-body">
<form method="post" action="/settings/password">
{{template "csrf_field" .CSRFToken}}
<div class="mb-3"><label class="form-label">Current Password</label><input type="password" class="form-control" name="current_password" required></div>
<div class="mb-3"><label class="form-label">New Password</label><input type="password" class="form-control" name="new_password" minlength="8" required></div>
<div class="mb-3"><label class="form-label">Confirm New Password</label><input type="password" class="form-control" name="confirm_password" minlength="8" required></div>
<button class="btn btn-primary"><i class="bi bi-key"></i> Change Password</button>
</form>
</div>
</div>
</div>
</div>
{{template "footer" .}}{{end}}