import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { AuthProvider, authProviderCheck, throwHTTPErr } from '../helper'; import { Observable } from 'rxjs'; import { AUTH_PROVIDER_NOT_SPECIFIED } from 'src/errors'; @Injectable() export class GithubSSOGuard extends AuthGuard('github') implements CanActivate { canActivate( context: ExecutionContext, ): boolean | Promise | Observable { if (!authProviderCheck(AuthProvider.GITHUB)) throwHTTPErr({ message: AUTH_PROVIDER_NOT_SPECIFIED, statusCode: 404 }); return super.canActivate(context); } getAuthenticateOptions(context: ExecutionContext) { const req = context.switchToHttp().getRequest(); return { state: { redirect_uri: req.query.redirect_uri, }, }; } }