From 00e58c60cd59882199a7e378416a279de2b5212d Mon Sep 17 00:00:00 2001 From: tobi Date: Thu, 22 May 2025 12:34:39 +0200 Subject: [PATCH] [feature] Add ListenBrainz functionality on the web view (#4184) This pull request adds a very simple ad-hoc ListenBrainz widget to the frontend web view, with progressive enhancement (in all fail states it just falls back to rendering the field as normal). This necessitated adding the ListenBrainz API endpoint to the `connect-src` part of our Content-Security-Policy header. We might want to tweak this to only add that endpoint to `connect-src` for profiles, and then only for profiles that include a ListenBrainz field, but this would require significant dicking about with the middleware, and checks inside the app logic, such that it might not be worthwhile (after all, we control all the scripts right now anyway). Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4184 Co-authored-by: tobi Co-committed-by: tobi --- .../user-settings-listenbrainz-fields.png | Bin 0 -> 34371 bytes .../public/user-settings-listenbrainz.png | Bin 0 -> 35869 bytes docs/user_guide/settings.md | 13 ++ internal/middleware/contentsecuritypolicy.go | 16 +- .../middleware/contentsecuritypolicy_test.go | 12 +- web/source/frontend/index.js | 167 ++++++++++++++++++ 6 files changed, 200 insertions(+), 8 deletions(-) create mode 100644 docs/overrides/public/user-settings-listenbrainz-fields.png create mode 100644 docs/overrides/public/user-settings-listenbrainz.png diff --git a/docs/overrides/public/user-settings-listenbrainz-fields.png b/docs/overrides/public/user-settings-listenbrainz-fields.png new file mode 100644 index 0000000000000000000000000000000000000000..a54f2a232d62f2684c84ab544fc193a22bc4b757 GIT binary patch literal 34371 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 { // stats elements, close it. openStats.removeAttribute("open"); }); + +// Scan for the first ListenBrainz profile field and replace +// its value with currently listening track if available. +// +// ListenBrainz allows a lot of leeway in usernames so be gentle here: +// +// See: +// +// - https://github.com/metabrainz/musicbrainz-server/blob/master/lib/MusicBrainz/Server/Form/Utils.pm#L264-L288 +// - https://regex101.com/r/k5ij9F/1 +const listenbrainzRe = new RegExp(/^https:\/\/listenbrainz\.org\/user\/([^/]+)\/$/, "u"); +let calledListenBrainz = false; +document.querySelectorAll("div#profile-fields dl div.field").forEach((field) => { + // If we called ListenBrainz once + // already this page load, bail. + if (calledListenBrainz) { + return; + } + + const k = field.querySelector("dt"); + if (!k) { + // No
inside this + // field? Weird but OK. + return; + } + + const kText = k.textContent; + if (kText === null) { + // Also strange but + // let's just bail. + return; + } + + // Check if key == "ListenBrainz" (case insensitive). + if (kText.localeCompare("ListenBrainz", undefined, { sensitivity: "base" }) !== 0) { + // Not interested. + return; + } + + // Get the value. + const v = field.querySelector("dd"); + if (!v) { + // No
inside this + // field? Weird but OK. + return; + } + + // Look for an tag inside the
. + const oldAs = v.getElementsByTagName("a"); + if (oldAs.length !== 1) { + // Nothing + // in here. + return; + } + + const oldA = oldAs[0]; + const profileURL = oldA.textContent; + if (!profileURL) { + // Also strange but + // let's just bail. + return; + } + + // We're looking for a listenbrainz URL. + const match = profileURL.match(listenbrainzRe); + if (match.length !== 2) { + // Not a match. + return; + } + const lbUsername = match[1]; + + try { + // MusicBrainz/ListenBrainz is very permissive + // re: usernames so make sure to encode the URI + // when doing the fetch, to avoid any shenanigans. + const apiURL = encodeURI(`https://api.listenbrainz.org/1/user/${lbUsername}/playing-now`); + fetch(apiURL).then(res => { + // Mark that we + // called LB already. + calledListenBrainz = true; + + // Check result... + if (!res.ok) { + throw new Error(`Response status: ${res.status}`); + } + + return res.json(); + }).then(json => { + // Parse out the object. + const payload = json.payload; + if (!payload) { + // Can't do anything + // with no payload. + return; + } + + const listens = payload.listens; + if (!listens || !Array.isArray(listens) || listens.length !== 1) { + // Can't do anything + // with no listens. + return; + } + + const listen = listens[0]; + const trackMetadata = listen.track_metadata; + if (!trackMetadata) { + // Can't do anything + // with no track metadata. + return; + } + + const artistName = trackMetadata.artist_name; + const trackName = trackMetadata.track_name; + if (artistName === undefined || trackName === undefined) { + // Can't display + // this track. + return; + } + + // We can work with this. + // + // Rewrite the existing
with the + // current listening song, and keep the + // link to the user's ListenBrainz profile. + const vNew = document.createElement("dd"); + + // Lil music note icon. + const i = document.createElement("i"); + i.ariaHidden = "true"; + i.className = "fa fa-fw fa-music"; + vNew.appendChild(i); + + vNew.appendChild(document.createTextNode(" Now listening to: ")); + vNew.appendChild(document.createElement("br")); + + // Build the new link, taking + // the href from the old link. + const a = document.createElement("a"); + a.href = oldA.href; + a.rel = "nofollow noreferrer noopener"; + a.target = "_blank"; + + // Add track name in bold. + const trackNameE = document.createElement("b"); + trackNameE.textContent = trackName; + a.appendChild(trackNameE); + + // Add joiner in normal font. + a.appendChild(document.createTextNode(" by ")); + + // Add artist name in bold. + const artistNameE = document.createElement("b"); + artistNameE.textContent = artistName; + a.appendChild(artistNameE); + + // Put the link + // in the definish. + vNew.appendChild(a); + + // Do the replacement. + field.replaceChild(vNew, v); + }); + } catch (error) { + // eslint-disable-next-line no-console + console.error(error.message); + } +});