From bde578b9bbc6dde6864bee5c5be6cc3c99dd2db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20Wersd=C3=B6rfer?= Date: Thu, 13 Feb 2025 13:11:52 +0100 Subject: [PATCH 1/2] Remove import of deprecated cgi module --- src/saml2/httputil.py | 6 ++++-- src/saml2/pack.py | 9 ++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/saml2/httputil.py b/src/saml2/httputil.py index 3ad668b71..c7abc6fdd 100644 --- a/src/saml2/httputil.py +++ b/src/saml2/httputil.py @@ -1,4 +1,3 @@ -import cgi import hashlib import hmac from http.cookies import SimpleCookie @@ -182,7 +181,10 @@ def extract(environ, empty=False, err=False): :param empty: Stops on empty fields (default: Fault) :param err: Stops on errors in fields (default: Fault) """ - formdata = cgi.parse(environ["wsgi.input"], environ, empty, err) + input_stream = environ["wsgi.input"] + content_length = int(environ.get("CONTENT_LENGTH", 0)) + input_data = input_stream.read(content_length).decode('utf-8') + formdata = parse_qs(input_data) # Remove single entries from lists for key, value in iter(formdata.items()): if len(value) == 1: diff --git a/src/saml2/pack.py b/src/saml2/pack.py index 99c32476b..cee1cf1c8 100644 --- a/src/saml2/pack.py +++ b/src/saml2/pack.py @@ -8,14 +8,9 @@ """ import base64 - - -try: - import html -except Exception: - import cgi as html # type: ignore[no-redef] - +import html import logging + from urllib.parse import urlencode from urllib.parse import urlparse from xml.etree import ElementTree as ElementTree From 54827bf0a19a2ed53b4c9e1132496b3b2c3f80f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20Wersd=C3=B6rfer?= Date: Thu, 13 Feb 2025 17:37:52 +0100 Subject: [PATCH 2/2] Refactor _shelve_compat Signed-off-by: Ivan Kanakarakis --- src/saml2/server.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/saml2/server.py b/src/saml2/server.py index 8b5572001..ca2b312d7 100644 --- a/src/saml2/server.py +++ b/src/saml2/server.py @@ -4,11 +4,11 @@ """Contains classes and functions that a SAML2.0 Identity provider (IdP) or attribute authority (AA) may use to conclude its tasks. """ -import dbm import importlib import logging import shelve import threading +from dbm import error as DbmError from saml2 import BINDING_HTTP_REDIRECT from saml2 import class_name @@ -58,13 +58,8 @@ def _shelve_compat(name, *args, **kwargs): try: return shelve.open(name, *args, **kwargs) - except dbm.error[0]: - # Python 3 whichdb needs to try .db to determine type - if name.endswith(".db"): - name = name.rsplit(".db", 1)[0] - return shelve.open(name, *args, **kwargs) - else: - raise + except DbmError: + return shelve.open(name.removesuffix(".db"), *args, **kwargs) class Server(Entity):