[object Object]

← back to George Gmail

remove bogus stevesclaude account from George — theagentabrams@gmail.com (agentabrams) is the real AI account; also exempt /auth/agentabrams from basic auth

2cbc31171dd68de95cfdd780caf52ebaf69929b0 · 2026-05-18 14:33:51 -0700 · Steve Abrams

Files touched

Diff

commit 2cbc31171dd68de95cfdd780caf52ebaf69929b0
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon May 18 14:33:51 2026 -0700

    remove bogus stevesclaude account from George — theagentabrams@gmail.com (agentabrams) is the real AI account; also exempt /auth/agentabrams from basic auth
---
 server.js | 109 +++-----------------------------------------------------------
 1 file changed, 5 insertions(+), 104 deletions(-)

diff --git a/server.js b/server.js
index 34dbf39..aed41dd 100644
--- a/server.js
+++ b/server.js
@@ -59,12 +59,6 @@ const INFO_REFRESH_TOKEN = creds.INFO_REFRESH_TOKEN || process.env.INFO_REFRESH_
 const PERSONAL_REDIRECT_URI = 'http://localhost:9850/oauth2callback';
 const PERSONAL_REFRESH_TOKEN = creds.PERSONAL_REFRESH_TOKEN || process.env.PERSONAL_REFRESH_TOKEN;
 
-// ─── StevesClaude (stevesclaude@gmail.com) Credentials ───
-// Dedicated mailbox for emailing Claude. Reuses GMAIL_CLIENT_ID/SECRET.
-const STEVESCLAUDE_REDIRECT_URI = 'http://localhost:9850/oauth2callback';
-const STEVESCLAUDE_REFRESH_TOKEN = creds.STEVESCLAUDE_REFRESH_TOKEN || process.env.STEVESCLAUDE_REFRESH_TOKEN;
-const STEVESCLAUDE_LOGIN_HINT = creds.STEVESCLAUDE_LOGIN_HINT || process.env.STEVESCLAUDE_LOGIN_HINT || 'stevesclaude@gmail.com';
-
 // ─── Agent Abrams (theagentabrams@gmail.com) Credentials ───
 // Reuses GMAIL_CLIENT_ID/SECRET. Added 2026-05-18 per Steve.
 const AGENTABRAMS_REDIRECT_URI = 'http://localhost:9850/oauth2callback';
@@ -175,29 +169,6 @@ try {
   console.error(`[${AGENT_NAME}] Steve Personal client error: ${e.message}`);
 }
 
-// ─── StevesClaude (stevesclaude@gmail.com) account ───
-let stevesclaudeOauth2Client;
-let stevesclaudeGmail, stevesclaudeTasksApi, stevesclaudeDrive, stevesclaudeDocs, stevesclaudeSheets, stevesclaudeSlides, stevesclaudeCalendar, stevesclaudeForms;
-try {
-  stevesclaudeOauth2Client = new google.auth.OAuth2(GMAIL_CLIENT_ID, GMAIL_CLIENT_SECRET, STEVESCLAUDE_REDIRECT_URI);
-  if (STEVESCLAUDE_REFRESH_TOKEN) {
-    stevesclaudeOauth2Client.setCredentials({ refresh_token: STEVESCLAUDE_REFRESH_TOKEN });
-    stevesclaudeGmail    = google.gmail   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-    stevesclaudeTasksApi = google.tasks   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-    stevesclaudeDrive    = google.drive   ({ version: 'v3', auth: stevesclaudeOauth2Client });
-    stevesclaudeDocs     = google.docs    ({ version: 'v1', auth: stevesclaudeOauth2Client });
-    stevesclaudeSheets   = google.sheets  ({ version: 'v4', auth: stevesclaudeOauth2Client });
-    stevesclaudeSlides   = google.slides  ({ version: 'v1', auth: stevesclaudeOauth2Client });
-    stevesclaudeCalendar = google.calendar({ version: 'v3', auth: stevesclaudeOauth2Client });
-    stevesclaudeForms    = google.forms   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-    console.log(`[${AGENT_NAME}] StevesClaude account initialized (full Workspace)`);
-  } else {
-    console.log(`[${AGENT_NAME}] StevesClaude not configured — visit /auth/stevesclaude to authorize`);
-  }
-} catch (e) {
-  console.error(`[${AGENT_NAME}] StevesClaude client error: ${e.message}`);
-}
-
 // ─── Agent Abrams (theagentabrams@gmail.com) account ───
 let agentabramsOauth2Client;
 let agentabramsGmail, agentabramsTasksApi, agentabramsDrive, agentabramsDocs, agentabramsSheets, agentabramsSlides, agentabramsCalendar, agentabramsForms;
