@geekity/cms 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2217 -214
- package/admin/components/fields.njk +165 -0
- package/admin/layouts/base.njk +1 -1
- package/admin/layouts/settings-page.njk +26 -0
- package/admin/layouts/shell.njk +17 -3
- package/admin/pages/account/forgot.njk +47 -0
- package/admin/pages/account/login.njk +26 -0
- package/admin/pages/account/reset.njk +38 -0
- package/admin/pages/account/setup.njk +28 -0
- package/admin/pages/appearance/themes.njk +69 -0
- package/admin/pages/comments/all.njk +133 -0
- package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
- package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
- package/admin/{layouts/document-editor.njk → pages/documents/editor.njk} +75 -59
- package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
- package/admin/pages/documents/taxonomy.njk +95 -0
- package/admin/pages/federation/followers.njk +238 -0
- package/admin/pages/federation/settings.njk +77 -0
- package/admin/pages/media/library.njk +160 -0
- package/admin/pages/messages/all.njk +110 -0
- package/admin/pages/navigation/menus.njk +129 -0
- package/admin/{layouts → pages}/placeholder.njk +5 -1
- package/admin/pages/settings/discussion.njk +99 -0
- package/admin/pages/settings/email.njk +203 -0
- package/admin/pages/settings/general.njk +29 -0
- package/admin/pages/settings/permalinks.njk +50 -0
- package/admin/pages/settings/reading.njk +64 -0
- package/admin/pages/tools/content-index.njk +89 -0
- package/admin/pages/users/edit.njk +239 -0
- package/admin/pages/users/list.njk +51 -0
- package/admin/pages/users/new.njk +41 -0
- package/admin/static/admin.css +558 -3
- package/admin/static/copy.js +52 -0
- package/admin/static/editor.js +16 -16
- package/admin/static/slug.js +61 -0
- package/dist/access-log.d.ts +44 -0
- package/dist/access-log.d.ts.map +1 -0
- package/dist/access-log.js +71 -0
- package/dist/access-log.js.map +1 -0
- package/dist/admin/accounts.d.ts +413 -0
- package/dist/admin/accounts.d.ts.map +1 -0
- package/dist/admin/accounts.js +680 -0
- package/dist/admin/accounts.js.map +1 -0
- package/dist/admin/appearance.d.ts +80 -0
- package/dist/admin/appearance.d.ts.map +1 -0
- package/dist/admin/appearance.js +136 -0
- package/dist/admin/appearance.js.map +1 -0
- package/dist/admin/comments.d.ts +90 -0
- package/dist/admin/comments.d.ts.map +1 -0
- package/dist/admin/comments.js +244 -0
- package/dist/admin/comments.js.map +1 -0
- package/dist/admin/credentials.d.ts +26 -2
- package/dist/admin/credentials.d.ts.map +1 -1
- package/dist/admin/credentials.js +35 -2
- package/dist/admin/credentials.js.map +1 -1
- package/dist/admin/documents.d.ts +117 -10
- package/dist/admin/documents.d.ts.map +1 -1
- package/dist/admin/documents.js +328 -41
- package/dist/admin/documents.js.map +1 -1
- package/dist/admin/federation.d.ts +161 -50
- package/dist/admin/federation.d.ts.map +1 -1
- package/dist/admin/federation.js +235 -93
- package/dist/admin/federation.js.map +1 -1
- package/dist/admin/formatting.d.ts +20 -0
- package/dist/admin/formatting.d.ts.map +1 -0
- package/dist/admin/formatting.js +72 -0
- package/dist/admin/formatting.js.map +1 -0
- package/dist/admin/headers.d.ts +65 -0
- package/dist/admin/headers.d.ts.map +1 -0
- package/dist/admin/headers.js +104 -0
- package/dist/admin/headers.js.map +1 -0
- package/dist/admin/index.d.ts +38 -12
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +25 -7
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/media.d.ts +168 -0
- package/dist/admin/media.d.ts.map +1 -0
- package/dist/admin/media.js +295 -0
- package/dist/admin/media.js.map +1 -0
- package/dist/admin/menu.d.ts +79 -0
- package/dist/admin/menu.d.ts.map +1 -0
- package/dist/admin/menu.js +143 -0
- package/dist/admin/menu.js.map +1 -0
- package/dist/admin/messages.d.ts +80 -0
- package/dist/admin/messages.d.ts.map +1 -0
- package/dist/admin/messages.js +152 -0
- package/dist/admin/messages.js.map +1 -0
- package/dist/admin/navigation.d.ts +155 -0
- package/dist/admin/navigation.d.ts.map +1 -0
- package/dist/admin/navigation.js +292 -0
- package/dist/admin/navigation.js.map +1 -0
- package/dist/admin/preview.d.ts.map +1 -1
- package/dist/admin/preview.js +31 -7
- package/dist/admin/preview.js.map +1 -1
- package/dist/admin/recovery.d.ts +92 -0
- package/dist/admin/recovery.d.ts.map +1 -0
- package/dist/admin/recovery.js +229 -0
- package/dist/admin/recovery.js.map +1 -0
- package/dist/admin/routes.d.ts +0 -20
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +164 -105
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/session.d.ts +17 -3
- package/dist/admin/session.d.ts.map +1 -1
- package/dist/admin/session.js +19 -5
- package/dist/admin/session.js.map +1 -1
- package/dist/admin/settings-discussion.d.ts +37 -0
- package/dist/admin/settings-discussion.d.ts.map +1 -0
- package/dist/admin/settings-discussion.js +117 -0
- package/dist/admin/settings-discussion.js.map +1 -0
- package/dist/admin/settings-email.d.ts +54 -0
- package/dist/admin/settings-email.d.ts.map +1 -0
- package/dist/admin/settings-email.js +189 -0
- package/dist/admin/settings-email.js.map +1 -0
- package/dist/admin/settings-federation.d.ts +48 -0
- package/dist/admin/settings-federation.d.ts.map +1 -0
- package/dist/admin/settings-federation.js +123 -0
- package/dist/admin/settings-federation.js.map +1 -0
- package/dist/admin/settings-general.d.ts +12 -0
- package/dist/admin/settings-general.d.ts.map +1 -0
- package/dist/admin/settings-general.js +48 -0
- package/dist/admin/settings-general.js.map +1 -0
- package/dist/admin/settings-page.d.ts +119 -0
- package/dist/admin/settings-page.d.ts.map +1 -0
- package/dist/admin/settings-page.js +132 -0
- package/dist/admin/settings-page.js.map +1 -0
- package/dist/admin/settings-pages.d.ts +30 -0
- package/dist/admin/settings-pages.d.ts.map +1 -0
- package/dist/admin/settings-pages.js +43 -0
- package/dist/admin/settings-pages.js.map +1 -0
- package/dist/admin/settings-permalinks.d.ts +16 -0
- package/dist/admin/settings-permalinks.d.ts.map +1 -0
- package/dist/admin/settings-permalinks.js +32 -0
- package/dist/admin/settings-permalinks.js.map +1 -0
- package/dist/admin/settings-reading.d.ts +34 -0
- package/dist/admin/settings-reading.d.ts.map +1 -0
- package/dist/admin/settings-reading.js +49 -0
- package/dist/admin/settings-reading.js.map +1 -0
- package/dist/admin/settings.d.ts +339 -96
- package/dist/admin/settings.d.ts.map +1 -1
- package/dist/admin/settings.js +600 -308
- package/dist/admin/settings.js.map +1 -1
- package/dist/admin/store.d.ts +606 -152
- package/dist/admin/store.d.ts.map +1 -1
- package/dist/admin/store.js +863 -268
- package/dist/admin/store.js.map +1 -1
- package/dist/admin/taxonomy.d.ts +114 -0
- package/dist/admin/taxonomy.d.ts.map +1 -0
- package/dist/admin/taxonomy.js +289 -0
- package/dist/admin/taxonomy.js.map +1 -0
- package/dist/admin/templates.d.ts +46 -14
- package/dist/admin/templates.d.ts.map +1 -1
- package/dist/admin/templates.js +46 -14
- package/dist/admin/templates.js.map +1 -1
- package/dist/admin/throttle.d.ts +84 -0
- package/dist/admin/throttle.d.ts.map +1 -0
- package/dist/admin/throttle.js +143 -0
- package/dist/admin/throttle.js.map +1 -0
- package/dist/admin/tools.d.ts +111 -0
- package/dist/admin/tools.d.ts.map +1 -0
- package/dist/admin/tools.js +182 -0
- package/dist/admin/tools.js.map +1 -0
- package/dist/admin/uploads.d.ts +28 -2
- package/dist/admin/uploads.d.ts.map +1 -1
- package/dist/admin/uploads.js +43 -4
- package/dist/admin/uploads.js.map +1 -1
- package/dist/admin/users.d.ts +100 -13
- package/dist/admin/users.d.ts.map +1 -1
- package/dist/admin/users.js +412 -39
- package/dist/admin/users.js.map +1 -1
- package/dist/cache.d.ts +141 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +207 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +14 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +429 -21
- package/dist/cli.js.map +1 -1
- package/dist/comments/akismet.d.ts +130 -0
- package/dist/comments/akismet.d.ts.map +1 -0
- package/dist/comments/akismet.js +274 -0
- package/dist/comments/akismet.js.map +1 -0
- package/dist/comments/conversation.d.ts +29 -0
- package/dist/comments/conversation.d.ts.map +1 -0
- package/dist/comments/conversation.js +60 -0
- package/dist/comments/conversation.js.map +1 -0
- package/dist/comments/form.d.ts +123 -0
- package/dist/comments/form.d.ts.map +1 -0
- package/dist/comments/form.js +79 -0
- package/dist/comments/form.js.map +1 -0
- package/dist/comments/index.d.ts +16 -0
- package/dist/comments/index.d.ts.map +1 -0
- package/dist/comments/index.js +10 -0
- package/dist/comments/index.js.map +1 -0
- package/dist/comments/markdown.d.ts +8 -0
- package/dist/comments/markdown.d.ts.map +1 -0
- package/dist/comments/markdown.js +85 -0
- package/dist/comments/markdown.js.map +1 -0
- package/dist/comments/moderate.d.ts +71 -0
- package/dist/comments/moderate.d.ts.map +1 -0
- package/dist/comments/moderate.js +88 -0
- package/dist/comments/moderate.js.map +1 -0
- package/dist/comments/policy.d.ts +57 -0
- package/dist/comments/policy.d.ts.map +1 -0
- package/dist/comments/policy.js +80 -0
- package/dist/comments/policy.js.map +1 -0
- package/dist/comments/records.d.ts +266 -0
- package/dist/comments/records.d.ts.map +1 -0
- package/dist/comments/records.js +487 -0
- package/dist/comments/records.js.map +1 -0
- package/dist/comments/routes.d.ts +60 -0
- package/dist/comments/routes.d.ts.map +1 -0
- package/dist/comments/routes.js +212 -0
- package/dist/comments/routes.js.map +1 -0
- package/dist/comments/submission.d.ts +297 -0
- package/dist/comments/submission.d.ts.map +1 -0
- package/dist/comments/submission.js +280 -0
- package/dist/comments/submission.js.map +1 -0
- package/dist/comments/viewer.d.ts +21 -0
- package/dist/comments/viewer.d.ts.map +1 -0
- package/dist/comments/viewer.js +45 -0
- package/dist/comments/viewer.js.map +1 -0
- package/dist/config.d.ts +225 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +121 -6
- package/dist/config.js.map +1 -1
- package/dist/contact/delivery.d.ts +60 -0
- package/dist/contact/delivery.d.ts.map +1 -0
- package/dist/contact/delivery.js +87 -0
- package/dist/contact/delivery.js.map +1 -0
- package/dist/contact/form.d.ts +130 -0
- package/dist/contact/form.d.ts.map +1 -0
- package/dist/contact/form.js +163 -0
- package/dist/contact/form.js.map +1 -0
- package/dist/contact/index.d.ts +17 -0
- package/dist/contact/index.d.ts.map +1 -0
- package/dist/contact/index.js +13 -0
- package/dist/contact/index.js.map +1 -0
- package/dist/contact/records.d.ts +124 -0
- package/dist/contact/records.d.ts.map +1 -0
- package/dist/contact/records.js +218 -0
- package/dist/contact/records.js.map +1 -0
- package/dist/contact/routes.d.ts +17 -0
- package/dist/contact/routes.d.ts.map +1 -0
- package/dist/contact/routes.js +127 -0
- package/dist/contact/routes.js.map +1 -0
- package/dist/contact/submission.d.ts +103 -0
- package/dist/contact/submission.d.ts.map +1 -0
- package/dist/contact/submission.js +166 -0
- package/dist/contact/submission.js.map +1 -0
- package/dist/content/document.d.ts +7 -2
- package/dist/content/document.d.ts.map +1 -1
- package/dist/content/document.js +1 -0
- package/dist/content/document.js.map +1 -1
- package/dist/content/index.d.ts +7 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +4 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +24 -2
- package/dist/content/markdown.js.map +1 -1
- package/dist/content/parser.d.ts.map +1 -1
- package/dist/content/parser.js +11 -4
- package/dist/content/parser.js.map +1 -1
- package/dist/content/save.d.ts +5 -0
- package/dist/content/save.d.ts.map +1 -1
- package/dist/content/save.js +44 -1
- package/dist/content/save.js.map +1 -1
- package/dist/content/schedule.d.ts +125 -0
- package/dist/content/schedule.d.ts.map +1 -0
- package/dist/content/schedule.js +207 -0
- package/dist/content/schedule.js.map +1 -0
- package/dist/content/search.d.ts +64 -0
- package/dist/content/search.d.ts.map +1 -0
- package/dist/content/search.js +136 -0
- package/dist/content/search.js.map +1 -0
- package/dist/content/store.d.ts +220 -7
- package/dist/content/store.d.ts.map +1 -1
- package/dist/content/store.js +392 -67
- package/dist/content/store.js.map +1 -1
- package/dist/content/sync.d.ts +7 -1
- package/dist/content/sync.d.ts.map +1 -1
- package/dist/content/sync.js +18 -10
- package/dist/content/sync.js.map +1 -1
- package/dist/content/time.d.ts +56 -0
- package/dist/content/time.d.ts.map +1 -0
- package/dist/content/time.js +141 -0
- package/dist/content/time.js.map +1 -0
- package/dist/content/writer.d.ts.map +1 -1
- package/dist/content/writer.js +3 -0
- package/dist/content/writer.js.map +1 -1
- package/dist/env.d.ts +70 -5
- package/dist/env.d.ts.map +1 -1
- package/dist/federation/actor.d.ts +95 -41
- package/dist/federation/actor.d.ts.map +1 -1
- package/dist/federation/actor.js +180 -53
- package/dist/federation/actor.js.map +1 -1
- package/dist/federation/article.d.ts +44 -17
- package/dist/federation/article.d.ts.map +1 -1
- package/dist/federation/article.js +98 -46
- package/dist/federation/article.js.map +1 -1
- package/dist/federation/delivery.d.ts +63 -15
- package/dist/federation/delivery.d.ts.map +1 -1
- package/dist/federation/delivery.js +154 -80
- package/dist/federation/delivery.js.map +1 -1
- package/dist/federation/federation.d.ts +22 -17
- package/dist/federation/federation.d.ts.map +1 -1
- package/dist/federation/federation.js +98 -77
- package/dist/federation/federation.js.map +1 -1
- package/dist/federation/followers.d.ts +3 -2
- package/dist/federation/followers.d.ts.map +1 -1
- package/dist/federation/followers.js +6 -5
- package/dist/federation/followers.js.map +1 -1
- package/dist/federation/import-wordpress.d.ts +128 -0
- package/dist/federation/import-wordpress.d.ts.map +1 -0
- package/dist/federation/import-wordpress.js +426 -0
- package/dist/federation/import-wordpress.js.map +1 -0
- package/dist/federation/inbox.d.ts +36 -13
- package/dist/federation/inbox.d.ts.map +1 -1
- package/dist/federation/inbox.js +120 -49
- package/dist/federation/inbox.js.map +1 -1
- package/dist/federation/index.d.ts +22 -10
- package/dist/federation/index.d.ts.map +1 -1
- package/dist/federation/index.js +13 -8
- package/dist/federation/index.js.map +1 -1
- package/dist/federation/keys.d.ts +98 -20
- package/dist/federation/keys.d.ts.map +1 -1
- package/dist/federation/keys.js +269 -39
- package/dist/federation/keys.js.map +1 -1
- package/dist/federation/mount.d.ts +46 -10
- package/dist/federation/mount.d.ts.map +1 -1
- package/dist/federation/mount.js +300 -28
- package/dist/federation/mount.js.map +1 -1
- package/dist/federation/paths.d.ts +23 -35
- package/dist/federation/paths.d.ts.map +1 -1
- package/dist/federation/paths.js +26 -39
- package/dist/federation/paths.js.map +1 -1
- package/dist/federation/records.d.ts +223 -0
- package/dist/federation/records.d.ts.map +1 -0
- package/dist/federation/records.js +506 -0
- package/dist/federation/records.js.map +1 -0
- package/dist/federation/relays.d.ts +114 -0
- package/dist/federation/relays.d.ts.map +1 -0
- package/dist/federation/relays.js +290 -0
- package/dist/federation/relays.js.map +1 -0
- package/dist/federation/replies.d.ts +80 -0
- package/dist/federation/replies.d.ts.map +1 -0
- package/dist/federation/replies.js +166 -0
- package/dist/federation/replies.js.map +1 -0
- package/dist/federation/wordpress.d.ts +131 -0
- package/dist/federation/wordpress.d.ts.map +1 -0
- package/dist/federation/wordpress.js +341 -0
- package/dist/federation/wordpress.js.map +1 -0
- package/dist/files/atomic.d.ts +103 -0
- package/dist/files/atomic.d.ts.map +1 -0
- package/dist/files/atomic.js +150 -0
- package/dist/files/atomic.js.map +1 -0
- package/dist/files/index.d.ts +3 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +2 -0
- package/dist/files/index.js.map +1 -0
- package/dist/forms/protection.d.ts +85 -0
- package/dist/forms/protection.d.ts.map +1 -0
- package/dist/forms/protection.js +116 -0
- package/dist/forms/protection.js.map +1 -0
- package/dist/images/icons.d.ts +59 -0
- package/dist/images/icons.d.ts.map +1 -0
- package/dist/images/icons.js +131 -0
- package/dist/images/icons.js.map +1 -0
- package/dist/images/index.d.ts +7 -0
- package/dist/images/index.d.ts.map +1 -0
- package/dist/images/index.js +4 -0
- package/dist/images/index.js.map +1 -0
- package/dist/images/markup.d.ts +47 -0
- package/dist/images/markup.d.ts.map +1 -0
- package/dist/images/markup.js +175 -0
- package/dist/images/markup.js.map +1 -0
- package/dist/images/paths.d.ts +34 -0
- package/dist/images/paths.d.ts.map +1 -0
- package/dist/images/paths.js +41 -0
- package/dist/images/paths.js.map +1 -0
- package/dist/images/variants.d.ts +104 -0
- package/dist/images/variants.d.ts.map +1 -0
- package/dist/images/variants.js +320 -0
- package/dist/images/variants.js.map +1 -0
- package/dist/index.d.ts +123 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +344 -25
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +34 -3
- package/dist/init.js.map +1 -1
- package/dist/mail/brevo.d.ts +35 -0
- package/dist/mail/brevo.d.ts.map +1 -0
- package/dist/mail/brevo.js +85 -0
- package/dist/mail/brevo.js.map +1 -0
- package/dist/mail/credentials.d.ts +62 -0
- package/dist/mail/credentials.d.ts.map +1 -0
- package/dist/mail/credentials.js +86 -0
- package/dist/mail/credentials.js.map +1 -0
- package/dist/mail/index.d.ts +15 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +8 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/memory.d.ts +35 -0
- package/dist/mail/memory.d.ts.map +1 -0
- package/dist/mail/memory.js +29 -0
- package/dist/mail/memory.js.map +1 -0
- package/dist/mail/provider.d.ts +80 -0
- package/dist/mail/provider.d.ts.map +1 -0
- package/dist/mail/provider.js +23 -0
- package/dist/mail/provider.js.map +1 -0
- package/dist/mail/service.d.ts +156 -0
- package/dist/mail/service.d.ts.map +1 -0
- package/dist/mail/service.js +265 -0
- package/dist/mail/service.js.map +1 -0
- package/dist/mail/smtp.d.ts +39 -0
- package/dist/mail/smtp.d.ts.map +1 -0
- package/dist/mail/smtp.js +58 -0
- package/dist/mail/smtp.js.map +1 -0
- package/dist/mail/templates.d.ts +91 -0
- package/dist/mail/templates.d.ts.map +1 -0
- package/dist/mail/templates.js +69 -0
- package/dist/mail/templates.js.map +1 -0
- package/dist/notifications/comments.d.ts +66 -0
- package/dist/notifications/comments.d.ts.map +1 -0
- package/dist/notifications/comments.js +151 -0
- package/dist/notifications/comments.js.map +1 -0
- package/dist/notifications/digest.d.ts +135 -0
- package/dist/notifications/digest.d.ts.map +1 -0
- package/dist/notifications/digest.js +287 -0
- package/dist/notifications/digest.js.map +1 -0
- package/dist/notifications/index.d.ts +13 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +8 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/links.d.ts +60 -0
- package/dist/notifications/links.d.ts.map +1 -0
- package/dist/notifications/links.js +63 -0
- package/dist/notifications/links.js.map +1 -0
- package/dist/notifications/optouts.d.ts +48 -0
- package/dist/notifications/optouts.d.ts.map +1 -0
- package/dist/notifications/optouts.js +93 -0
- package/dist/notifications/optouts.js.map +1 -0
- package/dist/notifications/preferences.d.ts +158 -0
- package/dist/notifications/preferences.d.ts.map +1 -0
- package/dist/notifications/preferences.js +195 -0
- package/dist/notifications/preferences.js.map +1 -0
- package/dist/notifications/routes.d.ts +28 -0
- package/dist/notifications/routes.d.ts.map +1 -0
- package/dist/notifications/routes.js +184 -0
- package/dist/notifications/routes.js.map +1 -0
- package/dist/notifications/tokens.d.ts +60 -0
- package/dist/notifications/tokens.d.ts.map +1 -0
- package/dist/notifications/tokens.js +125 -0
- package/dist/notifications/tokens.js.map +1 -0
- package/dist/notify.d.ts +84 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +149 -0
- package/dist/notify.js.map +1 -0
- package/dist/web/archive.d.ts +49 -0
- package/dist/web/archive.d.ts.map +1 -0
- package/dist/web/archive.js +59 -0
- package/dist/web/archive.js.map +1 -0
- package/dist/web/assets.d.ts +6 -5
- package/dist/web/assets.d.ts.map +1 -1
- package/dist/web/assets.js +5 -7
- package/dist/web/assets.js.map +1 -1
- package/dist/web/authors.d.ts +143 -0
- package/dist/web/authors.d.ts.map +1 -0
- package/dist/web/authors.js +178 -0
- package/dist/web/authors.js.map +1 -0
- package/dist/web/comments.d.ts +60 -0
- package/dist/web/comments.d.ts.map +1 -0
- package/dist/web/comments.js +207 -0
- package/dist/web/comments.js.map +1 -0
- package/dist/web/context.d.ts +162 -28
- package/dist/web/context.d.ts.map +1 -1
- package/dist/web/context.js +123 -26
- package/dist/web/context.js.map +1 -1
- package/dist/web/conversation.d.ts +209 -0
- package/dist/web/conversation.d.ts.map +1 -0
- package/dist/web/conversation.js +557 -0
- package/dist/web/conversation.js.map +1 -0
- package/dist/web/documents.d.ts +36 -6
- package/dist/web/documents.d.ts.map +1 -1
- package/dist/web/documents.js +52 -10
- package/dist/web/documents.js.map +1 -1
- package/dist/web/feed-atom.d.ts +22 -0
- package/dist/web/feed-atom.d.ts.map +1 -0
- package/dist/web/feed-atom.js +83 -0
- package/dist/web/feed-atom.js.map +1 -0
- package/dist/web/feed-item.d.ts +145 -0
- package/dist/web/feed-item.d.ts.map +1 -0
- package/dist/web/feed-item.js +120 -0
- package/dist/web/feed-item.js.map +1 -0
- package/dist/web/feed-json.d.ts +79 -0
- package/dist/web/feed-json.d.ts.map +1 -0
- package/dist/web/feed-json.js +53 -0
- package/dist/web/feed-json.js.map +1 -0
- package/dist/web/feed-rss.d.ts +26 -0
- package/dist/web/feed-rss.d.ts.map +1 -0
- package/dist/web/feed-rss.js +203 -0
- package/dist/web/feed-rss.js.map +1 -0
- package/dist/web/feed-source.d.ts +244 -0
- package/dist/web/feed-source.d.ts.map +1 -0
- package/dist/web/feed-source.js +201 -0
- package/dist/web/feed-source.js.map +1 -0
- package/dist/web/feed-xml.d.ts +63 -0
- package/dist/web/feed-xml.d.ts.map +1 -0
- package/dist/web/feed-xml.js +116 -0
- package/dist/web/feed-xml.js.map +1 -0
- package/dist/web/feeds.d.ts +31 -96
- package/dist/web/feeds.d.ts.map +1 -1
- package/dist/web/feeds.js +94 -198
- package/dist/web/feeds.js.map +1 -1
- package/dist/web/health.d.ts +31 -0
- package/dist/web/health.d.ts.map +1 -0
- package/dist/web/health.js +44 -0
- package/dist/web/health.js.map +1 -0
- package/dist/web/index.d.ts +30 -10
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +18 -7
- package/dist/web/index.js.map +1 -1
- package/dist/web/navigation.d.ts +195 -0
- package/dist/web/navigation.d.ts.map +1 -0
- package/dist/web/navigation.js +300 -0
- package/dist/web/navigation.js.map +1 -0
- package/dist/web/negotiate.d.ts +31 -0
- package/dist/web/negotiate.d.ts.map +1 -1
- package/dist/web/negotiate.js +31 -11
- package/dist/web/negotiate.js.map +1 -1
- package/dist/web/recent.d.ts +43 -0
- package/dist/web/recent.d.ts.map +1 -0
- package/dist/web/recent.js +37 -0
- package/dist/web/recent.js.map +1 -0
- package/dist/web/render.d.ts +203 -9
- package/dist/web/render.d.ts.map +1 -1
- package/dist/web/render.js +341 -17
- package/dist/web/render.js.map +1 -1
- package/dist/web/routes.d.ts +25 -8
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +854 -93
- package/dist/web/routes.js.map +1 -1
- package/dist/web/sanitize.d.ts +19 -0
- package/dist/web/sanitize.d.ts.map +1 -0
- package/dist/web/sanitize.js +272 -0
- package/dist/web/sanitize.js.map +1 -0
- package/dist/web/search.d.ts +79 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +94 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/sitemap.d.ts +120 -0
- package/dist/web/sitemap.d.ts.map +1 -0
- package/dist/web/sitemap.js +199 -0
- package/dist/web/sitemap.js.map +1 -0
- package/dist/web/taxonomy.d.ts +152 -0
- package/dist/web/taxonomy.d.ts.map +1 -0
- package/dist/web/taxonomy.js +237 -0
- package/dist/web/taxonomy.js.map +1 -0
- package/dist/web/templates.d.ts +54 -16
- package/dist/web/templates.d.ts.map +1 -1
- package/dist/web/templates.js +109 -28
- package/dist/web/templates.js.map +1 -1
- package/dist/web/themes.d.ts +226 -0
- package/dist/web/themes.d.ts.map +1 -0
- package/dist/web/themes.js +314 -0
- package/dist/web/themes.js.map +1 -0
- package/dist/webmention/discovery.d.ts +51 -0
- package/dist/webmention/discovery.d.ts.map +1 -0
- package/dist/webmention/discovery.js +176 -0
- package/dist/webmention/discovery.js.map +1 -0
- package/dist/webmention/html.d.ts +71 -0
- package/dist/webmention/html.d.ts.map +1 -0
- package/dist/webmention/html.js +285 -0
- package/dist/webmention/html.js.map +1 -0
- package/dist/webmention/index.d.ts +12 -0
- package/dist/webmention/index.d.ts.map +1 -0
- package/dist/webmention/index.js +8 -0
- package/dist/webmention/index.js.map +1 -0
- package/dist/webmention/links.d.ts +18 -0
- package/dist/webmention/links.d.ts.map +1 -0
- package/dist/webmention/links.js +64 -0
- package/dist/webmention/links.js.map +1 -0
- package/dist/webmention/microformats.d.ts +93 -0
- package/dist/webmention/microformats.d.ts.map +1 -0
- package/dist/webmention/microformats.js +376 -0
- package/dist/webmention/microformats.js.map +1 -0
- package/dist/webmention/receive.d.ts +141 -0
- package/dist/webmention/receive.d.ts.map +1 -0
- package/dist/webmention/receive.js +264 -0
- package/dist/webmention/receive.js.map +1 -0
- package/dist/webmention/routes.d.ts +37 -0
- package/dist/webmention/routes.d.ts.map +1 -0
- package/dist/webmention/routes.js +75 -0
- package/dist/webmention/routes.js.map +1 -0
- package/dist/webmention/service.d.ts +94 -0
- package/dist/webmention/service.d.ts.map +1 -0
- package/dist/webmention/service.js +207 -0
- package/dist/webmention/service.js.map +1 -0
- package/package.json +11 -6
- package/templates/site/content/_data/site.json +8 -0
- package/templates/site/content/pages/about.md +7 -0
- package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
- package/templates/site/geekity.config.ts +11 -1
- package/templates/site/tsconfig.json +1 -1
- package/themes/default/README.md +1216 -50
- package/themes/default/layouts/404.njk +2 -3
- package/themes/default/layouts/author.njk +36 -0
- package/themes/default/layouts/base.njk +161 -31
- package/themes/default/layouts/category.njk +27 -0
- package/themes/default/layouts/front-page.njk +56 -0
- package/themes/default/layouts/home.njk +17 -1
- package/themes/default/layouts/page.njk +57 -5
- package/themes/default/layouts/post.njk +78 -19
- package/themes/default/layouts/search.njk +57 -0
- package/themes/default/layouts/tag.njk +3 -6
- package/themes/default/mail/comment-digest.html.njk +37 -0
- package/themes/default/mail/comment-digest.subject.njk +3 -0
- package/themes/default/mail/comment-digest.txt.njk +40 -0
- package/themes/default/mail/comment-pending.html.njk +27 -0
- package/themes/default/mail/comment-pending.subject.njk +2 -0
- package/themes/default/mail/comment-pending.txt.njk +24 -0
- package/themes/default/mail/comment-reply.html.njk +21 -0
- package/themes/default/mail/comment-reply.subject.njk +2 -0
- package/themes/default/mail/comment-reply.txt.njk +22 -0
- package/themes/default/mail/contact-message.html.njk +24 -0
- package/themes/default/mail/contact-message.subject.njk +5 -0
- package/themes/default/mail/contact-message.txt.njk +20 -0
- package/themes/default/mail/password-changed.html.njk +18 -0
- package/themes/default/mail/password-changed.subject.njk +2 -0
- package/themes/default/mail/password-changed.txt.njk +17 -0
- package/themes/default/mail/password-reset.html.njk +22 -0
- package/themes/default/mail/password-reset.subject.njk +2 -0
- package/themes/default/mail/password-reset.txt.njk +18 -0
- package/themes/default/mail/test.html.njk +14 -0
- package/themes/default/mail/test.subject.njk +2 -0
- package/themes/default/mail/test.txt.njk +12 -0
- package/themes/default/partials/archive.njk +27 -0
- package/themes/default/partials/bio.njk +71 -0
- package/themes/default/partials/comment-form.njk +137 -0
- package/themes/default/partials/contact-form.njk +88 -0
- package/themes/default/partials/conversation.njk +139 -0
- package/themes/default/partials/feeds.njk +26 -0
- package/themes/default/partials/jsonld.njk +120 -0
- package/themes/default/partials/menu.njk +32 -0
- package/themes/default/partials/pagination.njk +12 -6
- package/themes/default/partials/post-list.njk +51 -18
- package/themes/default/partials/search-form.njk +22 -0
- package/themes/default/partials/tags.njk +26 -5
- package/themes/default/static/highlight.js +4 -0
- package/themes/default/static/style.css +1142 -194
- package/themes/default/theme.json +9 -0
- package/admin/layouts/federation.njk +0 -145
- package/admin/layouts/login.njk +0 -23
- package/admin/layouts/settings.njk +0 -116
- package/admin/layouts/setup.njk +0 -27
- package/admin/layouts/users.njk +0 -91
- /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
package/dist/admin/users.js
CHANGED
|
@@ -1,48 +1,139 @@
|
|
|
1
1
|
import { randomInt } from 'node:crypto';
|
|
2
|
-
import {
|
|
2
|
+
import { authorHref } from '../web/authors.js';
|
|
3
|
+
import { DEFAULT_DELIVERY_MODE, deliveryMode, notificationEvent, notificationSwitches, } from '../notifications/preferences.js';
|
|
4
|
+
import { countUsers, createUser, deleteUser, DuplicateUsernameError, findUserById, listUsers, setUserEmail, setUserNotification, setUserNotificationMode, setUserPassword, setUserProfile, verifyUserPassword, } from './accounts.js';
|
|
5
|
+
import { emailProblem, passwordProblem, usernameProblem } from './credentials.js';
|
|
3
6
|
import { flash } from './flash.js';
|
|
4
7
|
import { ADMIN_PREFIX } from './session.js';
|
|
5
|
-
import {
|
|
8
|
+
import { toldFollowers } from './settings-page.js';
|
|
6
9
|
import { ADMIN_TEMPLATES } from './templates.js';
|
|
7
|
-
/** Where the users
|
|
10
|
+
/** Where the list of users lives. */
|
|
8
11
|
export const USERS_PATH = `${ADMIN_PREFIX}/users`;
|
|
12
|
+
/**
|
|
13
|
+
* Where the add form lives, and where it posts.
|
|
14
|
+
*
|
|
15
|
+
* A screen of its own rather than a panel under the table, because the menu
|
|
16
|
+
* says Users > Add new and a menu entry has to be somewhere to go. It is also
|
|
17
|
+
* what keeps a refused add on a page about adding somebody instead of at the
|
|
18
|
+
* top of a list of everybody.
|
|
19
|
+
*/
|
|
20
|
+
export const ADD_USER_PATH = `${USERS_PATH}/new`;
|
|
21
|
+
/**
|
|
22
|
+
* Where one user is edited.
|
|
23
|
+
*
|
|
24
|
+
* The split documents.ts already makes between a listing and `basePath/:slug`
|
|
25
|
+
* (TASK-97): the table says who there is, and one screen per person holds
|
|
26
|
+
* every field that person has, each with a label beside it. A row of
|
|
27
|
+
* unlabelled boxes in a table cell could not.
|
|
28
|
+
*/
|
|
29
|
+
export function editUserPath(id) {
|
|
30
|
+
return `${USERS_PATH}/${String(id)}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The id in `/admin/users/<id>`, or `undefined` for a segment that is not one.
|
|
34
|
+
*
|
|
35
|
+
* Digits only, so `new`, `password` and the other named paths under
|
|
36
|
+
* `/admin/users/` can never be read as somebody's id — and so a URL somebody
|
|
37
|
+
* typed answers 404 rather than `NaN`.
|
|
38
|
+
*/
|
|
39
|
+
function pathId(segment) {
|
|
40
|
+
if (!/^\d+$/.test(segment))
|
|
41
|
+
return undefined;
|
|
42
|
+
return Number(segment);
|
|
43
|
+
}
|
|
9
44
|
/** Where the signed-in admin's change-password form posts. */
|
|
10
45
|
export const CHANGE_PASSWORD_PATH = `${USERS_PATH}/password`;
|
|
11
|
-
/** Where a
|
|
46
|
+
/** Where a delete button posts, on the list or on the user's own screen. */
|
|
12
47
|
export const DELETE_USER_PATH = `${USERS_PATH}/delete`;
|
|
13
|
-
/**
|
|
48
|
+
/** Where the email address on the Account panel posts. */
|
|
49
|
+
export const USER_EMAIL_PATH = `${USERS_PATH}/email`;
|
|
50
|
+
/**
|
|
51
|
+
* Where the Profile panel posts.
|
|
52
|
+
*
|
|
53
|
+
* A path of its own rather than a second half of the email form, because the
|
|
54
|
+
* two are about different audiences: an email address is private to the site
|
|
55
|
+
* and a profile is the public face decision-14 puts at the author URL. One
|
|
56
|
+
* form that saved both would mean an admin correcting a colleague's address
|
|
57
|
+
* also republishing their bio.
|
|
58
|
+
*/
|
|
59
|
+
export const USER_PROFILE_PATH = `${USERS_PATH}/profile`;
|
|
60
|
+
/** Where the notice switches post. */
|
|
61
|
+
export const USER_NOTIFICATIONS_PATH = `${USERS_PATH}/notifications`;
|
|
62
|
+
/**
|
|
63
|
+
* Where the how-often selects post.
|
|
64
|
+
*
|
|
65
|
+
* A path of its own rather than a second field on the switch, because the two
|
|
66
|
+
* forms answer different questions and a switch is a button while a mode is a
|
|
67
|
+
* select and a Save: one handler that had to work out which of the two it had
|
|
68
|
+
* been given would be guessing at something the URL can simply say.
|
|
69
|
+
*/
|
|
70
|
+
export const USER_NOTIFICATION_MODE_PATH = `${USER_NOTIFICATIONS_PATH}/mode`;
|
|
71
|
+
/** The fields the forms on these screens submit. */
|
|
14
72
|
export const USER_FIELDS = {
|
|
15
73
|
username: 'username',
|
|
16
74
|
password: 'password',
|
|
75
|
+
email: 'email',
|
|
17
76
|
generate: 'generate',
|
|
18
77
|
currentPassword: 'current_password',
|
|
19
78
|
newPassword: 'new_password',
|
|
20
79
|
newPasswordConfirmation: 'new_password_confirmation',
|
|
21
80
|
userId: 'user_id',
|
|
81
|
+
/** Which notice a switch is about, by its name in the registry. */
|
|
82
|
+
event: 'event',
|
|
83
|
+
/**
|
|
84
|
+
* Whether that notice is wanted.
|
|
85
|
+
*
|
|
86
|
+
* A checkbox, so a form that turns one off submits nothing at all under this
|
|
87
|
+
* name — which is why the switch is a form of its own per event rather than
|
|
88
|
+
* one form with a checkbox per event: a browser sends no field for an
|
|
89
|
+
* unticked box, and one form could not tell "turned this off" from "did not
|
|
90
|
+
* mention it".
|
|
91
|
+
*/
|
|
92
|
+
on: 'on',
|
|
93
|
+
/** How often that notice should arrive, for an event that offers a choice. */
|
|
94
|
+
mode: 'mode',
|
|
95
|
+
/** The name to print instead of the login (TASK-67). */
|
|
96
|
+
displayName: 'display_name',
|
|
97
|
+
/** A few sentences about this person. */
|
|
98
|
+
bio: 'bio',
|
|
99
|
+
/** Their picture, as a path or a URL. */
|
|
100
|
+
avatar: 'avatar',
|
|
101
|
+
/** What they do, printed beside the name in a bio (TASK-79). */
|
|
102
|
+
jobTitle: 'job_title',
|
|
103
|
+
/** Where they are, as they write it. */
|
|
104
|
+
location: 'location',
|
|
105
|
+
/** Somewhere else they are: one `Label | URL` per line. */
|
|
106
|
+
links: 'links',
|
|
22
107
|
};
|
|
23
108
|
/**
|
|
24
|
-
* Register the users
|
|
25
|
-
*
|
|
109
|
+
* Register the users screens: the list, the add form, and one screen per user
|
|
110
|
+
* where everything about that person is edited.
|
|
26
111
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
112
|
+
* The same split documents.ts makes (TASK-97). The table says who there is;
|
|
113
|
+
* a person's own screen holds their email address, their public profile, what
|
|
114
|
+
* they are emailed about, and — where the account can go — the delete. Every
|
|
115
|
+
* save lands back on that screen, so it shows its own result.
|
|
116
|
+
*
|
|
117
|
+
* One thing is still only ever your own: the password. Changing somebody
|
|
118
|
+
* else's is deliberately not offered — resetting a colleague's password from
|
|
119
|
+
* under them is what `geekity user add` and a fresh account are for, and it
|
|
120
|
+
* keeps the current-password check honest.
|
|
32
121
|
*/
|
|
33
122
|
export function mountUsers(app, options) {
|
|
34
123
|
const { render } = options;
|
|
35
|
-
app.get(USERS_PATH, (c) => render(c, ADMIN_TEMPLATES.
|
|
36
|
-
app.
|
|
124
|
+
app.get(USERS_PATH, (c) => render(c, ADMIN_TEMPLATES.usersList, screen(c)));
|
|
125
|
+
app.get(ADD_USER_PATH, (c) => render(c, ADMIN_TEMPLATES.usersNew, addScreen(c)));
|
|
126
|
+
app.post(ADD_USER_PATH, async (c) => {
|
|
37
127
|
const body = await c.req.parseBody();
|
|
38
128
|
const username = field(body[USER_FIELDS.username]).trim();
|
|
39
129
|
const supplied = field(body[USER_FIELDS.password]);
|
|
130
|
+
const email = field(body[USER_FIELDS.email]).trim();
|
|
40
131
|
const generate = field(body[USER_FIELDS.generate]) !== '';
|
|
41
132
|
const password = generate ? generatePassword() : supplied;
|
|
42
|
-
const problems = addUserProblems(username, password, generate);
|
|
133
|
+
const problems = addUserProblems(username, password, generate, email);
|
|
43
134
|
if (Object.keys(problems).length === 0) {
|
|
44
135
|
try {
|
|
45
|
-
c.var.
|
|
136
|
+
await createUser({ dataDir: c.var.config.dataDir, username, password, email });
|
|
46
137
|
}
|
|
47
138
|
catch (error) {
|
|
48
139
|
if (!(error instanceof DuplicateUsernameError))
|
|
@@ -52,7 +143,8 @@ export function mountUsers(app, options) {
|
|
|
52
143
|
}
|
|
53
144
|
if (Object.keys(problems).length > 0) {
|
|
54
145
|
c.status(400);
|
|
55
|
-
|
|
146
|
+
// Back onto the form that was refused, with what was typed still in it.
|
|
147
|
+
return render(c, ADMIN_TEMPLATES.usersNew, addScreen(c, { addForm: { username, email, generate }, addProblems: problems }));
|
|
56
148
|
}
|
|
57
149
|
// A generated password is shown once, here, and never stored in the clear.
|
|
58
150
|
// The flash lives on the session row, so it is not in the URL, in a cookie
|
|
@@ -68,7 +160,7 @@ export function mountUsers(app, options) {
|
|
|
68
160
|
const session = c.var.session;
|
|
69
161
|
const user = session?.userId === null || session === undefined
|
|
70
162
|
? undefined
|
|
71
|
-
: c.var.
|
|
163
|
+
: findUserById(c.var.config.dataDir, session.userId);
|
|
72
164
|
if (session === undefined || user === undefined)
|
|
73
165
|
return c.redirect(USERS_PATH, 303);
|
|
74
166
|
const body = await c.req.parseBody();
|
|
@@ -76,17 +168,18 @@ export function mountUsers(app, options) {
|
|
|
76
168
|
const next = field(body[USER_FIELDS.newPassword]);
|
|
77
169
|
const confirmation = field(body[USER_FIELDS.newPasswordConfirmation]);
|
|
78
170
|
const problems = changePasswordProblems({
|
|
79
|
-
correct: c.var.
|
|
171
|
+
correct: verifyUserPassword(c.var.config.dataDir, user.username, current) !== undefined,
|
|
80
172
|
next,
|
|
81
173
|
confirmation,
|
|
82
174
|
});
|
|
83
175
|
if (Object.keys(problems).length > 0) {
|
|
84
176
|
c.status(400);
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
|
|
177
|
+
// Back onto your own page, where the form is. Nothing that was typed is
|
|
178
|
+
// echoed back: every field on this form is a password, and a password
|
|
179
|
+
// does not belong in rendered HTML.
|
|
180
|
+
return render(c, ADMIN_TEMPLATES.usersEdit, userScreen(c, user, { passwordProblems: problems }));
|
|
88
181
|
}
|
|
89
|
-
c.var.
|
|
182
|
+
await setUserPassword({ dataDir: c.var.config.dataDir, userId: user.id, password: next });
|
|
90
183
|
// Every browser that was signed in as this user is signed out, because the
|
|
91
184
|
// usual reason to change a password is that somebody else may have it. The
|
|
92
185
|
// one doing the changing is spared, so the admin is not thrown out of the
|
|
@@ -95,28 +188,193 @@ export function mountUsers(app, options) {
|
|
|
95
188
|
flash(c, 'notice', ended === 0
|
|
96
189
|
? 'Your password was changed.'
|
|
97
190
|
: `Your password was changed, and ${signedOut(ended)} signed out.`);
|
|
98
|
-
return c.redirect(
|
|
191
|
+
return c.redirect(editUserPath(user.id), 303);
|
|
192
|
+
});
|
|
193
|
+
/**
|
|
194
|
+
* Put an email address on a user, or take one off.
|
|
195
|
+
*
|
|
196
|
+
* Anybody's, not only your own. There is one role, so every user already has
|
|
197
|
+
* every power there is — including deleting somebody and adding them back —
|
|
198
|
+
* and a screen where an admin could see a colleague's address but not
|
|
199
|
+
* correct a typo in it would be a rule with nothing behind it. It is also
|
|
200
|
+
* what makes a site usable: an admin who has just added a colleague can put
|
|
201
|
+
* their address in without waiting for them to sign in and do it.
|
|
202
|
+
*
|
|
203
|
+
* A flash and a redirect back to that person's screen rather than a 400 with
|
|
204
|
+
* the form redrawn, unlike the two forms above: nothing here is a secret, so
|
|
205
|
+
* there is no reason not to show the refusal beside the box it is about with
|
|
206
|
+
* what is stored back in it.
|
|
207
|
+
*/
|
|
208
|
+
app.post(USER_EMAIL_PATH, async (c) => {
|
|
209
|
+
const dataDir = c.var.config.dataDir;
|
|
210
|
+
const body = await c.req.parseBody();
|
|
211
|
+
const id = Number(field(body[USER_FIELDS.userId]));
|
|
212
|
+
const email = field(body[USER_FIELDS.email]).trim();
|
|
213
|
+
const target = Number.isInteger(id) ? findUserById(dataDir, id) : undefined;
|
|
214
|
+
if (target === undefined) {
|
|
215
|
+
flash(c, 'error', 'That user is already gone.');
|
|
216
|
+
return c.redirect(USERS_PATH, 303);
|
|
217
|
+
}
|
|
218
|
+
const problem = emailProblem(email);
|
|
219
|
+
if (problem !== undefined) {
|
|
220
|
+
flash(c, 'error', problem);
|
|
221
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
222
|
+
}
|
|
223
|
+
await setUserEmail({ dataDir, userId: target.id, email });
|
|
224
|
+
flash(c, 'notice', email === ''
|
|
225
|
+
? `${target.username} has no email address any more.`
|
|
226
|
+
: `${target.username} will be emailed at ${email}.`);
|
|
227
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
228
|
+
});
|
|
229
|
+
/**
|
|
230
|
+
* Write a user's public profile (TASK-67).
|
|
231
|
+
*
|
|
232
|
+
* Anybody's, for the reason the email field is anybody's: one role, and an
|
|
233
|
+
* admin who has just added a colleague should be able to put a name and a
|
|
234
|
+
* line about them on their archive without waiting for them to sign in. The
|
|
235
|
+
* whole profile at once, because that is what the panel is — six boxes and
|
|
236
|
+
* one Save — and a box somebody cleared is a field they no longer want.
|
|
237
|
+
*
|
|
238
|
+
* A flash and a redirect back to that person's screen rather than a 400,
|
|
239
|
+
* because nothing here can be wrong enough to refuse. A link line with no
|
|
240
|
+
* URL is dropped on the way in rather than reported.
|
|
241
|
+
*/
|
|
242
|
+
app.post(USER_PROFILE_PATH, async (c) => {
|
|
243
|
+
const dataDir = c.var.config.dataDir;
|
|
244
|
+
const body = await c.req.parseBody();
|
|
245
|
+
const id = Number(field(body[USER_FIELDS.userId]));
|
|
246
|
+
const target = Number.isInteger(id) ? findUserById(dataDir, id) : undefined;
|
|
247
|
+
if (target === undefined) {
|
|
248
|
+
flash(c, 'error', 'That user is already gone.');
|
|
249
|
+
return c.redirect(USERS_PATH, 303);
|
|
250
|
+
}
|
|
251
|
+
const changed = await setUserProfile({
|
|
252
|
+
dataDir,
|
|
253
|
+
userId: target.id,
|
|
254
|
+
profile: {
|
|
255
|
+
displayName: field(body[USER_FIELDS.displayName]),
|
|
256
|
+
bio: field(body[USER_FIELDS.bio]),
|
|
257
|
+
avatar: field(body[USER_FIELDS.avatar]),
|
|
258
|
+
jobTitle: field(body[USER_FIELDS.jobTitle]),
|
|
259
|
+
location: field(body[USER_FIELDS.location]),
|
|
260
|
+
links: parseProfileLinks(field(body[USER_FIELDS.links])),
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
// The profile is the actor's profile now (decision-14), so saving it is
|
|
264
|
+
// also an announcement: a follower's copy of somebody's name, bio and
|
|
265
|
+
// picture is only as fresh as the last `Update` they were sent. The user
|
|
266
|
+
// is read back rather than assumed, so the actor that goes out is built
|
|
267
|
+
// from the file exactly as a peer fetching it would be.
|
|
268
|
+
const saved = changed ? findUserById(dataDir, target.id) : undefined;
|
|
269
|
+
const told = saved === undefined ? undefined : await c.var.delivery.updateActor(saved);
|
|
270
|
+
flash(c, 'notice', `Saved ${target.username}’s profile.${toldFollowers(told)}`);
|
|
271
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
272
|
+
});
|
|
273
|
+
/**
|
|
274
|
+
* Turn one notice on or off for one user.
|
|
275
|
+
*
|
|
276
|
+
* Anybody's, for the reason the email field is anybody's: one role, and an
|
|
277
|
+
* admin who has just given a colleague an address should be able to say what
|
|
278
|
+
* goes to it. An event nothing in this version knows is a no-op rather than an
|
|
279
|
+
* error, because the only way to submit one is a form this CMS did not
|
|
280
|
+
* render.
|
|
281
|
+
*/
|
|
282
|
+
app.post(USER_NOTIFICATIONS_PATH, async (c) => {
|
|
283
|
+
const dataDir = c.var.config.dataDir;
|
|
284
|
+
const body = await c.req.parseBody();
|
|
285
|
+
const id = Number(field(body[USER_FIELDS.userId]));
|
|
286
|
+
const target = Number.isInteger(id) ? findUserById(dataDir, id) : undefined;
|
|
287
|
+
if (target === undefined) {
|
|
288
|
+
flash(c, 'error', 'That user is already gone.');
|
|
289
|
+
return c.redirect(USERS_PATH, 303);
|
|
290
|
+
}
|
|
291
|
+
const name = field(body[USER_FIELDS.event]);
|
|
292
|
+
const event = notificationEvent(name);
|
|
293
|
+
if (event === undefined) {
|
|
294
|
+
flash(c, 'error', 'That is not something this site can tell anybody about.');
|
|
295
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
296
|
+
}
|
|
297
|
+
// An unticked checkbox submits no field at all, so its absence is the
|
|
298
|
+
// answer rather than a missing one.
|
|
299
|
+
const on = field(body[USER_FIELDS.on]) !== '';
|
|
300
|
+
await setUserNotification({ dataDir, userId: target.id, event: name, on });
|
|
301
|
+
flash(c, 'notice', on
|
|
302
|
+
? `${target.username} will be emailed about ${event.label.toLowerCase()}.`
|
|
303
|
+
: `${target.username} will not be emailed about ${event.label.toLowerCase()}.`);
|
|
304
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
305
|
+
});
|
|
306
|
+
/**
|
|
307
|
+
* Say how often one notice reaches one user.
|
|
308
|
+
*
|
|
309
|
+
* Anybody's, for the reason the switch beside it is anybody's. A mode this
|
|
310
|
+
* version does not know, or an event that offers no choice, changes nothing
|
|
311
|
+
* and says so: the only way to submit either is a form this CMS did not
|
|
312
|
+
* render.
|
|
313
|
+
*/
|
|
314
|
+
app.post(USER_NOTIFICATION_MODE_PATH, async (c) => {
|
|
315
|
+
const dataDir = c.var.config.dataDir;
|
|
316
|
+
const body = await c.req.parseBody();
|
|
317
|
+
const id = Number(field(body[USER_FIELDS.userId]));
|
|
318
|
+
const target = Number.isInteger(id) ? findUserById(dataDir, id) : undefined;
|
|
319
|
+
if (target === undefined) {
|
|
320
|
+
flash(c, 'error', 'That user is already gone.');
|
|
321
|
+
return c.redirect(USERS_PATH, 303);
|
|
322
|
+
}
|
|
323
|
+
const name = field(body[USER_FIELDS.event]);
|
|
324
|
+
const event = notificationEvent(name);
|
|
325
|
+
if (event === undefined || !event.batched) {
|
|
326
|
+
flash(c, 'error', 'That is not a notice this site can batch up.');
|
|
327
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
328
|
+
}
|
|
329
|
+
const wanted = deliveryMode(field(body[USER_FIELDS.mode]));
|
|
330
|
+
if (wanted === undefined) {
|
|
331
|
+
flash(c, 'error', 'That is not one of the choices.');
|
|
332
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
333
|
+
}
|
|
334
|
+
await setUserNotificationMode({ dataDir, userId: target.id, event: name, mode: wanted });
|
|
335
|
+
flash(c, 'notice', wanted === DEFAULT_DELIVERY_MODE
|
|
336
|
+
? `${target.username} will hear about ${event.label.toLowerCase()} as they arrive.`
|
|
337
|
+
: `${target.username} will get one ${wanted === 'daily' ? 'daily' : 'hourly'} digest of ` +
|
|
338
|
+
`${event.label.toLowerCase()}.`);
|
|
339
|
+
return c.redirect(editUserPath(target.id), 303);
|
|
99
340
|
});
|
|
100
341
|
app.post(DELETE_USER_PATH, async (c) => {
|
|
101
|
-
const
|
|
342
|
+
const dataDir = c.var.config.dataDir;
|
|
102
343
|
const body = await c.req.parseBody();
|
|
103
344
|
const id = Number(field(body[USER_FIELDS.userId]));
|
|
104
|
-
const target = Number.isInteger(id) ?
|
|
345
|
+
const target = Number.isInteger(id) ? findUserById(dataDir, id) : undefined;
|
|
105
346
|
const refusal = deleteUserRefusal({
|
|
106
347
|
target,
|
|
107
348
|
signedInAs: c.var.session?.userId ?? null,
|
|
108
|
-
total:
|
|
349
|
+
total: countUsers(dataDir),
|
|
109
350
|
});
|
|
110
351
|
if (refusal !== undefined) {
|
|
111
352
|
flash(c, 'error', refusal);
|
|
112
353
|
return c.redirect(USERS_PATH, 303);
|
|
113
354
|
}
|
|
114
|
-
|
|
115
|
-
//
|
|
116
|
-
|
|
355
|
+
await deleteUser({ dataDir, userId: target.id });
|
|
356
|
+
// Their sessions go with them. The foreign key that used to do this went
|
|
357
|
+
// with the users table (decision-9), so it is done here — and a session
|
|
358
|
+
// that outlives this one, in a database restored from a backup, is not a
|
|
359
|
+
// login either: the guard refuses one whose user the file does not hold.
|
|
360
|
+
c.var.admin.deleteSessionsForUser(target.id);
|
|
117
361
|
flash(c, 'notice', `Deleted ${target.username}.`);
|
|
118
362
|
return c.redirect(USERS_PATH, 303);
|
|
119
363
|
});
|
|
364
|
+
/**
|
|
365
|
+
* One user's screen (TASK-97).
|
|
366
|
+
*
|
|
367
|
+
* Registered last, after every named path under `/admin/users/`, and matched
|
|
368
|
+
* only when the segment is digits — so Add new keeps its URL and a stray
|
|
369
|
+
* `/admin/users/anything` is a 404 rather than a screen about nobody.
|
|
370
|
+
*/
|
|
371
|
+
app.get(`${USERS_PATH}/:id`, (c) => {
|
|
372
|
+
const id = pathId(c.req.param('id'));
|
|
373
|
+
const user = id === undefined ? undefined : findUserById(c.var.config.dataDir, id);
|
|
374
|
+
if (user === undefined)
|
|
375
|
+
return c.notFound();
|
|
376
|
+
return render(c, ADMIN_TEMPLATES.usersEdit, userScreen(c, user));
|
|
377
|
+
});
|
|
120
378
|
}
|
|
121
379
|
/**
|
|
122
380
|
* Delete a user.
|
|
@@ -167,9 +425,10 @@ function signedOut(count) {
|
|
|
167
425
|
* `/admin/setup` and `geekity user add` would both have accepted. A generated
|
|
168
426
|
* password is not checked against them — it is made to satisfy them — and the
|
|
169
427
|
* password field is not read at all when the box is ticked, so a stale value
|
|
170
|
-
* left in it cannot be what is refused.
|
|
428
|
+
* left in it cannot be what is refused. An empty email is not a problem: it is
|
|
429
|
+
* an optional field, and most users will never have one.
|
|
171
430
|
*/
|
|
172
|
-
export function addUserProblems(username, password, generate = false) {
|
|
431
|
+
export function addUserProblems(username, password, generate = false, email = '') {
|
|
173
432
|
const problems = {};
|
|
174
433
|
const name = usernameProblem(username);
|
|
175
434
|
if (name !== undefined)
|
|
@@ -179,6 +438,9 @@ export function addUserProblems(username, password, generate = false) {
|
|
|
179
438
|
if (secret !== undefined)
|
|
180
439
|
problems.password = secret;
|
|
181
440
|
}
|
|
441
|
+
const address = emailProblem(email);
|
|
442
|
+
if (address !== undefined)
|
|
443
|
+
problems.email = address;
|
|
182
444
|
return problems;
|
|
183
445
|
}
|
|
184
446
|
/**
|
|
@@ -196,20 +458,72 @@ export function generatePassword() {
|
|
|
196
458
|
}
|
|
197
459
|
return password;
|
|
198
460
|
}
|
|
199
|
-
/**
|
|
200
|
-
|
|
461
|
+
/**
|
|
462
|
+
* The Add new screen: the same context the listing is drawn from, rendered
|
|
463
|
+
* through `pages/users/new.njk` instead. The two screens are the same chrome
|
|
464
|
+
* around one of two things, and which of them it is is the route's business
|
|
465
|
+
* rather than a flag the template has to read.
|
|
466
|
+
*/
|
|
467
|
+
function addScreen(c, extra = {}) {
|
|
468
|
+
return screen(c, { child: 'new', ...extra });
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Everything one user's screen renders (TASK-97).
|
|
472
|
+
*
|
|
473
|
+
* The same forms the table used to hold, one per panel and each with its
|
|
474
|
+
* fields labelled: the account, the public profile, what this person is
|
|
475
|
+
* emailed about, the password — only on your own page — and the delete, or the
|
|
476
|
+
* sentence saying why this account cannot go.
|
|
477
|
+
*/
|
|
478
|
+
function userScreen(c, user, extra = {}) {
|
|
201
479
|
const signedInAs = c.var.session?.userId ?? null;
|
|
202
|
-
const
|
|
480
|
+
const total = countUsers(c.var.config.dataDir);
|
|
203
481
|
return {
|
|
204
482
|
section: 'users',
|
|
483
|
+
// The list's entry stays marked: an edit screen is where a row goes, not a
|
|
484
|
+
// sixth thing in the menu.
|
|
485
|
+
child: 'all',
|
|
205
486
|
usersUrl: USERS_PATH,
|
|
487
|
+
userProfileUrl: USER_PROFILE_PATH,
|
|
206
488
|
changePasswordUrl: CHANGE_PASSWORD_PATH,
|
|
207
489
|
deleteUserUrl: DELETE_USER_PATH,
|
|
490
|
+
userEmailUrl: USER_EMAIL_PATH,
|
|
491
|
+
userNotificationsUrl: USER_NOTIFICATIONS_PATH,
|
|
492
|
+
userNotificationModeUrl: USER_NOTIFICATION_MODE_PATH,
|
|
493
|
+
fields: USER_FIELDS,
|
|
494
|
+
// `account` rather than `user`, which the chrome already holds: the bar
|
|
495
|
+
// says who is signed in, and this screen is about somebody who may well be
|
|
496
|
+
// anybody else.
|
|
497
|
+
account: row(user, { signedInAs, total }),
|
|
498
|
+
// Why this account cannot go, where it cannot, so the screen says it
|
|
499
|
+
// instead of offering a button it is about to refuse.
|
|
500
|
+
deleteRefusal: deleteUserRefusal({ target: user, signedInAs, total }),
|
|
501
|
+
passwordProblems: {},
|
|
502
|
+
mailConfigured: c.var.mail.configured(),
|
|
503
|
+
...extra,
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Everything the users screens render: the listing, and the fields the add
|
|
508
|
+
* form is drawn from.
|
|
509
|
+
*
|
|
510
|
+
* Nothing about editing a user is here any more (TASK-97). A row says who
|
|
511
|
+
* somebody is and links to their screen; the only form in the table is the
|
|
512
|
+
* delete, which is an action rather than a field.
|
|
513
|
+
*/
|
|
514
|
+
function screen(c, extra = {}) {
|
|
515
|
+
const signedInAs = c.var.session?.userId ?? null;
|
|
516
|
+
const users = listUsers(c.var.config.dataDir);
|
|
517
|
+
return {
|
|
518
|
+
section: 'users',
|
|
519
|
+
child: 'all',
|
|
520
|
+
usersUrl: USERS_PATH,
|
|
521
|
+
addUserUrl: ADD_USER_PATH,
|
|
522
|
+
deleteUserUrl: DELETE_USER_PATH,
|
|
208
523
|
fields: USER_FIELDS,
|
|
209
524
|
users: users.map((user) => row(user, { signedInAs, total: users.length })),
|
|
210
|
-
addForm: { username: '', generate: false },
|
|
525
|
+
addForm: { username: '', email: '', generate: false },
|
|
211
526
|
addProblems: {},
|
|
212
|
-
passwordProblems: {},
|
|
213
527
|
...extra,
|
|
214
528
|
};
|
|
215
529
|
}
|
|
@@ -217,16 +531,75 @@ function screen(c, extra = {}) {
|
|
|
217
531
|
function field(value) {
|
|
218
532
|
return typeof value === 'string' ? value : '';
|
|
219
533
|
}
|
|
220
|
-
/**
|
|
534
|
+
/**
|
|
535
|
+
* A textarea of links as the list a profile stores: one per line, `Label |
|
|
536
|
+
* URL`, or a bare URL that labels itself.
|
|
537
|
+
*
|
|
538
|
+
* A textarea rather than a repeating fieldset because a profile has two or
|
|
539
|
+
* three links and a table row has no space for a widget; the separator is a
|
|
540
|
+
* pipe because it is the one character nobody puts in a link label by
|
|
541
|
+
* accident. Blank lines are skipped and the empties are dropped inside
|
|
542
|
+
* `setUserProfile`, so a list somebody emptied leaves no key behind.
|
|
543
|
+
*/
|
|
544
|
+
export function parseProfileLinks(value) {
|
|
545
|
+
const links = [];
|
|
546
|
+
for (const line of value.split('\n')) {
|
|
547
|
+
const trimmed = line.trim();
|
|
548
|
+
if (trimmed === '')
|
|
549
|
+
continue;
|
|
550
|
+
const separator = trimmed.indexOf('|');
|
|
551
|
+
if (separator === -1) {
|
|
552
|
+
links.push({ label: trimmed, href: trimmed });
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
links.push({
|
|
556
|
+
label: trimmed.slice(0, separator).trim(),
|
|
557
|
+
href: trimmed.slice(separator + 1).trim(),
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
return links;
|
|
561
|
+
}
|
|
562
|
+
/** A stored list of links back as the textarea shows it. */
|
|
563
|
+
export function formatProfileLinks(links) {
|
|
564
|
+
return (links ?? [])
|
|
565
|
+
.map((link) => (link.label === link.href ? link.href : `${link.label} | ${link.href}`))
|
|
566
|
+
.join('\n');
|
|
567
|
+
}
|
|
568
|
+
/** One user, as the table lists them and as their own screen edits them. */
|
|
221
569
|
function row(user, context) {
|
|
222
570
|
const you = user.id === context.signedInAs;
|
|
223
571
|
return {
|
|
224
572
|
id: user.id,
|
|
225
573
|
username: user.username,
|
|
574
|
+
email: user.email ?? '',
|
|
575
|
+
// Where the row goes, and where every save about this person lands.
|
|
576
|
+
editUrl: editUserPath(user.id),
|
|
577
|
+
// The public half of this person (TASK-67): what the archive at
|
|
578
|
+
// `archiveUrl` is headed with, and — after TASK-68 — what their actor
|
|
579
|
+
// carries.
|
|
580
|
+
profile: {
|
|
581
|
+
displayName: user.profile?.displayName ?? '',
|
|
582
|
+
bio: user.profile?.bio ?? '',
|
|
583
|
+
avatar: user.profile?.avatar ?? '',
|
|
584
|
+
jobTitle: user.profile?.jobTitle ?? '',
|
|
585
|
+
location: user.profile?.location ?? '',
|
|
586
|
+
links: formatProfileLinks(user.profile?.links),
|
|
587
|
+
},
|
|
588
|
+
archiveUrl: authorHref(user.username),
|
|
589
|
+
// The id this person was published under before they were here (TASK-69).
|
|
590
|
+
// Shown on their screen rather than edited: it is identity, not a
|
|
591
|
+
// preference — the import writes it, or somebody editing
|
|
592
|
+
// `data/users.json` does — and a box that let it be changed would be a box
|
|
593
|
+
// that could break every follow this person has. Empty for almost
|
|
594
|
+
// everybody, and then the screen says nothing about it at all.
|
|
595
|
+
storedActorId: user.actorId ?? '',
|
|
596
|
+
// One switch per registered event, so the screen loops rather than naming
|
|
597
|
+
// the notices it happens to know about (TASK-55).
|
|
598
|
+
notifications: notificationSwitches(user),
|
|
226
599
|
createdAt: user.createdAt,
|
|
227
600
|
you,
|
|
228
601
|
// The button is rendered for everybody the signed-in admin may actually
|
|
229
|
-
// delete, so
|
|
602
|
+
// delete, so neither screen offers an action it is about to refuse.
|
|
230
603
|
deletable: !you && context.total > 1,
|
|
231
604
|
};
|
|
232
605
|
}
|
package/dist/admin/users.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/admin/users.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/admin/users.ts"],"names":[],"mappings":"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"}
|