Member invites, gallery resync, content and operator docs

- Invite flow: admin issue/revoke on join requests, public single-use
  claim links (hash-only tokens, 7-day expiry, no state reveal), claim
  creates the Member account and marks the request accepted
- Gallery: admin status page plus resync endpoint; sync refreshes
  thumbnails whose content changed; tools/gallery contract and checker
- Docs: public content page, admin-only operator runbook, api.md
  invite/gallery sections, all routes in the live API docs, docs
  reachability gate test
- Screenshots cover the new pages; version 1.0.18
This commit is contained in:
2026-10-06 02:56:08 +02:00
parent e512556703
commit 9fb4d65787
36 changed files with 1147 additions and 19 deletions
+16
View File
@@ -20,6 +20,15 @@ from molodetz.database.core import (
table_exists,
)
from molodetz.database.init_db import init_db
from molodetz.database.invites import (
claim_invite,
create_invite,
get_invite_by_token,
invite_is_live,
open_invite_for_join,
revoke_open_invites,
suggest_username,
)
from molodetz.database.joins import (
count_open_join_requests,
get_join_request,
@@ -97,6 +106,8 @@ __all__ = [
"count_open_join_requests",
"count_published",
"count_users",
"claim_invite",
"create_invite",
"create_session",
"create_user",
"daily_totals",
@@ -110,6 +121,7 @@ __all__ = [
"generate_uid",
"get_backup",
"get_int_setting",
"get_invite_by_token",
"get_join_request",
"get_post",
"get_post_by_slug",
@@ -128,6 +140,7 @@ __all__ = [
"insert_notification",
"insert_post",
"invalidate_admins_cache",
"invite_is_live",
"list_audit",
"list_backups",
"list_deleted",
@@ -138,6 +151,7 @@ __all__ = [
"mark_all_read",
"media_by_kind",
"now_iso",
"open_invite_for_join",
"paginate",
"parse_iso",
"pending_backups",
@@ -152,11 +166,13 @@ __all__ = [
"resolve_by_slug",
"restore",
"restore_event",
"revoke_open_invites",
"set_role",
"set_setting",
"shard_path",
"soft_delete",
"soft_delete_in",
"suggest_username",
"sync_local_cache",
"table_exists",
"top_paths",