Changeset 013e16c in Klonkt for src/routes
- Timestamp:
- 08/13/2026 01:09:24 PM (4 weeks ago)
- Branches:
- main
- Children:
- f50a84b
- Parents:
- f59a46c
- git-author:
- Robin <roboburr@…> (08/13/2026 01:01:18 PM)
- git-committer:
- Robin <roboburr@…> (08/13/2026 01:09:24 PM)
- Location:
- src/routes
- Files:
-
- 2 edited
-
admin-seo.js (modified) (5 diffs)
-
admin-sites.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/admin-seo.js
rf59a46c r013e16c 19 19 import { requireGod } from '../middleware/auth.js'; 20 20 import { getPrimarySite } from '../middleware/site.js'; 21 import { isMbid } from '../services/ap-core.js'; 22 import MusicBrainz from '../services/MusicBrainzService.js'; 21 23 22 24 const router = express.Router(); … … 37 39 renderPage(req, res, 'pages/admin-seo', { 38 40 pageTitleKey: 'admin.t_seo', 41 pageJs: 'admin-seo', 39 42 bodyClass: 'on-admin', 40 43 site, … … 42 45 error: req.query.error || null, 43 46 }); 47 }); 48 49 /** 50 * "Zoek jezelf op" -- kandidaten uit MusicBrainz (shaer-mbz). 51 * 52 * De zoekopdracht draait HIER en niet in de browser: MusicBrainz staat een 53 * verzoek per seconde toe per APPLICATIE, en dat is alleen af te dwingen als 54 * alles langs een plek gaat. Bovendien eisen ze een User-Agent met contact, en 55 * die kan een browser niet zetten. 56 * 57 * Wij kiezen NIET. Ook niet als er precies een treffer is: een verkeerd geraden 58 * MBID zet jouw naam onder andermans werk. 59 */ 60 router.get('/api/musicbrainz', requireGod, async (req, res) => { 61 const site = getPrimarySite(req); 62 const q = String(req.query.q || (site && (site.publisher_name || site.title)) || '').trim(); 63 if (!q) return res.json({ ok: true, q: '', kandidaten: [] }); 64 res.json({ ok: true, q, kandidaten: await MusicBrainz.zoekArtiesten(q) }); 44 65 }); 45 66 … … 72 93 publisher_url = ?, 73 94 publisher_logo = ?, 95 mb_artist_id = ?, mb_artist_name = ?, 74 96 updated_at = CURRENT_TIMESTAMP 75 97 WHERE id = ? 98 // De MusicBrainz-koppeling (shaer-mbz). Alleen een echte MBID komt de kolom 99 // in: zonder deze zeef sluipt er een URL of een handle in het veld dat naar 100 // buiten gaat, en het gaat naar TWEE uitgangen -- de JSON-LD en de actor. 101 // Leeg is een geldige keuze; dat is ontkoppelen. 102 const mbRuw = String(f.mb_artist_id || '').trim().toLowerCase(); 103 const mbArtistId = isMbid(mbRuw) ? mbRuw : null; 104 76 105 `).run( 77 106 f.robots_index ? 1 : 0, … … 93 122 trimOrNull(f.publisher_url, 200), 94 123 trimOrNull(f.publisher_logo, 500), 124 mbArtistId, 125 mbArtistId ? (String(f.mb_artist_name || '').trim().slice(0, 200) || null) : null, 95 126 primary.id, 96 127 ); -
src/routes/admin-sites.js
rf59a46c r013e16c 27 27 import { mediaDir } from '../config/paths.js'; 28 28 import AP from '../services/ActivityPubService.js'; 29 import MusicBrainz from '../services/MusicBrainzService.js';30 29 31 30 … … 323 322 324 323 // ==================== SAVE ==================== 325 /**326 * "Ben jij dit?" -- kandidaten uit MusicBrainz (shaer-mbz).327 *328 * De zoekopdracht draait HIER en niet in de browser: MusicBrainz staat een329 * verzoek per seconde toe per APPLICATIE, en dat is alleen af te dwingen als330 * alles langs een plek gaat. Bovendien eisen ze een User-Agent met contact, en331 * die kan een browser niet zetten.332 *333 * Wij kiezen NIET. Ook niet als er precies een treffer is: een verkeerd geraden334 * MBID zet jouw naam onder andermans werk.335 */336 router.get('/:slug/api/musicbrainz', requireSiteManagerBySlug, async (req, res) => {337 const site = db.prepare('SELECT title, mb_artist_id, mb_artist_name FROM sites WHERE slug = ?').get(req.params.slug);338 if (!site) return res.status(404).json({ error: 'no_site' });339 const q = String(req.query.q || site.title || '').trim();340 if (!q) return res.json({ ok: true, q: '', kandidaten: [] });341 res.json({ ok: true, q, kandidaten: await MusicBrainz.zoekArtiesten(q) });342 });343 344 324 router.post('/:slug/save', requireSiteManagerBySlug, async (req, res) => { 345 325 const site = db.prepare('SELECT id, ap_aliases FROM sites WHERE slug = ?').get(req.params.slug); … … 366 346 // accent: only accept colors from the curated ACCENTS list. Falls back to 367 347 // the orange default if the submitted value isn't recognised. 368 // De MusicBrainz-koppeling (shaer-mbz). Alleen een echte MBID komt de kolom369 // in: zonder deze zeef sluipt er een hele URL of een handle in het veld dat370 // straks naar buiten gaat. Leeg is een geldige keuze -- dat is ontkoppelen.371 const mbRuw = String(f.mb_artist_id || '').trim().toLowerCase();372 const mbArtistId = MusicBrainz.isMbid(mbRuw) ? mbRuw : null;373 374 348 const accent = ThemeService.validateAccent(f.accent) || '#e8b04b'; 375 349 … … 381 355 profile_links = ?, 382 356 ap_aliases = ?, 383 mb_artist_id = ?, mb_artist_name = ?,384 357 is_public = ?, robots_index = ?, require_login_to_comment = ?, 385 358 enable_audio_player = ?, … … 401 374 profileLinksJson, 402 375 apAliasesJson, 403 mbArtistId,404 mbArtistId ? (String(f.mb_artist_name || '').trim().slice(0, 200) || null) : null,405 376 f.is_public ? 1 : 0, 406 377 f.robots_index ? 1 : 0,
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)