@@ -222,14 +193,13 @@ try {
 }
 
 // ─── Account resolver for per-service API endpoints ───
-// account query/body param: "steve-office" (default), "info", "steve-personal", "stevesclaude", "agentabrams"
+// account query/body param: "steve-office" (default), "info", "steve-personal", "agentabrams"
 function resolveAccount(req) {
   const key = (req.query.account || req.body?.account || 'steve-office').toLowerCase();
   const map = {
     'steve-office':   { label: 'steve@designerwallcoverings.com', oauth: oauth2Client, gmail, tasks: tasksApi, drive, docs, sheets, slides, calendar, forms, refreshToken: GMAIL_REFRESH_TOKEN },
     'info':           { label: 'info@designerwallcoverings.com',  oauth: infoOauth2Client, gmail: infoGmail, tasks: infoTasksApi, drive: infoDrive, docs: infoDocs, sheets: infoSheets, slides: infoSlides, calendar: infoCalendar, forms: infoForms, refreshToken: INFO_REFRESH_TOKEN },
     'steve-personal': { label: 'steveabramsdesigns@gmail.com',    oauth: personalOauth2Client, gmail: personalGmail, tasks: personalTasksApi, drive: personalDrive, docs: personalDocs, sheets: personalSheets, slides: personalSlides, calendar: personalCalendar, forms: personalForms, refreshToken: PERSONAL_REFRESH_TOKEN },
-    'stevesclaude':   { label: STEVESCLAUDE_LOGIN_HINT,           oauth: stevesclaudeOauth2Client, gmail: stevesclaudeGmail, tasks: stevesclaudeTasksApi, drive: stevesclaudeDrive, docs: stevesclaudeDocs, sheets: stevesclaudeSheets, slides: stevesclaudeSlides, calendar: stevesclaudeCalendar, forms: stevesclaudeForms, refreshToken: STEVESCLAUDE_REFRESH_TOKEN },
     'agentabrams':    { label: AGENTABRAMS_LOGIN_HINT,            oauth: agentabramsOauth2Client, gmail: agentabramsGmail, tasks: agentabramsTasksApi, drive: agentabramsDrive, docs: agentabramsDocs, sheets: agentabramsSheets, slides: agentabramsSlides, calendar: agentabramsCalendar, forms: agentabramsForms, refreshToken: AGENTABRAMS_REFRESH_TOKEN },
   };
   return { key, ...(map[key] || {}) };
@@ -252,7 +222,7 @@ app.use(express.json({ limit: '50mb' }));
 
 // ─── Basic Auth (skip health + OAuth callbacks) ───
 app.use((req, res, next) => {
-  const publicPaths = ['/health', '/auth', '/auth/info', '/auth/steve-office', '/auth/steve-personal', '/auth/stevesclaude', '/oauth2callback'];
+  const publicPaths = ['/health', '/auth', '/auth/info', '/auth/steve-office', '/auth/steve-personal', '/auth/agentabrams', '/oauth2callback'];
   if (publicPaths.includes(req.path)) return next();
   const auth = req.headers.authorization;
   if (!auth || !auth.startsWith('Basic ')) {
@@ -274,12 +244,11 @@ const OAUTH_REDIRECT = 'http://localhost:9850/oauth2callback';
 app.get('/auth', (req, res) => {
   // Honor ?account= — dispatch to the matching dedicated re-auth route so
   // each account gets its own oauth client, scopes, login_hint, and state.
-  // Keys match resolveAccount(): steve-office (default), info, steve-personal, stevesclaude.
+  // Keys match resolveAccount(): steve-office (default), info, steve-personal, agentabrams.
   const acct = (req.query.account || 'steve-office').toLowerCase();
   const routes = {
     'info':           '/auth/info',
     'steve-personal': '/auth/steve-personal',
-    'stevesclaude':   '/auth/stevesclaude',
     'agentabrams':    '/auth/agentabrams',
   };
   if (routes[acct]) return res.redirect(routes[acct]);
@@ -303,47 +272,6 @@ app.get('/oauth2callback', async (req, res) => {
     const { code, state } = req.query;
     if (!code) return res.status(400).send('No authorization code received');
 
-    // Route to stevesclaude handler if state=stevesclaude
-    if (state === 'stevesclaude') {
-      const { tokens } = await stevesclaudeOauth2Client.getToken({ code, redirect_uri: STEVESCLAUDE_REDIRECT_URI });
-      stevesclaudeOauth2Client.setCredentials(tokens);
-      stevesclaudeGmail    = google.gmail   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-      stevesclaudeTasksApi = google.tasks   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-      stevesclaudeDrive    = google.drive   ({ version: 'v3', auth: stevesclaudeOauth2Client });
-      stevesclaudeDocs     = google.docs    ({ version: 'v1', auth: stevesclaudeOauth2Client });
-      stevesclaudeSheets   = google.sheets  ({ version: 'v4', auth: stevesclaudeOauth2Client });
-      stevesclaudeSlides   = google.slides  ({ version: 'v1', auth: stevesclaudeOauth2Client });
-      stevesclaudeCalendar = google.calendar({ version: 'v3', auth: stevesclaudeOauth2Client });
-      stevesclaudeForms    = google.forms   ({ version: 'v1', auth: stevesclaudeOauth2Client });
-
-      let msg = '<html><body style="font-family:sans-serif;background:#0f1117;color:#e4e4e7;padding:40px">';
-      msg += '<h2 style="color:#4ade80">StevesClaude Authorized! (Full Google Workspace)</h2>';
-      if (tokens.refresh_token) {
-        msg += `<p><strong>New StevesClaude Refresh Token:</strong></p><code style="background:#1a1d27;padding:10px;display:block;word-break:break-all;border-radius:8px">${tokens.refresh_token}</code>`;
-        console.log(`[${AGENT_NAME}] StevesClaude refresh token obtained: ${tokens.refresh_token.substring(0, 20)}...`);
-        try {
-          let envContent = fs.readFileSync(ENV_PATH, 'utf8');
-          if (envContent.includes('STEVESCLAUDE_REFRESH_TOKEN=')) {
-            envContent = envContent.replace(/STEVESCLAUDE_REFRESH_TOKEN=.*/, `STEVESCLAUDE_REFRESH_TOKEN=${tokens.refresh_token}`);
-          } else {
-            envContent += `\n# StevesClaude (stevesclaude@gmail.com) OAuth Token\nSTEVESCLAUDE_REFRESH_TOKEN=${tokens.refresh_token}\n`;
-          }
-          fs.writeFileSync(ENV_PATH, envContent);
-          msg += '<p style="color:#4ade80">Token auto-saved to central .env!</p>';
-          audit('stevesclaude', 'oauth-authorized', { scopes: FULL_WORKSPACE_SCOPES.length });
-        } catch (e) {
-          msg += `<p style="color:#f87171">Could not auto-save: ${e.message}</p>`;
-        }
-      }
-      try {
-        const profile = await stevesclaudeGmail.users.getProfile({ userId: 'me' });
-        msg += `<p style="color:#60a5fa">Connected as: <strong>${profile.data.emailAddress}</strong></p>`;
-      } catch {}
-      msg += '<p style="color:#a3a3a3">You can close this tab. Restart george-gmail to load the new token persistently.</p>';
-      msg += '<p><a href="/" style="color:#60a5fa">Go to Dashboard</a></p></body></html>';
-      return res.send(msg);
-    }
-
     // Route to agentabrams handler if state=agentabrams
     if (state === 'agentabrams') {
       const { tokens } = await agentabramsOauth2Client.getToken({ code, redirect_uri: AGENTABRAMS_REDIRECT_URI });
@@ -531,33 +459,6 @@ app.get('/api/auth-url/info', (req, res) => {
 
 // oauth2callback-info is handled by the unified /oauth2callback via state=info
 
-// ─── StevesClaude OAuth Authorization Flow ───
-app.get('/auth/stevesclaude', (req, res) => {
-  if (!stevesclaudeOauth2Client) return res.status(500).send('StevesClaude OAuth client not configured');
-  const url = stevesclaudeOauth2Client.generateAuthUrl({
-    access_type: 'offline',
-    scope: FULL_WORKSPACE_SCOPES,
-    prompt: 'consent',
-    redirect_uri: STEVESCLAUDE_REDIRECT_URI,
-    login_hint: STEVESCLAUDE_LOGIN_HINT,
-    state: 'stevesclaude',
-  });
-  res.redirect(url);
-});
-
-app.get('/api/auth-url/stevesclaude', (req, res) => {
-  if (!stevesclaudeOauth2Client) return res.status(500).json({ error: 'StevesClaude OAuth client not configured' });
-  const url = stevesclaudeOauth2Client.generateAuthUrl({
-    access_type: 'offline',
-    scope: FULL_WORKSPACE_SCOPES,
-    prompt: 'consent',
-    redirect_uri: STEVESCLAUDE_REDIRECT_URI,
-    login_hint: STEVESCLAUDE_LOGIN_HINT,
-    state: 'stevesclaude',
-  });
-  res.json({ authUrl: url, account: STEVESCLAUDE_LOGIN_HINT, scopes: FULL_WORKSPACE_SCOPES });
-});
-
 // ─── Agent Abrams OAuth Authorization Flow ───
 app.get('/auth/agentabrams', (req, res) => {
   if (!agentabramsOauth2Client) return res.status(500).send('Agent Abrams OAuth client not configured');
@@ -807,10 +708,10 @@ app.get('/api/auth-url', (req, res) => {
 // ─── Basic Auth (exempt health + OAuth routes) ───
 app.use((req, res, next) => {
   const publicApiPaths = [
-    '/health', '/api/health', '/auth', '/auth/info', '/auth/steve-office', '/auth/steve-personal', '/auth/stevesclaude',
+    '/health', '/api/health', '/auth', '/auth/info', '/auth/steve-office', '/auth/steve-personal', '/auth/agentabrams',
     '/oauth2callback', '/oauth2callback-info',
     '/api/exchange-code', '/api/exchange-code/info', '/api/exchange-code/steve-personal',
-    '/api/auth-url', '/api/auth-url/info', '/api/auth-url/steve-personal', '/api/auth-url/stevesclaude'
+    '/api/auth-url', '/api/auth-url/info', '/api/auth-url/steve-personal', '/api/auth-url/agentabrams'
   ];
   if (publicApiPaths.includes(req.path)) return next();
   const auth = req.headers.authorization;

← 23979b0 Add agentabrams (theagentabrams@gmail.com) as 5th george acc  ·  back to George Gmail  ·  Make /api/profile honor ?account= param like the other 31 ro 02ef28b →