ToolJet/server/ee/services/oauth/google_oauth.service.ts
Midhun G S 5000f745b1
Github OAuth integration (#1837)
* 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>
2022-01-27 15:21:17 +05:30

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);
}
}