47 lines
2.9 KiB
HTML
47 lines
2.9 KiB
HTML
<div class="toolbar">
|
|
<h1>Client: {{.Client.Name}}</h1>
|
|
<div class="spacer"></div>
|
|
<a href="/admin/clients/{{.Client.ID}}/provision" class="btn btn-sm" hx-get="/admin/clients/{{.Client.ID}}/provision" hx-target="#main-content" hx-push-url="true">Provision</a>
|
|
<a href="/admin/clients" class="btn btn-sm btn-outline" hx-get="/admin/clients" hx-target="#main-content" hx-push-url="true">Back</a>
|
|
</div>
|
|
<div class="grid-2 mb-16">
|
|
<div class="card">
|
|
<h3>Details</h3>
|
|
<table style="margin-top:8px">
|
|
<tbody>
|
|
<tr><td style="width:120px;color:var(--fg2);font-size:12px">Status</td><td>{{if eq .Client.Status "online"}}<span style="font-weight:600">Online</span>{{else}}<span style="color:var(--fg2)">Offline</span>{{end}}</td></tr>
|
|
<tr><td style="color:var(--fg2);font-size:12px">Address</td><td class="text-mono">{{if .Client.Addr}}{{.Client.Addr}}:{{.Client.Port}}{{else}}—{{end}}</td></tr>
|
|
<tr><td style="color:var(--fg2);font-size:12px">Auth Key</td><td class="text-mono">{{.Client.Key}}</td></tr>
|
|
<tr><td style="color:var(--fg2);font-size:12px">Created</td><td>{{.Client.CreatedAt}}</td></tr>
|
|
<tr><td style="color:var(--fg2);font-size:12px">Last Seen</td><td>{{if .Client.LastSeen}}{{.Client.LastSeen}}{{else}}—{{end}}</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="card">
|
|
<h3>One-Time Token</h3>
|
|
<p style="font-size:12px;color:var(--fg2);margin-bottom:8px">Generate a one-time token for client auth:</p>
|
|
<button class="btn btn-sm" hx-post="/admin/clients/{{.Client.ID}}/generate-token" hx-target="#token-result" hx-swap="innerHTML">Generate Token</button>
|
|
<div id="token-result" style="margin-top:8px"></div>
|
|
</div>
|
|
</div>
|
|
<h2 style="font-size:16px;font-weight:600;margin-bottom:12px">Proxies</h2>
|
|
<table>
|
|
<thead>
|
|
<tr><th>Name</th><th>Type</th><th>Local</th><th>Remote</th><th>Status</th><th></th></tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .Proxies}}
|
|
<tr>
|
|
<td><a href="/admin/proxies/{{.ID}}" hx-get="/admin/proxies/{{.ID}}" hx-target="#main-content" hx-push-url="true">{{.Name}}</a></td>
|
|
<td style="color:var(--fg2)">{{.ProxyType}}</td>
|
|
<td class="text-mono">{{.LocalIP}}:{{.LocalPort}}</td>
|
|
<td class="text-mono">{{if .RemotePort}}{{.RemotePort}}{{else}}—{{end}}</td>
|
|
<td>{{if eq .Status "active"}}<span style="font-weight:600">active</span>{{else}}<span style="color:var(--fg2)">{{.Status}}</span>{{end}}</td>
|
|
<td><a href="/admin/proxies/{{.ID}}" class="btn btn-sm btn-outline" hx-get="/admin/proxies/{{.ID}}" hx-target="#main-content" hx-push-url="true">View</a></td>
|
|
</tr>
|
|
{{else}}
|
|
<tr><td colspan="6"><div class="empty">No proxies for this client. <a href="/admin/proxies/new?client_id={{$.Client.ID}}" hx-get="/admin/proxies/new?client_id={{$.Client.ID}}" hx-target="#main-content" hx-push-url="true">Create one</a>.</div></td></tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|