Migrate connected account model (#2944)
* migrate-connectedAccount-model * update accountOwerId * prevent user from connecting multiple times with the same account * Delete .yarn/releases/yarn-1.22.21.cjs * Delete .yarnrc * modified according to comments * updates
This commit is contained in:
@ -28,21 +28,22 @@ export class GoogleGmailAuthController {
|
||||
@Req() req: GoogleGmailRequest,
|
||||
@Res() res: Response,
|
||||
) {
|
||||
const { user: gmailUser } = req;
|
||||
const { user } = req;
|
||||
|
||||
const { accessToken, refreshToken, transientToken } = gmailUser;
|
||||
const { email, accessToken, refreshToken, transientToken } = user;
|
||||
|
||||
const { workspaceMemberId, workspaceId } =
|
||||
await this.tokenService.verifyTransientToken(transientToken);
|
||||
|
||||
this.googleGmailService.saveConnectedAccount({
|
||||
email,
|
||||
workspaceMemberId: workspaceMemberId,
|
||||
workspaceId: workspaceId,
|
||||
type: 'gmail',
|
||||
provider: 'gmail',
|
||||
accessToken,
|
||||
refreshToken,
|
||||
});
|
||||
|
||||
return res.redirect('http://localhost:3001');
|
||||
return res.redirect('http://localhost:3001/settings/accounts');
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
import { ArgsType, Field } from '@nestjs/graphql';
|
||||
|
||||
import { IsNotEmpty, IsString } from 'class-validator';
|
||||
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
|
||||
|
||||
@ArgsType()
|
||||
export class SaveConnectedAccountInput {
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsEmail()
|
||||
email: string;
|
||||
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
@ -17,7 +22,7 @@ export class SaveConnectedAccountInput {
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
@IsString()
|
||||
type: string;
|
||||
provider: string;
|
||||
|
||||
@Field(() => String)
|
||||
@IsNotEmpty()
|
||||
|
||||
@ -14,8 +14,14 @@ export class GoogleGmailService {
|
||||
async saveConnectedAccount(
|
||||
saveConnectedAccountInput: SaveConnectedAccountInput,
|
||||
) {
|
||||
const { workspaceId, type, accessToken, refreshToken } =
|
||||
saveConnectedAccountInput;
|
||||
const {
|
||||
email,
|
||||
workspaceId,
|
||||
provider,
|
||||
accessToken,
|
||||
refreshToken,
|
||||
workspaceMemberId,
|
||||
} = saveConnectedAccountInput;
|
||||
|
||||
const dataSourceMetadata =
|
||||
await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail(
|
||||
@ -26,8 +32,20 @@ export class GoogleGmailService {
|
||||
dataSourceMetadata,
|
||||
);
|
||||
|
||||
const connectedAccount = await workspaceDataSource?.query(
|
||||
`SELECT * FROM ${dataSourceMetadata.schema}."connectedAccount" WHERE "email" = $1 AND "provider" = $2 AND "accountOwnerId" = $3`,
|
||||
[email, provider, workspaceMemberId],
|
||||
);
|
||||
|
||||
if (connectedAccount.length > 0) {
|
||||
console.log('This account is already connected to your workspace.');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await workspaceDataSource?.query(
|
||||
`INSERT INTO ${dataSourceMetadata.schema}."connectedAccount" ("type", "accessToken", "refreshToken") VALUES ('${type}', '${accessToken}', '${refreshToken}')`,
|
||||
`INSERT INTO ${dataSourceMetadata.schema}."connectedAccount" ("email", "provider", "accessToken", "refreshToken", "accountOwnerId") VALUES ($1, $2, $3, $4, $5)`,
|
||||
[email, provider, accessToken, refreshToken, workspaceMemberId],
|
||||
);
|
||||
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user