Show 'Link Discord' only when Discord linking is configured (#213)
The account menu offered 'Link Discord' to every signed-in user even on a server with no Discord OAuth app configured, where it dead-ends (the start route 303-bounces to /alerts). Add GET /api/v2/discord/config reporting whether linking is enabled, and have the menu render the entry only when it is. On a server without Discord set up nothing surfaces; setting the OAuth env vars later makes the entry appear on its own — no code change needed to turn it on.
This commit is contained in:
parent
6e41d0b692
commit
bbabf9e8f9
1 changed files with 13 additions and 1 deletions
|
|
@ -6,6 +6,8 @@
|
||||||
// every page the way units.js is (imported by each page's entry module).
|
// every page the way units.js is (imported by each page's entry module).
|
||||||
|
|
||||||
let currentUser = null; // {id, email, display_name} or null
|
let currentUser = null; // {id, email, display_name} or null
|
||||||
|
let discordEnabled = false; // is Discord linking configured on the server?
|
||||||
|
let discordChecked = false; // have we asked yet? (once per page load)
|
||||||
const authCbs = []; // notified on login/logout so pages can re-gate
|
const authCbs = []; // notified on login/logout so pages can re-gate
|
||||||
|
|
||||||
// The app's base path (e.g. "/thermograph"), derived from this module's own URL
|
// The app's base path (e.g. "/thermograph"), derived from this module's own URL
|
||||||
|
|
@ -59,6 +61,16 @@ async function refreshUser() {
|
||||||
const res = await apiFetch("api/v2/users/me");
|
const res = await apiFetch("api/v2/users/me");
|
||||||
currentUser = res.ok ? await res.json() : null;
|
currentUser = res.ok ? await res.json() : null;
|
||||||
} catch (e) { currentUser = null; }
|
} catch (e) { currentUser = null; }
|
||||||
|
// Learn once whether Discord linking is configured, so the account menu only
|
||||||
|
// offers "Link Discord" when it will actually work (checked lazily, and only
|
||||||
|
// for a signed-in user — the menu never shows it to anyone else).
|
||||||
|
if (currentUser && !discordChecked) {
|
||||||
|
discordChecked = true;
|
||||||
|
try {
|
||||||
|
const r = await apiFetch("api/v2/discord/config");
|
||||||
|
if (r.ok) discordEnabled = (await r.json()).enabled === true;
|
||||||
|
} catch (e) { /* leave it hidden */ }
|
||||||
|
}
|
||||||
return currentUser;
|
return currentUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -304,7 +316,7 @@ function renderHeader() {
|
||||||
${currentUser.discord_id
|
${currentUser.discord_id
|
||||||
? `<button type="button" class="acct-pop-link acct-discord-dm">${currentUser.discord_dm ? "Discord alerts: on" : "Discord alerts: off"}</button>`
|
? `<button type="button" class="acct-pop-link acct-discord-dm">${currentUser.discord_dm ? "Discord alerts: on" : "Discord alerts: off"}</button>`
|
||||||
+ '<button type="button" class="acct-pop-link acct-discord-unlink">Unlink Discord</button>'
|
+ '<button type="button" class="acct-pop-link acct-discord-unlink">Unlink Discord</button>'
|
||||||
: `<a href="${APP_BASE}/api/v2/discord/link/start" class="acct-pop-link">Link Discord</a>`}
|
: (discordEnabled ? `<a href="${APP_BASE}/api/v2/discord/link/start" class="acct-pop-link">Link Discord</a>` : "")}
|
||||||
<button type="button" class="acct-pop-link acct-signout">Sign out</button>
|
<button type="button" class="acct-pop-link acct-signout">Sign out</button>
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue