feat: Indicate to templates if this is part of an auth request

This commit is contained in:
Joachim Van Herwegen
2021-08-13 12:05:22 +02:00
parent cb227d6431
commit f71f8683fc
3 changed files with 29 additions and 17 deletions

View File

@@ -167,8 +167,9 @@ export class IdentityProviderHttpHandler extends HttpHandler {
private async resolveRoute(request: HttpRequest, response: HttpResponse, route: InteractionRoute,
oidcInteraction?: Interaction): Promise<void> {
if (request.method === 'GET') {
// .ejs templates errors on undefined variables
return await this.handleTemplateResponse(response, route.viewTemplate, { errorMessage: '', prefilled: {}});
return await this.handleTemplateResponse(
response, route.viewTemplate, { errorMessage: '', prefilled: {}}, oidcInteraction,
);
}
if (request.method === 'POST') {
@@ -179,7 +180,9 @@ export class IdentityProviderHttpHandler extends HttpHandler {
// Render error in the view
const prefilled = IdpInteractionError.isInstance(error) ? error.prefilled : {};
const errorMessage = createErrorMessage(error);
return await this.handleTemplateResponse(response, route.viewTemplate, { errorMessage, prefilled });
return await this.handleTemplateResponse(
response, route.viewTemplate, { errorMessage, prefilled }, oidcInteraction,
);
}
if (result.type === 'complete') {
@@ -193,15 +196,17 @@ export class IdentityProviderHttpHandler extends HttpHandler {
return await this.interactionCompleter.handleSafe({ ...result.details, request, response });
}
if (result.type === 'response' && route.responseTemplate) {
return await this.handleTemplateResponse(response, route.responseTemplate, result.details);
return await this.handleTemplateResponse(response, route.responseTemplate, result.details, oidcInteraction);
}
}
throw new BadRequestHttpError(`Unsupported request: ${request.method} ${request.url}`);
}
private async handleTemplateResponse(response: HttpResponse, templateFile: string, contents?: NodeJS.Dict<any>):
Promise<void> {
await this.templateHandler.handleSafe({ response, templateFile, contents: contents ?? {}});
private async handleTemplateResponse(response: HttpResponse, templateFile: string, data?: NodeJS.Dict<any>,
oidcInteraction?: Interaction): Promise<void> {
const contents = data ?? {};
contents.authenticating = Boolean(oidcInteraction);
await this.templateHandler.handleSafe({ response, templateFile, contents });
}
/**