mirror of
https://github.com/ToolJet/ToolJet
synced 2026-05-24 09:28:31 +00:00
* Initial commit * git auth * git sso * Git sso * Git Oauth rebase * review comments * added email validation * improvement * Package lock revert * E2E test case fix * fix data population in migration * Supress initial error thrown by google * Fix * e2e test cases * added e2e test cases * isValidDomain improvement * e2e test cases fix Co-authored-by: Akshay Sasidharan <akshaysasidharan93@gmail.com>
34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import { OAuth2Client, TokenPayload } from 'google-auth-library';
|
|
import UserResponse from './models/user_response';
|
|
|
|
@Injectable()
|
|
export class GoogleOAuthService {
|
|
constructor(private readonly configService: ConfigService) {
|
|
this.clientId = this.configService.get<string>('SSO_GOOGLE_OAUTH2_CLIENT_ID');
|
|
this.client = new OAuth2Client(this.clientId);
|
|
}
|
|
private readonly client: OAuth2Client;
|
|
private readonly clientId: string;
|
|
|
|
#extractDetailsFromPayload(payload: TokenPayload): UserResponse {
|
|
const email = payload.email;
|
|
const userSSOId = payload.sub;
|
|
const domain = payload.hd;
|
|
|
|
const words = payload.name?.split(' ');
|
|
const firstName = words?.[0] || '';
|
|
const lastName = words?.length > 1 ? words[words.length - 1] : '';
|
|
return { userSSOId, firstName, lastName, email, domain, sso: 'google' };
|
|
}
|
|
|
|
async signIn(token: string): Promise<UserResponse> {
|
|
const ticket = await this.client.verifyIdToken({
|
|
idToken: token,
|
|
audience: this.clientId,
|
|
});
|
|
const payload = ticket.getPayload();
|
|
return this.#extractDetailsFromPayload(payload);
|
|
}
|
|
}
|