← 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 →