87 lines
4.3 KiB
HTML
87 lines
4.3 KiB
HTML
{{define "title"}}User — {{.U.Email}}{{end}}
|
|||
|
|
{{define "content"}}
|
||
|
|
<div class="flex items-center gap-3 mb-6">
|
||
|
|
<a href="/admin/users" class="text-gray-400 text-sm hover:text-white">Users</a>
|
||
|
|
<span class="text-gray-600">/</span>
|
||
|
|
<h1 class="text-xl font-bold text-white">{{.U.Email}}</h1>
|
||
|
|
{{if .U.Enabled}}<span class="badge badge-green">active</span>{{else}}<span class="badge badge-red">disabled</span>{{end}}
|
||
|
|
{{if .U.Admin}}<span class="badge badge-yellow">admin</span>{{else if .U.DomainAdmin}}<span class="badge badge-gray">domain admin</span>{{end}}
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:1.5rem">
|
||
|
|
|
||
|
|
<!-- Edit user -->
|
||
|
|
<div>
|
||
|
|
<div class="card">
|
||
|
|
<div class="text-sm font-semibold text-gray-300 mb-3">User settings</div>
|
||
|
|
<form method="POST" action="/admin/users/{{.U.ID}}/update">
|
||
|
|
<input type="hidden" name="_csrf" value="{{.CSRF}}">
|
||
|
|
<div class="field">
|
||
|
|
<label>Display name</label>
|
||
|
|
<input type="text" name="display_name" value="{{.U.DisplayName}}" maxlength="255">
|
||
|
|
</div>
|
||
|
|
<div class="field">
|
||
|
|
<label>Quota (MB)</label>
|
||
|
|
<input type="number" name="quota_mb" value="{{mb .U.QuotaBytes}}" min="0" max="1048576">
|
||
|
|
</div>
|
||
|
|
<div style="display:flex;gap:1.5rem;margin-bottom:.875rem">
|
||
|
|
<label style="display:flex;align-items:center;gap:.375rem;cursor:pointer;margin:0">
|
||
|
|
<input type="checkbox" name="enabled" value="1" {{if .U.Enabled}}checked{{end}} style="width:auto">
|
||
|
|
<span class="text-sm">Enabled</span>
|
||
|
|
</label>
|
||
|
|
<label style="display:flex;align-items:center;gap:.375rem;cursor:pointer;margin:0">
|
||
|
|
<input type="checkbox" name="admin" value="1" {{if .U.Admin}}checked{{end}} style="width:auto">
|
||
|
|
<span class="text-sm">Global admin</span>
|
||
|
|
</label>
|
||
|
|
<label style="display:flex;align-items:center;gap:.375rem;cursor:pointer;margin:0">
|
||
|
|
<input type="checkbox" name="domain_admin" value="1" {{if .U.DomainAdmin}}checked{{end}} style="width:auto">
|
||
|
|
<span class="text-sm">Domain admin</span>
|
||
|
|
</label>
|
||
|
|
</div>
|
||
|
|
<button type="submit" class="btn btn-primary btn-sm">Save changes</button>
|
||
|
|
</form>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<!-- Change password -->
|
||
|
|
<div class="card">
|
||
|
|
<div class="text-sm font-semibold text-gray-300 mb-3">Change password</div>
|
||
|
|
<form method="POST" action="/admin/users/{{.U.ID}}/password">
|
||
|
|
<input type="hidden" name="_csrf" value="{{.CSRF}}">
|
||
|
|
<div class="field">
|
||
|
|
<label>New password (min 8 characters)</label>
|
||
|
|
<input type="password" name="password" required minlength="8" maxlength="1024">
|
||
|
|
</div>
|
||
|
|
<button type="submit" class="btn btn-primary btn-sm">Set password</button>
|
||
|
|
</form>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<!-- Info + danger -->
|
||
|
|
<div>
|
||
|
|
<div class="card">
|
||
|
|
<div class="text-sm font-semibold text-gray-300 mb-3">Account info</div>
|
||
|
|
<div class="text-xs space-y-1.5 text-gray-400">
|
||
|
|
<div>Email: <span class="text-white">{{.U.Email}}</span></div>
|
||
|
|
<div>Domain: <span class="text-white">{{.U.DomainName}}</span></div>
|
||
|
|
<div>Used: <span class="text-white">{{humanBytes .U.UsedBytes}}</span>
|
||
|
|
of <span class="text-white">{{if .U.QuotaBytes}}{{humanBytes .U.QuotaBytes}}{{else}}unlimited{{end}}</span></div>
|
||
|
|
<div>Created: <span class="text-white">{{shortTime .U.CreatedAt}}</span></div>
|
||
|
|
<div>Last login: <span class="text-white">{{if isZero .U.LastLogin}}never{{else}}{{shortTime .U.LastLogin}}{{end}}</span></div>
|
||
|
|
<div>MFA: <span class="text-white">{{if .U.MFAEnabled}}enabled{{else}}disabled{{end}}</span></div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="card" style="border:1px solid #7f1d1d">
|
||
|
|
<div class="text-sm font-semibold text-red-400 mb-2">Delete user</div>
|
||
|
|
<div class="text-xs text-gray-400 mb-3">Permanently deletes the user account, all mailboxes, and all messages. Cannot be undone.</div>
|
||
|
|
<form method="POST" action="/admin/users/{{.U.ID}}/delete"
|
||
|
|
onsubmit="return confirm('Delete user {{.U.Email}} and all their data?')">
|
||
|
|
<input type="hidden" name="_csrf" value="{{.CSRF}}">
|
||
|
|
<button type="submit" class="btn btn-danger btn-sm">Delete user</button>
|
||
|
|
</form>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
{{end}}
|