Skip to content

Commit e66bfcb

Browse files
committed
Handle more generic error cases
Signed-off-by: Ivan Kanakarakis <[email protected]>
1 parent d7adb92 commit e66bfcb

File tree

2 files changed

+41
-31
lines changed

2 files changed

+41
-31
lines changed

src/satosa/base.py

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from satosa import util
1111
from satosa.response import Redirect
1212
from satosa.response import BadRequest
13+
from satosa.response import NotFound
1314
from .context import Context
1415
from .exception import SATOSAError
1516
from .exception import SATOSAAuthenticationError
@@ -268,7 +269,11 @@ def run(self, context):
268269
}
269270
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
270271
logger.error(logline)
271-
return BadRequest(e.error)
272+
generic_error_url = self.config.get("ERROR_URL")
273+
if generic_error_url:
274+
return Redirect(generic_error_url)
275+
else:
276+
return BadRequest(e.error)
272277
except SATOSAMissingStateError as e:
273278
msg = {
274279
"message": "Missing SATOSA State",
@@ -277,8 +282,9 @@ def run(self, context):
277282
}
278283
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
279284
logger.error(logline)
280-
if self.config.get("ERROR_URL"):
281-
return Redirect(self.config.get("ERROR_URL"))
285+
generic_error_url = self.config.get("ERROR_URL")
286+
if generic_error_url:
287+
return Redirect(generic_error_url)
282288
else:
283289
raise
284290
except SATOSAAuthenticationFlowError as e:
@@ -289,30 +295,43 @@ def run(self, context):
289295
}
290296
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
291297
logger.error(logline)
292-
if self.config.get("ERROR_URL"):
293-
return Redirect(self.config.get("ERROR_URL"))
298+
generic_error_url = self.config.get("ERROR_URL")
299+
if generic_error_url:
300+
return Redirect(generic_error_url)
294301
else:
295302
raise
296-
except SATOSANoBoundEndpointError:
297-
raise
303+
except SATOSANoBoundEndpointError as e:
304+
msg = str(e)
305+
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
306+
logger.error(logline)
307+
return NotFound("The Service or Identity Provider you requested could not be found.")
298308
except SATOSAError:
299309
msg = "Uncaught SATOSA error"
300310
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
301-
logger.error(logline, exc_info=True)
302-
raise
303-
except UnknownSystemEntity as err:
304-
msg = "configuration error: unknown system entity " + str(err)
311+
logger.error(logline)
312+
generic_error_url = self.config.get("ERROR_URL")
313+
if generic_error_url:
314+
return Redirect(generic_error_url)
315+
else:
316+
raise
317+
except UnknownSystemEntity as e:
318+
msg = f"Configuration error: unknown system entity: {e}"
305319
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
306-
logger.error(logline, exc_info=False)
307-
raise
308-
except Exception as err:
320+
logger.error(logline)
321+
generic_error_url = self.config.get("ERROR_URL")
322+
if generic_error_url:
323+
return Redirect(generic_error_url)
324+
else:
325+
raise
326+
except Exception as e:
309327
msg = "Uncaught exception"
310328
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
311-
logger.error(logline, exc_info=True)
312-
if self.config.get("ERROR_URL"):
313-
return Redirect(self.config.get("ERROR_URL"))
329+
logger.error(logline)
330+
generic_error_url = self.config.get("ERROR_URL")
331+
if generic_error_url:
332+
return Redirect(generic_error_url)
314333
else:
315-
raise SATOSAUnknownError("Unknown error") from err
334+
raise SATOSAUnknownError("Unknown error") from e
316335
return resp
317336

318337

src/satosa/proxy_server.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77
from cookies_samesite_compat import CookiesSameSiteCompatMiddleware
88

99
import satosa
10-
import satosa.logging_util as lu
1110

1211
from .base import SATOSABase
1312
from .context import Context
14-
from .response import ServiceError, NotFound
15-
from .routing import SATOSANoBoundEndpointError
16-
from saml2.s_utils import UnknownSystemEntity
13+
from .response import ServiceError
14+
from .response import NotFound
15+
1716

1817
logger = logging.getLogger(__name__)
1918

@@ -160,16 +159,8 @@ def __call__(self, environ, start_response, debug=False):
160159
if isinstance(resp, Exception):
161160
raise resp
162161
return resp(environ, start_response)
163-
except SATOSANoBoundEndpointError as e:
164-
msg = str(e)
165-
logline = lu.LOG_FMT.format(id=lu.get_session_id(context.state), message=msg)
166-
logger.debug(logline)
167-
resp = NotFound("The Service or Identity Provider you requested could not be found.")
168-
return resp(environ, start_response)
169162
except Exception as e:
170-
if type(e) != UnknownSystemEntity:
171-
logline = "{}".format(e)
172-
logger.exception(logline)
163+
logger.exception(str(e))
173164
if debug:
174165
raise
175166

0 commit comments

Comments
 (0)