aboutsummaryrefslogtreecommitdiffstats
path: root/internal/web/templates/admin/index.html
diff options
context:
space:
mode:
authorgramanas <grm@eyesin.space>2026-09-12 11:24:17 +0300
committergramanas <grm@eyesin.space>2026-09-12 11:24:17 +0300
commit3eb04b1a2bdf9e53231fe862cfd76327371a9741 (patch)
treeb38b2d82a47233fd8e0bb18c59e4a8f3dd2412d7 /internal/web/templates/admin/index.html
downloadblogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.gz
blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.tar.bz2
blogspace-3eb04b1a2bdf9e53231fe862cfd76327371a9741.zip
Initial multi-tenant blog host
Go + Postgres application serving a management dashboard on the base domain and one public blog per subdomain. Markdown posts organised in pages, form-based theme customisation, image uploads stored in Postgres, JWT cookie sessions with CSRF, superadmin user management, RSS feeds. Docker/compose deployment and a Makefile-driven dev environment with seed data. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A
Diffstat (limited to 'internal/web/templates/admin/index.html')
-rw-r--r--internal/web/templates/admin/index.html28
1 files changed, 28 insertions, 0 deletions
diff --git a/internal/web/templates/admin/index.html b/internal/web/templates/admin/index.html
new file mode 100644
index 0000000..c74d426
--- /dev/null
+++ b/internal/web/templates/admin/index.html
@@ -0,0 +1,28 @@
+{{define "title"}}Admin · Blogspace{{end}}
+{{define "content"}}
+<h1>Users &amp; blogs <a class="btn small" href="/admin/users/new">+ New blogger</a></h1>
+<div class="card">
+<table>
+ <tr><th>User</th><th>Role</th><th>Blog</th><th>Since</th><th>Actions</th></tr>
+ {{range .Data.users}}<tr{{if .Disabled}} class="disabled"{{end}}>
+ <td>{{.Username}}{{if .Disabled}} <span class="tag">disabled</span>{{end}}</td>
+ <td>{{.Role}}</td>
+ <td>{{if .Subdomain}}<a href="/b/{{deref .Subdomain}}/">{{deref .BlogTitle}}</a> <a href="{{$.Data.cfg.BlogURL (deref .Subdomain)}}" target="_blank" class="muted">{{deref .Subdomain}} &#8599;</a>{{else}}<span class="muted">—</span>{{end}}</td>
+ <td class="nowrap">{{date .CreatedAt}}</td>
+ <td class="nowrap">
+ {{if ne .ID $.User.ID}}
+ <details class="inline"><summary class="mini">reset password</summary>
+ <form method="post" action="/admin/users/{{.ID}}/reset-password" class="inline">
+ <input type="hidden" name="_csrf" value="{{$.CSRF}}">
+ <input type="password" name="password" placeholder="new password" minlength="8" required size="14">
+ <button class="mini">Set</button>
+ </form></details>
+ {{if .Disabled}}<form method="post" action="/admin/users/{{.ID}}/enable" class="inline"><input type="hidden" name="_csrf" value="{{$.CSRF}}"><button class="mini">enable</button></form>
+ {{else}}<form method="post" action="/admin/users/{{.ID}}/disable" class="inline"><input type="hidden" name="_csrf" value="{{$.CSRF}}"><button class="mini">disable</button></form>{{end}}
+ <a class="danger" href="/admin/users/{{.ID}}/delete">delete</a>
+ {{else}}<span class="muted">(you)</span>{{end}}
+ </td>
+ </tr>{{end}}
+</table>
+</div>
+{{end}}