Changeset 283f618 in Klonkt
- Timestamp:
- 06/26/2026 07:26:26 AM (2 months ago)
- Branches:
- main
- Children:
- f278df9
- Parents:
- eb2fe08
- Location:
- src
- Files:
-
- 9 edited
-
middleware/render.js (modified) (2 diffs)
-
routes/activitypub.js (modified) (1 diff)
-
routes/admin-settings.js (modified) (2 diffs)
-
services/SettingsService.js (modified) (1 diff)
-
services/i18n.js (modified) (3 diffs)
-
views/pages/admin-settings.ejs (modified) (1 diff)
-
views/pages/admin.ejs (modified) (1 diff)
-
views/pages/post.ejs (modified) (1 diff)
-
views/partials/profile-header.ejs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/middleware/render.js
reb2fe08 r283f618 17 17 import PermissionsService from '../services/PermissionsService.js'; 18 18 import { isViewer } from './auth.js'; 19 import { getSetting } from '../services/SettingsService.js';19 import { getSetting, apEnabled } from '../services/SettingsService.js'; 20 20 import { isPremium as isPremiumInstance, premiumEnabled, premiumUnlocked } from '../services/PatreonService.js'; 21 21 import ActivityPubService from '../services/ActivityPubService.js'; … … 122 122 canSeeBeheer, 123 123 canManageFedi, 124 apEnabled: apEnabled(), 124 125 isViewer: _isViewer, 125 126 canMutate: !_isViewer, -
src/routes/activitypub.js
reb2fe08 r283f618 17 17 import AP from '../services/ActivityPubService.js'; 18 18 import { apReadLimiter, apInboxLimiter } from '../middleware/rate-limit.js'; 19 import { apEnabled } from '../services/SettingsService.js'; 19 20 20 21 const router = express.Router(); 22 // The whole fediverse layer can be turned off (solo "no federation" mode): 23 // then /ap/*, WebFinger and NodeInfo are simply gone — the site is undiscoverable 24 // and unfederatable. 25 router.use((req, res, next) => { if (!apEnabled()) return res.status(404).end(); next(); }); 21 26 // Generous per-IP baseline over all /ap/* (reads). The inbox POST gets an 22 27 // additional, tighter cap inline (it triggers outbound fetches). -
src/routes/admin-settings.js
reb2fe08 r283f618 82 82 smtp: mailerStatus(), 83 83 footerNewsletter: getSetting('footer_newsletter') === '1', 84 apEnabledSetting: getSetting('ap_enabled', '1') !== '0', 84 85 success: req.query.success || null, 85 86 error: req.query.error || null, … … 166 167 }); 167 168 169 // Fediverse (ActivityPub) on/off. Off = no federation + no fediverse reactions. 170 router.post('/ap', requireGod, (req, res) => { 171 setSetting('ap_enabled', req.body.ap_enabled ? '1' : '0'); 172 res.redirect('/admin/settings?success=' + encodeURIComponent('Fediverse-instelling opgeslagen')); 173 }); 174 168 175 // Send a test email to a specified address (or the logged-in user). 169 176 router.post('/smtp/test', requireGod, async (req, res) => { -
src/services/SettingsService.js
reb2fe08 r283f618 49 49 setSetting('tenancy', m); 50 50 } 51 52 // ActivityPub / fediverse federation. ON by default. '0' = off: the site does 53 // not federate, /ap/* is gone, and the "from the fediverse" reactions disappear 54 // — which (since native comments were removed) means no comments at all. 55 export function apEnabled() { 56 return getSetting('ap_enabled', '1') !== '0'; 57 } -
src/services/i18n.js
reb2fe08 r283f618 188 188 'aset.newsletter_help_2': 'van je site zodat bezoekers zich op elke pagina kunnen inschrijven. (De volledige aanmeldpagina blijft op', 189 189 'aset.newsletter_show_footer': 'Aanmeldveld in de footer tonen', 190 'aset.fediverse': 'Fediverse (ActivityPub)', 191 'aset.fediverse_help': 'Laat je site meedoen met de fediverse: mensen op Mastodon (of een andere Klonkt) kunnen je volgen, liken en reageren — en die reacties verschijnen onder je posts. Zet je dit uit, dan federeert je site niet en zijn er geen reacties (een rustige, op zichzelf staande blog).', 192 'aset.fediverse_toggle': 'Fediverse aan (volgen, liken, reageren)', 190 193 'aset.email_smtp': 'E-mail (SMTP)', 191 194 'aset.smtp_help_1': 'Nodig om de', … … 1196 1199 'aset.newsletter_help_2': 'of your site so visitors can subscribe from any page. (The full sign-up page stays at', 1197 1200 'aset.newsletter_show_footer': 'Show sign-up field in the footer', 1201 'aset.fediverse': 'Fediverse (ActivityPub)', 1202 'aset.fediverse_help': 'Let your site join the fediverse: people on Mastodon (or another Klonkt) can follow, like and reply — and those replies show up under your posts. Turn this off and your site does not federate and has no comments (a quiet, standalone blog).', 1203 'aset.fediverse_toggle': 'Fediverse on (follow, like, comment)', 1198 1204 'aset.email_smtp': 'Email (SMTP)', 1199 1205 'aset.smtp_help_1': 'Needed to', … … 2203 2209 'aset.newsletter_help_2': 'deiner Site, damit sich Besucher auf jeder Seite eintragen können. (Die vollständige Anmeldeseite bleibt unter', 2204 2210 'aset.newsletter_show_footer': 'Anmeldefeld in der Fußzeile anzeigen', 2211 'aset.fediverse': 'Fediverse (ActivityPub)', 2212 'aset.fediverse_help': 'Lass deine Seite am Fediverse teilnehmen: Leute auf Mastodon (oder einem anderen Klonkt) können dir folgen, liken und antworten — und diese Antworten erscheinen unter deinen Beiträgen. Schaltest du das aus, föderiert deine Seite nicht und hat keine Kommentare (ein ruhiger, eigenständiger Blog).', 2213 'aset.fediverse_toggle': 'Fediverse an (Folgen, Liken, Kommentieren)', 2205 2214 'aset.email_smtp': 'E-Mail (SMTP)', 2206 2215 'aset.smtp_help_1': 'Erforderlich, um den', -
src/views/pages/admin-settings.ejs
reb2fe08 r283f618 117 117 </section> 118 118 <% } %> 119 120 <%# Fediverse (ActivityPub) on/off. Off = no federation + no fediverse reactions, 121 which (since native comments were removed) means no comments at all. %> 122 <section class="set-card" style="margin-top:1rem"> 123 <h2><%= t('aset.fediverse') %></h2> 124 <p class="set-help"><%= t('aset.fediverse_help') %></p> 125 <form method="post" action="/admin/settings/ap" class="set-form"> 126 <label class="set-toggle" style="display:flex;align-items:center;gap:.6rem;cursor:pointer"> 127 <input type="checkbox" name="ap_enabled" value="1" <%= (typeof apEnabledSetting === 'undefined' || apEnabledSetting) ? 'checked' : '' %>> 128 <span><%= t('aset.fediverse_toggle') %></span> 129 </label> 130 <div class="set-actions"><button type="submit" class="btn btn-primary"><%= t('aset.save') %></button></div> 131 </form> 132 </section> 119 133 120 134 <%# E-mail / SMTP — required for sending newsletters, notify-mails and password resets. %> -
src/views/pages/admin.ejs
reb2fe08 r283f618 57 57 <a href="/admin/shows" class="btn"><%= t('admin.b_agenda') %></a> 58 58 <% } %> 59 <a href="/tijdlijn" class="btn">🌐 <%= t('tl.title') %></a> 60 <a href="/meldingen" class="btn">🔔 <%= t('notif.title') %></a> 61 <a href="/fediverse" class="btn">🐘 <%= t('admin.b_fediverse') %></a> 62 <a href="/blokkeren" class="btn">🚫 <%= t('blk.title') %></a> 59 <% if (typeof apEnabled === 'undefined' || apEnabled) { %> 60 <a href="/tijdlijn" class="btn">🌐 <%= t('tl.title') %></a> 61 <a href="/meldingen" class="btn">🔔 <%= t('notif.title') %></a> 62 <a href="/fediverse" class="btn">🐘 <%= t('admin.b_fediverse') %></a> 63 <a href="/blokkeren" class="btn">🚫 <%= t('blk.title') %></a> 64 <% } %> 63 65 <a href="/admin/updates" class="btn"><%= t('admin.b_updates') %></a> 64 66 <a href="/admin/handleiding" class="btn"><%= t('admin.b_help') %></a> -
src/views/pages/post.ejs
reb2fe08 r283f618 70 70 <% var _postAbsUrl = (typeof ogOrigin !== 'undefined' && ogOrigin ? ogOrigin : '') + (typeof _base !== 'undefined' && _base ? _base : '') + '/' + post.slug; %> 71 71 <% var _fedi = (typeof fediverse !== 'undefined' && fediverse) ? fediverse : { thread: [], likeCount: 0, announceCount: 0 }; %> 72 <% if (post.status === 'published' ) { %>72 <% if (post.status === 'published' && (typeof apEnabled === 'undefined' || apEnabled)) { %> 73 73 <section class="post-fediverse post-comments" id="fediverse"> 74 74 <h2 class="comments-heading"><%= t('fedi.heading') %></h2> -
src/views/partials/profile-header.ejs
reb2fe08 r283f618 70 70 <%# Follow-via-fediverse: a compact icon in the links row (keeps the header 71 71 short), and hidden for the owner — you don't follow yourself. %> 72 <% var _showFollow = (typeof canManageFedi === 'undefined' || !canManageFedi) && site && site.slug ; %>72 <% var _showFollow = (typeof canManageFedi === 'undefined' || !canManageFedi) && site && site.slug && (typeof apEnabled === 'undefined' || apEnabled); %> 73 73 <% if (_profileLinks.length || _showFollow) { %> 74 74 <% const _platforms = (typeof platforms_catalog !== 'undefined' && platforms_catalog) || {}; %>
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)