From 8c94bf0f13ed0cac351a80025602ac430a6e9309 Mon Sep 17 00:00:00 2001 From: Maxime Besson Date: Fri, 27 Mar 2020 19:08:23 +0100 Subject: [PATCH] Allow portal JSON responses to include a rendered HTML error block (#2110) --- lemonldap-ng-portal/MANIFEST | 1 + .../lib/Lemonldap/NG/Portal/Main/Request.pm | 4 ++++ .../lib/Lemonldap/NG/Portal/Main/Run.pm | 16 +++++++++++++--- .../site/templates/bootstrap/errormsg.tpl | 7 +++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 lemonldap-ng-portal/site/templates/bootstrap/errormsg.tpl diff --git a/lemonldap-ng-portal/MANIFEST b/lemonldap-ng-portal/MANIFEST index 2f8ee2573..f5d76e51e 100644 --- a/lemonldap-ng-portal/MANIFEST +++ b/lemonldap-ng-portal/MANIFEST @@ -392,6 +392,7 @@ site/templates/bootstrap/customLoginFooter.tpl site/templates/bootstrap/customLoginHeader.tpl site/templates/bootstrap/decryptvalue.tpl site/templates/bootstrap/error.tpl +site/templates/bootstrap/errormsg.tpl site/templates/bootstrap/ext2fcheck.tpl site/templates/bootstrap/footer.tpl site/templates/bootstrap/globallogout.tpl diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm index f2916c541..63e85c388 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm @@ -80,6 +80,10 @@ has captcha => ( is => 'rw' ); # Token has token => ( is => 'rw' ); +# Whether or not to include a HTML render of the error message +# in error responses +has wantErrorRender => ( is => 'rw' ); + # Error type sub error_type { my $req = shift; diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm index 52216c5b7..b348191de 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm @@ -260,9 +260,19 @@ sub do { if ( !$self->conf->{noAjaxHook} and $req->wantJSON ) { $self->logger->debug('Processing to JSON response'); if ( ( $err > 0 and !$req->id ) or $err eq PE_SESSIONNOTGRANTED ) { + my $json = { result => 0, error => $err }; + if ( $req->wantErrorRender ) { + $json->{html} = $self->loadTemplate( + $req, + 'errormsg', + params => { + AUTH_ERROR => $err, + AUTH_ERROR_TYPE => $req->error_type, + } + ); + } return $self->sendJSONresponse( - $req, - { result => 0, error => $err }, + $req, $json, code => 401, headers => [ 'WWW-Authenticate' => "SSO " . $self->conf->{portal}, @@ -1045,7 +1055,7 @@ sub registerLogin { } my $history = $req->sessionInfo->{_loginHistory} ||= {}; - my $type = ( $req->authResult > 0 ? 'failed' : 'success' ) . 'Login'; + my $type = ( $req->authResult > 0 ? 'failed' : 'success' ) . 'Login'; $history->{$type} ||= []; $self->logger->debug("Current login saved into $type"); diff --git a/lemonldap-ng-portal/site/templates/bootstrap/errormsg.tpl b/lemonldap-ng-portal/site/templates/bootstrap/errormsg.tpl new file mode 100644 index 000000000..70530cb53 --- /dev/null +++ b/lemonldap-ng-portal/site/templates/bootstrap/errormsg.tpl @@ -0,0 +1,7 @@ + +
alert">"> + + seconds. + +
+