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/views/pages/admin-settings.ejs

    r221a209 r2248cd2  
    6363  </section>
    6464  <% } %>
     65
     66  <%# Google-login voor luisteraars (reageren) — per-site eigen Google-client. %>
     67  <section class="set-card" style="margin-top:1rem">
     68    <h2>Google-login (luisteraars)</h2>
     69    <p class="set-help">Laat bezoekers met Google inloggen om te reageren — met je <strong>eigen</strong>
     70      Google Cloud-client. Maak er een aan op
     71      <a href="https://console.cloud.google.com/apis/credentials" target="_blank" rel="noopener">console.cloud.google.com</a>
     72      (OAuth client-ID, type "Web application").
     73      <% if (google && google.configured) { %><strong>Status: ingesteld&nbsp;✓</strong><% } else { %>Nog niet ingesteld.<% } %></p>
     74
     75    <% if (google && google.redirectUri) { %>
     76      <p class="set-help" style="margin-bottom:.7rem">Zet deze <strong>exacte</strong> redirect-URI in je Google-client
     77        (Authorized redirect URIs):<br><code style="user-select:all"><%= google.redirectUri %></code></p>
     78    <% } else { %>
     79      <p class="set-help" style="color:var(--accent)">Stel eerst <code>PUBLIC_BASE_URL</code> in — daar wordt de redirect-URI van afgeleid.</p>
     80    <% } %>
     81
     82    <form method="post" action="/admin/settings/google" class="set-form">
     83      <label class="set-field">
     84        <span>Client ID</span>
     85        <input type="text" name="google_client_id" value="<%= google ? google.clientId : '' %>" placeholder="123-abc.apps.googleusercontent.com" autocomplete="off">
     86      </label>
     87      <label class="set-field">
     88        <span>Client Secret <% if (google && google.secretSet) { %><small style="font-weight:400">— ingesteld; leeg laten = ongewijzigd</small><% } %></span>
     89        <input type="password" name="google_client_secret" placeholder="<%= (google && google.secretSet) ? '•••••••• (ingesteld)' : 'GOCSPX-…' %>" autocomplete="off">
     90      </label>
     91      <div style="display:flex; gap:.5rem; flex-wrap:wrap">
     92        <button type="submit" class="btn btn-primary">Opslaan</button>
     93        <% if (google && (google.clientId || google.secretSet)) { %>
     94          <button type="submit" name="clear" value="1" class="btn">Loskoppelen</button>
     95        <% } %>
     96      </div>
     97    </form>
     98    <% if (typeof premiumEnabled !== 'undefined' && premiumEnabled && !(premium && premium.premium)) { %>
     99      <p class="set-help" style="margin-top:.7rem; color:var(--accent)">Premium-laag staat aan zonder Patreon — de Google-knop blijft verborgen tot premium ontgrendeld is.</p>
     100    <% } %>
     101  </section>
    65102
    66103  <% if (tenancy === 'hub') { %>
Note: See TracChangeset for help on using the changeset viewer.