Changeset 2248cd2 in Klonkt for src/config/google.js


Ignore:
Timestamp:
06/16/2026 10:28:54 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
e2a8e31
Parents:
221a209
Message:

Google login configurable in-app: Admin → Settings card (no .env required)

config/google.js now reads Client ID/Secret from app_settings (env = fallback),
dynamically (no restart needed). Redirect URI derived from PUBLIC_BASE_URL.
New "Google login (listeners)" card shows the redirect URI to register + fields
for Client ID/Secret + a disconnect option. Self-hosters no longer need to
edit .env.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/config/google.js

    r221a209 r2248cd2  
    11// Google OAuth2 voor LUISTERAARS (reageren). Per-instance: de self-hoster zet
    2 // z'n EIGEN Google-client in .env. Zo hangt elke site aan z'n eigen Google Cloud
    3 // project — geen centrale afhankelijkheid, geen gedeelde aansprakelijkheid.
     2// z'n EIGEN Google-client. Zo hangt elke site aan z'n eigen Google Cloud project
     3// — geen centrale afhankelijkheid, geen gedeelde aansprakelijkheid.
    44//
    5 // Optioneel: staat dit niet ingesteld, dan is er simpelweg geen "Login met
    6 // Google"-knop en blijft de rest van de site werken. Google-login geeft NOOIT
    7 // beheerrechten — beheer gaat via het wachtwoord-account.
     5// Config-bron (in deze volgorde): app_settings (ingesteld via Beheer → Instellingen),
     6// anders de env-vars. Niet ingesteld → geen "Login met Google"-knop; de rest van
     7// de site werkt door. Google-login geeft NOOIT beheerrechten.
    88//
    9 // Config via env:
    10 //   GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
    11 //   GOOGLE_REDIRECT_URI = https://<dit-domein>/auth/google/callback
     9// De redirect-URI wordt afgeleid van PUBLIC_BASE_URL (<base>/auth/google/callback),
     10// of expliciet via GOOGLE_REDIRECT_URI. Die exacte URL moet in Google Cloud staan.
    1211
    13 const CLIENT_ID = process.env.GOOGLE_CLIENT_ID || '';
    14 const CLIENT_SECRET = process.env.GOOGLE_CLIENT_SECRET || '';
    15 const REDIRECT_URI = process.env.GOOGLE_REDIRECT_URI || '';
     12import { getSetting } from '../services/SettingsService.js';
    1613
    1714const AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';
     
    1916const USERINFO_URL = 'https://openidconnect.googleapis.com/v1/userinfo';
    2017
     18// Dynamisch lezen (UI-wijziging werkt zonder herstart). app_settings wint, env = fallback.
     19function clientId() {
     20  return getSetting('google_client_id', '') || process.env.GOOGLE_CLIENT_ID || '';
     21}
     22function clientSecret() {
     23  return getSetting('google_client_secret', '') || process.env.GOOGLE_CLIENT_SECRET || '';
     24}
     25export function redirectUri() {
     26  if (process.env.GOOGLE_REDIRECT_URI) return process.env.GOOGLE_REDIRECT_URI;
     27  const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
     28  return base ? `${base}/auth/google/callback` : '';
     29}
     30
     31export function currentClientId() { return clientId(); } // niet-geheim, voor het formulier
     32export function clientSecretSet() { return !!clientSecret(); }
    2133export function googleConfigured() {
    22   return !!(CLIENT_ID && CLIENT_SECRET && REDIRECT_URI);
     34  return !!(clientId() && clientSecret() && redirectUri());
    2335}
    2436
    2537export function authorizeUrl(state) {
    2638  const p = new URLSearchParams({
    27     client_id: CLIENT_ID,
    28     redirect_uri: REDIRECT_URI,
     39    client_id: clientId(),
     40    redirect_uri: redirectUri(),
    2941    response_type: 'code',
    3042    scope: 'openid email profile',
     
    3951  const body = new URLSearchParams({
    4052    code,
    41     client_id: CLIENT_ID,
    42     client_secret: CLIENT_SECRET,
    43     redirect_uri: REDIRECT_URI,
     53    client_id: clientId(),
     54    client_secret: clientSecret(),
     55    redirect_uri: redirectUri(),
    4456    grant_type: 'authorization_code',
    4557  });
Note: See TracChangeset for help on using the changeset viewer.