From 239f39c0974de551c1898415a7faef1178a1ea19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 25 Mar 2018 09:58:14 +0200 Subject: [PATCH] python3: add detection of xml encoding --- mellon/utils.py | 11 +++++++++++ mellon/views.py | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mellon/utils.py b/mellon/utils.py index 830f711..30f5970 100644 --- a/mellon/utils.py +++ b/mellon/utils.py @@ -3,6 +3,7 @@ import datetime import importlib from functools import wraps import isodate +from xml.parsers import expat from django.contrib import auth from django.core.urlresolvers import reverse @@ -246,3 +247,13 @@ def login(request, user): break else: auth.login(request, user) + + +def get_xml_encoding(content): + xml_encoding = 'utf-8' + def xmlDeclHandler(version, encoding, standalone): + xml_encoding = encoding + parser = expat.ParserCreate() + parser.XmlDeclHandler = xmlDeclHandler + parser.Parse(content, True) + return xml_encoding diff --git a/mellon/views.py b/mellon/views.py index a7778d7..f77b8ff 100644 --- a/mellon/views.py +++ b/mellon/views.py @@ -272,8 +272,9 @@ class LoginView(ProfileMixin, LogMixin, View): return self.sso_failure(request, login, idp_message, status_codes) self.log.info('Got SAML Artifact Response', extra={'saml_response': result.content}) + result.encoding = utils.get_xml_encoding(result.content) try: - login.processResponseMsg(result.content) + login.processResponseMsg(result.text) login.acceptSso() except lasso.ProfileMissingResponseError: # artifact is invalid, idp returned no response