Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 7x 7x 7x 7x 7x 5x 5x 1x 1x 4x 1x 1x 3x 1x 1x 2x 2x 2x 2x 1x 1x 1x 7x 10x 10x 1x 1x 9x 9x 9x 9x 9x 7x 7x | import { Request, Response, NextFunction } from "express";
import { DependencyInjector } from "../../dependencyInjector";
import { injectables } from "../../core/types/injectables";
import GoogleOAuth2IdentifiersFactory from "../../googleOAuth2/factories/googleOAuth2IdentifiersFactory";
import { ResponseExtensions } from "../../core/extensions/responseExtensions";
import GoogleOAuth2ClientProvider from "../../googleOAuth2/providers/googleOAuth2ClientProvider";
const redirect = async (req: Request, res: Response) => {
const { client_id, client_secret, redirect_uri, code } = req.body;
if(client_id === undefined || client_secret === undefined || redirect_uri === undefined) {
ResponseExtensions.unauthorized(res, "No credentials provided");
return;
}
if (client_id !== process.env.GOOGLE_OAUTH2_CLIENT_ID || client_secret !== process.env.GOOGLE_OAUTH2_CLIENT_SECRET) {
ResponseExtensions.unauthorized(res, "Mismatched credentials");
return;
}
if(code === undefined) {
ResponseExtensions.forbidden(res, "No authorization code provided");
return;
}
const identifiers = GoogleOAuth2IdentifiersFactory.create({ redirectUri: String(redirect_uri) });
try {
const googleOAuth2ClientProvider = await DependencyInjector.Singleton.generateGmailServiceAsync<GoogleOAuth2ClientProvider>(injectables.GoogleOAuth2ClientProviderGenerator, identifiers);
const tokens = await googleOAuth2ClientProvider.tryAuthorizeAsync(String(code));
ResponseExtensions.ok(res, tokens);
} catch(ex) {
const error = ex as Error;
ResponseExtensions.internalError(res, error.message ?? ex);
}
};
const protect = async (req: Request, res: Response, next: NextFunction) => {
const authHeader = req.get('Authorization');
if (authHeader === undefined) {
ResponseExtensions.unauthorized(res, "No access token provided");
return;
}
const accessToken = authHeader.replace('Bearer ', '');
const refreshToken = req.get('X-Refresh-Token');
const identifiers = GoogleOAuth2IdentifiersFactory.create({ accessToken, refreshToken });
res.locals.googleOAuth2Identifiers = identifiers;
return next();
};
export {
redirect,
protect,
} |