103 lines
3.5 KiB
HTML
103 lines
3.5 KiB
HTML
{{define "user.html"}}
|
||
<!doctype html>
|
||
<html lang="de">
|
||
{{template "partials_head" .}}
|
||
<body>
|
||
{{template "partials_nav" .}}
|
||
<main class="page">
|
||
{{template "partials_flash" .}}
|
||
|
||
{{with .User}}{{ $uname := .Username }}
|
||
<h1>User: {{.Username}}</h1>
|
||
|
||
<section class="card">
|
||
<h2>Details</h2>
|
||
<div class="grid">
|
||
<div><span class="muted">Role</span><div>{{.Role}}</div></div>
|
||
<div><span class="muted">Tier</span><div>{{.Tier}}</div></div>
|
||
</div>
|
||
</section>
|
||
|
||
{{if or (eq $.Role "operator") (eq $.Role "admin")}}
|
||
<section class="card">
|
||
<h2>Aktionen</h2>
|
||
|
||
<div class="grid">
|
||
<form method="post" action="{{abs (print "/users/" .Username "/password")}}">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<label>Neues Passwort</label>
|
||
<input name="password" type="password" required>
|
||
<button class="btn" type="submit">Passwort ändern</button>
|
||
</form>
|
||
|
||
<form method="post" action="{{abs (print "/users/" .Username "/role")}}">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<label>Role</label>
|
||
<select name="role">
|
||
<option value="user">user</option>
|
||
<option value="admin">admin</option>
|
||
</select>
|
||
<button class="btn" type="submit">Rolle setzen</button>
|
||
</form>
|
||
|
||
<form method="post" action="{{abs (print "/users/" .Username "/tier")}}">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<label>Tier</label>
|
||
<input name="tier" placeholder="none/pro/...">
|
||
<button class="btn" type="submit">Tier setzen</button>
|
||
</form>
|
||
</div>
|
||
|
||
<form method="post" action="{{abs (print "/users/" .Username "/delete")}}" onsubmit="return confirm('User wirklich löschen?')">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<button class="btn btn-danger" type="submit">User löschen</button>
|
||
</form>
|
||
</section>
|
||
|
||
<section class="card">
|
||
<h2>Access</h2>
|
||
{{range .Access}}<div class="pill">{{.Perm}} → {{.Topic}}</div>{{end}}
|
||
<div class="hint">Access wird mit <code>ntfy access</code> verwaltet (siehe Access-Seite).</div>
|
||
</section>
|
||
|
||
<section class="card">
|
||
<h2>Tokens</h2>
|
||
{{if $.Tokens}}
|
||
{{range $.Tokens}}
|
||
<div class="row">
|
||
<code class="mono">{{.Token}}</code>
|
||
<form method="post" action="{{abs "/tokens"}}">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<input type="hidden" name="action" value="remove">
|
||
<input type="hidden" name="username" value="{{$uname}}">
|
||
<input type="hidden" name="token" value="{{.Token}}">
|
||
<button class="btn btn-ghost" type="submit">Remove</button>
|
||
</form>
|
||
</div>
|
||
{{end}}
|
||
{{else}}
|
||
<div class="muted">Keine Tokens (oder nicht auslesbar).</div>
|
||
{{end}}
|
||
|
||
<h3>Token hinzufügen</h3>
|
||
<form method="post" action="{{abs "/tokens"}}">
|
||
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
||
<input type="hidden" name="action" value="add">
|
||
<input type="hidden" name="username" value="{{.Username}}">
|
||
<div class="grid">
|
||
<div><label>Label (optional)</label><input name="label"></div>
|
||
<div><label>Expires (optional)</label><input name="expires" placeholder="120d, 24h, ..."></div>
|
||
</div>
|
||
<button class="btn" type="submit">Token erstellen</button>
|
||
<div class="hint">Der Token wird nur einmal als Flash angezeigt – direkt kopieren.</div>
|
||
</form>
|
||
</section>
|
||
{{end}}
|
||
{{end}}
|
||
|
||
</main>
|
||
{{template "partials_footer" .}}
|
||
</body>
|
||
</html>
|
||
{{end}}
|