88 lines
3.8 KiB
HTML
88 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>Setup — frp Admin</title>
|
|
<style>
|
|
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
|
:root{--bg:#fff;--bg2:#f5f5f5;--fg:#000;--fg2:#888;--border:#ddd;--accent:#000;--font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--radius:0}
|
|
@media(prefers-color-scheme:dark){
|
|
:root{--bg:#000;--bg2:#111;--fg:#fff;--fg2:#666;--border:#333;--accent:#fff}
|
|
}
|
|
html,body{height:100%}
|
|
body{font-family:var(--font);background:var(--bg2);color:var(--fg);font-size:14px;display:flex;align-items:center;justify-content:center;min-height:100vh;padding:20px}
|
|
.setup-card{width:520px;padding:32px;background:var(--bg);border:1px solid var(--border)}
|
|
.setup-card h1{font-size:20px;margin-bottom:4px;text-align:center;letter-spacing:-.5px}
|
|
.setup-card p{font-size:13px;color:var(--fg2);text-align:center;margin-bottom:24px}
|
|
.setup-card .error{font-size:13px;margin-bottom:12px;text-align:center}
|
|
.setup-card .section-title{font-size:12px;font-weight:600;letter-spacing:.3px;color:var(--fg2);text-transform:uppercase;margin-bottom:12px;padding-top:8px;border-top:1px solid var(--border)}
|
|
.setup-card .field{margin-bottom:16px}
|
|
.setup-card .field label{display:block;font-size:12px;color:var(--fg2);margin-bottom:4px}
|
|
input{padding:8px 12px;border:1px solid var(--border);background:var(--bg);color:var(--fg);font-size:13px;width:100%;-webkit-appearance:none;appearance:none}
|
|
input:focus{outline:1px solid var(--fg)}
|
|
button{padding:8px 16px;border:1px solid var(--fg);background:var(--fg);color:var(--bg);font-size:13px;cursor:pointer;font-family:var(--font);width:100%;margin-top:8px}
|
|
button:hover{opacity:.8}
|
|
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="setup-card">
|
|
<h1>frp Admin Setup</h1>
|
|
<p>Create an admin account and configure your server.</p>
|
|
{{if .Error}}
|
|
<div class="error">{{.Error}}</div>
|
|
{{end}}
|
|
<form method="post" action="/admin/setup">
|
|
<div class="section-title">Admin Account</div>
|
|
<div class="grid-2">
|
|
<div class="field">
|
|
<label for="username">Username</label>
|
|
<input type="text" id="username" name="username" required autofocus>
|
|
</div>
|
|
<div class="field">
|
|
<label for="name">Display Name</label>
|
|
<input type="text" id="name" name="name" placeholder="optional">
|
|
</div>
|
|
</div>
|
|
<div class="grid-2">
|
|
<div class="field">
|
|
<label for="password">Password</label>
|
|
<input type="password" id="password" name="password" required>
|
|
</div>
|
|
<div class="field">
|
|
<label for="confirm_password">Confirm Password</label>
|
|
<input type="password" id="confirm_password" name="confirm_password" required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="section-title">Server Configuration</div>
|
|
<div class="grid-2">
|
|
<div class="field">
|
|
<label for="bind_addr">Bind Address</label>
|
|
<input type="text" id="bind_addr" name="bind_addr" value="0.0.0.0">
|
|
</div>
|
|
<div class="field">
|
|
<label for="bind_port">Bind Port</label>
|
|
<input type="number" id="bind_port" name="bind_port" value="7000">
|
|
</div>
|
|
<div class="field">
|
|
<label for="dashboard_addr">Dashboard Address</label>
|
|
<input type="text" id="dashboard_addr" name="dashboard_addr" value="0.0.0.0">
|
|
</div>
|
|
<div class="field">
|
|
<label for="dashboard_port">Dashboard Port</label>
|
|
<input type="number" id="dashboard_port" name="dashboard_port" value="7500">
|
|
</div>
|
|
<div class="field">
|
|
<label for="auth_token">Auth Token</label>
|
|
<input type="text" id="auth_token" name="auth_token" placeholder="optional">
|
|
</div>
|
|
</div>
|
|
|
|
<button type="submit">Complete Setup</button>
|
|
</form>
|
|
</div>
|
|
</body>
|
|
</html>
|