From ee979be8059650fe9de3e5762224b796cd5fcd94 Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Nov 23 2015 22:26:32 +0000 Subject: Store login failure error messages in the transaction This will propogate messages up from failed form authentication so they are correctly displayed in a SAML2 transaction for a user with an expired password, for example. The message is wiped after retrieval to ensure that a stale message won't be displayed in the future. https://fedorahosted.org/ipsilon/ticket/69 Signed-off-by: Rob Crittenden --- diff --git a/ipsilon/login/common.py b/ipsilon/login/common.py index ef84e10..4058ca0 100644 --- a/ipsilon/login/common.py +++ b/ipsilon/login/common.py @@ -169,6 +169,8 @@ class LoginManagerBase(ConfigHelper, PluginObject, LoginHelper): def auth_failed(self, trans, message=None): # try with next module next_login = self.next_login() + data = {'message': message} + trans.store(data) if next_login: return self.redirect_to_path(next_login.path, trans) diff --git a/ipsilon/providers/saml2idp.py b/ipsilon/providers/saml2idp.py index 78e7778..f5854d8 100644 --- a/ipsilon/providers/saml2idp.py +++ b/ipsilon/providers/saml2idp.py @@ -110,8 +110,12 @@ class Continue(AuthenticateRequest): if user.is_anonymous: self.debug("User is marked anonymous?!") + message = transdata.get('message') + if message is not None: + data = {'message': None} + self.trans.store(data) # TODO: Return to SP with auth failed error - raise cherrypy.HTTPError(401) + raise cherrypy.HTTPError(401, message) self.debug('Continue auth for %s' % user.name)