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
4520b9e4ba
commit
c9abad3e13
2 changed files with 20 additions and 0 deletions
|
|
@ -101,6 +101,15 @@ def _account_redirect(status: str) -> RedirectResponse:
|
||||||
|
|
||||||
|
|
||||||
# --- routes ------------------------------------------------------------------
|
# --- routes ------------------------------------------------------------------
|
||||||
|
@router.get("/discord/config")
|
||||||
|
async def discord_config():
|
||||||
|
"""Whether Discord account-linking is configured on this server. The account
|
||||||
|
menu uses it to show the "Link Discord" entry only when linking will actually
|
||||||
|
work — so an unconfigured server surfaces no dead-end Discord UI, and enabling
|
||||||
|
it later (setting the OAuth env vars) makes the entry appear on its own."""
|
||||||
|
return {"enabled": enabled()}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/discord/link/start")
|
@router.get("/discord/link/start")
|
||||||
async def link_start(request: Request, user=Depends(current_active_user)):
|
async def link_start(request: Request, user=Depends(current_active_user)):
|
||||||
if not enabled():
|
if not enabled():
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,17 @@ def test_state_is_secret_dependent(monkeypatch):
|
||||||
|
|
||||||
# --- routes ------------------------------------------------------------------
|
# --- routes ------------------------------------------------------------------
|
||||||
|
|
||||||
|
def test_config_reports_enabled_state(monkeypatch):
|
||||||
|
c = TestClient(appmod.app)
|
||||||
|
monkeypatch.setattr(dl, "CLIENT_ID", "")
|
||||||
|
monkeypatch.setattr(dl, "CLIENT_SECRET", "")
|
||||||
|
r = c.get(f"{V2}/discord/config") # no auth required
|
||||||
|
assert r.status_code == 200 and r.json() == {"enabled": False}
|
||||||
|
monkeypatch.setattr(dl, "CLIENT_ID", "app123")
|
||||||
|
monkeypatch.setattr(dl, "CLIENT_SECRET", "secret456")
|
||||||
|
assert c.get(f"{V2}/discord/config").json() == {"enabled": True}
|
||||||
|
|
||||||
|
|
||||||
def test_link_requires_auth():
|
def test_link_requires_auth():
|
||||||
c = TestClient(appmod.app)
|
c = TestClient(appmod.app)
|
||||||
assert c.get(f"{V2}/discord/link/start", follow_redirects=False).status_code == 401
|
assert c.get(f"{V2}/discord/link/start", follow_redirects=False).status_code == 401
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue