in src/index.ts [196:241]
async handle(event: CloudFrontRequestEvent) {
this._logger.debug({ msg: 'Handling Lambda@Edge event', event });
const { request } = event.Records[0].cf;
const requestParams = parse(request.querystring);
const cfDomain = request.headers.host[0].value;
const redirectURI = `https://${cfDomain}`;
try {
const token = this._getIdTokenFromCookie(request.headers.cookie);
this._logger.debug({ msg: 'Verifying token...', token });
const user = await this._jwtVerifier.verify(token);
this._logger.info({ msg: 'Forwarding request', path: request.uri, user });
return request;
} catch (err) {
this._logger.debug("User isn't authenticated: %s", err);
if (requestParams.code) {
return this._fetchTokensFromCode(redirectURI, requestParams.code)
.then(tokens => this._getRedirectResponse(tokens, cfDomain, requestParams.state));
} else {
let redirectPath = request.uri;
if (request.querystring && request.querystring !== '') {
redirectPath += encodeURIComponent('?' + request.querystring);
}
const userPoolUrl = `https://${this._userPoolDomain}/authorize?redirect_uri=${redirectURI}&response_type=code&client_id=${this._userPoolAppId}&state=${redirectPath}`;
this._logger.debug(`Redirecting user to Cognito User Pool URL ${userPoolUrl}`);
return {
status: 302,
headers: {
'location': [{
key: 'Location',
value: userPoolUrl,
}],
'cache-control': [{
key: 'Cache-Control',
value: 'no-cache, no-store, max-age=0, must-revalidate',
}],
'pragma': [{
key: 'Pragma',
value: 'no-cache',
}],
},
};
}
}
}