2021-06-29 19:26:36 +00:00
|
|
|
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
|
2021-06-29 10:34:36 +00:00
|
|
|
{% import "github.com/bouncepaw/mycorrhiza/user" %}
|
2021-07-02 12:02:42 +00:00
|
|
|
{% import "github.com/bouncepaw/mycorrhiza/util" %}
|
2021-06-29 10:34:36 +00:00
|
|
|
|
2021-06-29 18:43:04 +00:00
|
|
|
{% func AdminPanelHTML() %}
|
|
|
|
<div class="layout">
|
|
|
|
<main class="main-width">
|
|
|
|
<h1>Administrative functions</h1>
|
|
|
|
<section>
|
|
|
|
<h2>Safe things</h2>
|
|
|
|
<ul>
|
|
|
|
<li><a href="/about">About this wiki</a></li>
|
|
|
|
<li><a href="/user-list">User list</a></li>
|
|
|
|
<li><a href="/update-header-links">Update header links</a></li>
|
2021-06-30 12:56:38 +00:00
|
|
|
<li><a href="/admin/users/">Manage users</a></li>
|
2021-06-29 18:43:04 +00:00
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
<section>
|
|
|
|
<h2>Dangerous things</h2>
|
|
|
|
<form action="/admin/shutdown" method="POST" style="float:left">
|
|
|
|
<fieldset>
|
|
|
|
<legend>Shutdown wiki</legend>
|
|
|
|
<input type="submit" class="btn">
|
|
|
|
</fieldset>
|
|
|
|
</form>
|
|
|
|
<form action="/reindex" method="GET" style="float:left">
|
|
|
|
<fieldset>
|
|
|
|
<legend>Reindex hyphae</legend>
|
|
|
|
<input type="submit" class="btn">
|
|
|
|
</fieldset>
|
|
|
|
</form>
|
|
|
|
</section>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
{% endfunc %}
|
|
|
|
|
2021-06-29 10:34:36 +00:00
|
|
|
{% func AdminUsersPanelHTML(userList []*user.User) %}
|
|
|
|
<div class="layout">
|
|
|
|
<main class="main-width">
|
|
|
|
<h1>Manage users</h1>
|
|
|
|
|
2021-06-29 15:10:48 +00:00
|
|
|
<form action="/admin/reindex-users" method="post">
|
2021-07-02 12:02:42 +00:00
|
|
|
<a class="btn" href="/admin/user/new">Create a new user</a>
|
2021-06-30 12:56:38 +00:00
|
|
|
<button class="btn" type="submit">Reindex users</button>
|
2021-06-29 10:34:36 +00:00
|
|
|
</form>
|
|
|
|
|
2021-07-02 12:02:42 +00:00
|
|
|
<br>
|
2021-06-29 10:34:36 +00:00
|
|
|
|
2021-06-30 12:56:38 +00:00
|
|
|
<table class="users-table">
|
2021-06-29 10:34:36 +00:00
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th>Name</th>
|
|
|
|
<th>Group</th>
|
|
|
|
<th>Registered at</th>
|
2021-06-30 12:56:38 +00:00
|
|
|
<th aria-label="Actions"></th>
|
2021-06-29 10:34:36 +00:00
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
{% for _, u := range userList %}
|
|
|
|
<tr>
|
2021-06-30 12:56:38 +00:00
|
|
|
<td class="table-cell--fill">
|
|
|
|
<a href="/hypha/{%u cfg.UserHypha %}/{%u u.Name %}">{%s u.Name %}</a>
|
2021-06-29 19:26:36 +00:00
|
|
|
</td>
|
2021-06-29 15:10:48 +00:00
|
|
|
<td>{%s u.Group %}</td>
|
2021-07-01 08:29:19 +00:00
|
|
|
<td>
|
|
|
|
{% if u.RegisteredAt.IsZero() %}
|
|
|
|
unknown
|
|
|
|
{% else %}
|
|
|
|
{%s u.RegisteredAt.UTC().Format("2006-01-02 15:04") %}
|
|
|
|
{% endif %}
|
|
|
|
</td>
|
2021-06-29 15:10:48 +00:00
|
|
|
<td>
|
|
|
|
<a href="/admin/users/{%u u.Name %}/edit">Edit</a>
|
|
|
|
</td>
|
2021-06-29 10:34:36 +00:00
|
|
|
</tr>
|
|
|
|
{% endfor %}
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
{% endfunc %}
|
2021-06-29 15:10:48 +00:00
|
|
|
|
2021-07-02 14:04:00 +00:00
|
|
|
{% func AdminUserNewHTML(f util.FormData) %}
|
2021-07-02 12:02:42 +00:00
|
|
|
<div class="layout">
|
2021-07-02 14:04:00 +00:00
|
|
|
<main class="main-width form-wrap">
|
2021-07-02 12:02:42 +00:00
|
|
|
<h1>New user</h1>
|
|
|
|
|
2021-07-02 14:04:00 +00:00
|
|
|
{% if f.HasError() %}
|
2021-07-02 12:02:42 +00:00
|
|
|
<div class="notice notice--error">
|
|
|
|
<strong>Error:</strong>
|
2021-07-02 14:04:00 +00:00
|
|
|
{%s f.Error() %}
|
2021-07-02 12:02:42 +00:00
|
|
|
</div>
|
|
|
|
{% endif %}
|
|
|
|
|
2021-07-02 14:04:00 +00:00
|
|
|
<form class="form--double" action="" method="post">
|
2021-07-02 12:02:42 +00:00
|
|
|
<div class="form-field">
|
|
|
|
<label for="name">Name:</label>
|
2021-07-02 14:04:00 +00:00
|
|
|
<input type="text" name="name" id="name" value="{%s f.Get("name") %}" autofocus>
|
2021-07-02 12:02:42 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-field">
|
|
|
|
<label for="password">Password:</label>
|
2021-07-02 14:04:00 +00:00
|
|
|
<input type="password" name="password" id="password" value="{%s f.Get("password") %}">
|
2021-07-02 12:02:42 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-field">
|
|
|
|
<label for="group">Group:</label>
|
|
|
|
<select id="group" name="group">
|
2021-07-02 14:04:00 +00:00
|
|
|
<option{% if f.Get("group") == "anon" %} selected{% endif %}>anon</option>
|
|
|
|
<option{% if f.Get("group") == "editor" %} selected{% endif %}>editor</option>
|
|
|
|
<option{% if f.Get("group") == "trusted" %} selected{% endif %}>trusted</option>
|
|
|
|
<option{% if f.Get("group") == "moderator" %} selected{% endif %}>moderator</option>
|
|
|
|
<option{% if f.Get("group") == "admin" %} selected{% endif %}>admin</option>
|
2021-07-02 12:02:42 +00:00
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="form-field">
|
|
|
|
<div class="form-field__input">
|
|
|
|
<button class="btn" type="submit">Create</button>
|
|
|
|
<a class="btn btn_weak" href="/admin/users/">Cancel</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
{% endfunc %}
|
|
|
|
|
2021-07-02 14:04:00 +00:00
|
|
|
{% func AdminUserEditHTML(u *user.User, f util.FormData) %}
|
2021-06-29 15:10:48 +00:00
|
|
|
<div class="layout">
|
2021-07-02 14:04:00 +00:00
|
|
|
<main class="main-width form-wrap">
|
|
|
|
<h1>
|
|
|
|
<a href="/admin/users/">←</a>
|
|
|
|
{%s u.Name %}
|
|
|
|
</h1>
|
|
|
|
|
|
|
|
<h2>Change group</h2>
|
|
|
|
|
|
|
|
{% if f.HasError() %}
|
|
|
|
<div class="notice notice--error">
|
|
|
|
<strong>Error:</strong>
|
|
|
|
{%s f.Error() %}
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
2021-06-29 15:10:48 +00:00
|
|
|
|
|
|
|
<form action="" method="post">
|
2021-06-30 12:56:38 +00:00
|
|
|
<div class="form-field">
|
2021-07-02 14:04:00 +00:00
|
|
|
<select id="group" name="group" aria-label="Group">
|
|
|
|
<option{% if f.Get("group") == "anon" %} selected{% endif %}>anon</option>
|
|
|
|
<option{% if f.Get("group") == "editor" %} selected{% endif %}>editor</option>
|
|
|
|
<option{% if f.Get("group") == "trusted" %} selected{% endif %}>trusted</option>
|
|
|
|
<option{% if f.Get("group") == "moderator" %} selected{% endif %}>moderator</option>
|
|
|
|
<option{% if f.Get("group") == "admin" %} selected{% endif %}>admin</option>
|
2021-06-30 12:56:38 +00:00
|
|
|
</select>
|
|
|
|
</div>
|
2021-06-29 15:10:48 +00:00
|
|
|
|
2021-07-02 14:04:00 +00:00
|
|
|
<div class="form-field">
|
|
|
|
<button class="btn" type="submit">Update</button>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<h2>Delete user</h2>
|
|
|
|
<p>Remove the user from the database. Changes made by the user will
|
2021-07-14 20:04:52 +00:00
|
|
|
be preserved. It will be possible to take this username later.</p>
|
2021-07-02 14:04:00 +00:00
|
|
|
<a class="btn btn_destructive" href="/admin/users/{%u u.Name %}/delete">Delete</a>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
{% endfunc %}
|
|
|
|
|
|
|
|
{% func AdminUserDeleteHTML(u *user.User, f util.FormData) %}
|
|
|
|
<div class="layout">
|
|
|
|
<main class="main-width form-wrap">
|
|
|
|
<h1>Delete user</h1>
|
|
|
|
|
|
|
|
{% if f.HasError() %}
|
|
|
|
<div class="notice notice--error">
|
|
|
|
<strong>Error:</strong>
|
|
|
|
{%s f.Error() %}
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
<p>Are you sure you want to delete <strong>{%s u.Name %}</strong>
|
|
|
|
from the database? This action is irreversible.</p>
|
|
|
|
|
|
|
|
<form action="" method="post">
|
|
|
|
<button class="btn btn_destructive" type="submit">Delete</button>
|
|
|
|
<a class="btn btn_weak" href="/admin/users/{%u u.Name %}/edit">Cancel</a>
|
2021-06-29 15:10:48 +00:00
|
|
|
</form>
|
|
|
|
</main>
|
|
|
|
</div>
|
|
|
|
{% endfunc %}
|