From 06de428e61c08b944a15b963179720b0466750c7 Mon Sep 17 00:00:00 2001 From: alma Date: Fri, 2 May 2025 09:49:32 +0200 Subject: [PATCH] courrier msft oauth --- lib/services/email-service.ts | 88 ++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/lib/services/email-service.ts b/lib/services/email-service.ts index 67ddc674..a0e54298 100644 --- a/lib/services/email-service.ts +++ b/lib/services/email-service.ts @@ -34,10 +34,10 @@ interface EmailCredentialsExtended extends EmailCredentials { // Define the extended MailCredentials type that includes OAuth fields interface MailCredentialsWithOAuth extends MailCredentials { - use_oauth?: boolean; - access_token?: string | null; - refresh_token?: string | null; - token_expiry?: Date | null; + useOAuth?: boolean; + accessToken?: string | null; + refreshToken?: string | null; + tokenExpiry?: Date | null; } // Types specific to this service @@ -277,38 +277,40 @@ export async function getImapConnection( } // Map database fields to our credential format - credentials = { - email: dbCredentials.email, - password: dbCredentials.password, - host: dbCredentials.host, - port: dbCredentials.port, - secure: dbCredentials.secure, - smtp_host: dbCredentials.smtp_host || undefined, - smtp_port: dbCredentials.smtp_port || undefined, - smtp_secure: dbCredentials.smtp_secure ?? false, - display_name: dbCredentials.display_name || undefined, - color: dbCredentials.color || undefined, + if (dbCredentials) { + credentials = { + email: dbCredentials.email, + password: dbCredentials.password || '', + host: dbCredentials.host, + port: dbCredentials.port, + secure: dbCredentials.secure, + smtp_host: dbCredentials.smtp_host || undefined, + smtp_port: dbCredentials.smtp_port || undefined, + smtp_secure: dbCredentials.smtp_secure ?? false, + display_name: dbCredentials.display_name || undefined, + color: dbCredentials.color || undefined, + + // Map OAuth fields - using camelCase field names from the schema + useOAuth: dbCredentials.useOAuth || false, + accessToken: dbCredentials.accessToken || undefined, + refreshToken: dbCredentials.refreshToken || undefined, + tokenExpiry: dbCredentials.tokenExpiry ? dbCredentials.tokenExpiry.getTime() : undefined + } as EmailCredentialsExtended; // Cast to extended type - // Map OAuth fields - useOAuth: dbCredentials.use_oauth || false, - accessToken: dbCredentials.access_token || undefined, - refreshToken: dbCredentials.refresh_token || undefined, - tokenExpiry: dbCredentials.token_expiry ? dbCredentials.token_expiry.getTime() : undefined - }; - - // Log credentials (safely) - console.log('Loaded credentials from database:', { - email: credentials.email, - host: credentials.host, - port: credentials.port, - useOAuth: credentials.useOAuth, - hasAccessToken: !!credentials.accessToken, - hasRefreshToken: !!credentials.refreshToken, - tokenExpiry: credentials.tokenExpiry ? new Date(credentials.tokenExpiry).toISOString() : undefined - }); - - // Cache the credentials for future use - await cacheEmailCredentials(userId, accountId, credentials); + // Log credentials (safely) + console.log('Loaded credentials from database:', { + email: credentials.email, + host: credentials.host, + port: credentials.port, + useOAuth: credentials.useOAuth, + hasAccessToken: !!credentials.accessToken, + hasRefreshToken: !!credentials.refreshToken, + tokenExpiry: credentials.tokenExpiry ? new Date(credentials.tokenExpiry).toISOString() : undefined + }); + + // Cache the credentials for future use + await cacheEmailCredentials(userId, accountId, credentials); + } } // Cast to extended type @@ -559,20 +561,20 @@ export async function saveUserEmailCredentials( smtp_secure: credentials.smtp_secure ?? false, display_name: credentials.display_name || null, color: credentials.color || null, - // Add OAuth fields if present - use_oauth: extendedCreds.useOAuth ?? false, - access_token: extendedCreds.accessToken || null, - refresh_token: extendedCreds.refreshToken || null, - token_expiry: extendedCreds.tokenExpiry ? new Date(extendedCreds.tokenExpiry) : null + // Add OAuth fields if present - using the camelCase names from the schema + useOAuth: extendedCreds.useOAuth ?? false, + accessToken: extendedCreds.accessToken || null, + refreshToken: extendedCreds.refreshToken || null, + tokenExpiry: extendedCreds.tokenExpiry ? new Date(extendedCreds.tokenExpiry) : null }; try { console.log('Saving credentials with OAuth data:', { ...dbCredentials, password: dbCredentials.password ? '***' : null, - access_token: dbCredentials.access_token ? '***' : null, - refresh_token: dbCredentials.refresh_token ? '***' : null, - use_oauth: dbCredentials.use_oauth + accessToken: dbCredentials.accessToken ? '***' : null, + refreshToken: dbCredentials.refreshToken ? '***' : null, + useOAuth: dbCredentials.useOAuth }); // Save to database using the unique constraint on [userId, email]