summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kanakarakis <ivan.kanak@gmail.com>2018-12-06 10:12:47 +0100
committerIvan Kanakarakis <ivan.kanak@gmail.com>2018-12-06 10:12:47 +0100
commit05195ff4764de9e8318a678129fc31c8fba0b96d (patch)
tree55950fcaf569cbadebcb0490fd9e69a32e058506
parenta73239c853ddbcc210044381e5ebbc5e7a814fb6 (diff)
downloadpysaml2-05195ff4764de9e8318a678129fc31c8fba0b96d.tar.gz
Remove the python-future module and use six
Signed-off-by: Ivan Kanakarakis <ivan.kanak@gmail.com>
-rw-r--r--setup.cfg1
-rw-r--r--src/saml2/discovery.py18
-rw-r--r--src/saml2/response.py2
-rw-r--r--src/saml2/s2repoze/plugins/sp.py14
-rw-r--r--src/saml2/sigver.py4
-rw-r--r--tests/test_30_mdstore.py6
-rw-r--r--tests/test_51_client.py28
7 files changed, 32 insertions, 41 deletions
diff --git a/setup.cfg b/setup.cfg
index 8538d788..e6a7ca3e 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -50,7 +50,6 @@ scripts =
install_requires =
cryptography >= 1.4
defusedxml
- future
pyOpenSSL
python-dateutil
pytz
diff --git a/src/saml2/discovery.py b/src/saml2/discovery.py
index 8031b41f..d3e42500 100644
--- a/src/saml2/discovery.py
+++ b/src/saml2/discovery.py
@@ -1,6 +1,4 @@
-from future.backports.urllib.parse import parse_qs
-from future.backports.urllib.parse import urlencode
-from future.backports.urllib.parse import urlparse
+from six.moves.urllib import parse
from saml2.entity import Entity
from saml2.response import VerificationError
@@ -17,10 +15,10 @@ class DiscoveryServer(Entity):
def parse_discovery_service_request(self, url="", query=""):
if url:
- part = urlparse(url)
- dsr = parse_qs(part[4])
+ part = parse.urlparse(url)
+ dsr = parse.parse_qs(part[4])
elif query:
- dsr = parse_qs(query)
+ dsr = parse.parse_qs(query)
else:
dsr = {}
@@ -35,9 +33,9 @@ class DiscoveryServer(Entity):
pass
if "return" in dsr:
- part = urlparse(dsr["return"])
+ part = parse.urlparse(dsr["return"])
if part.query:
- qp = parse_qs(part.query)
+ qp = parse.parse_qs(part.query)
if "returnIDParam" in dsr:
assert dsr["returnIDParam"] not in qp.keys()
else:
@@ -74,9 +72,9 @@ class DiscoveryServer(Entity):
return_url = kwargs["return"]
if entity_id:
- qp = urlencode({returnIDParam: entity_id})
+ qp = parse.urlencode({returnIDParam: entity_id})
- part = urlparse(return_url)
+ part = parse.urlparse(return_url)
if part.query:
# Iff there is a query part add the new info at the end
return_url = "%s&%s" % (return_url, qp)
diff --git a/src/saml2/response.py b/src/saml2/response.py
index 6d32e313..d0d78f8b 100644
--- a/src/saml2/response.py
+++ b/src/saml2/response.py
@@ -1,7 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
-from future.utils import python_2_unicode_compatible
import calendar
import logging
import six
@@ -468,7 +467,6 @@ class ManageNameIDResponse(StatusResponse):
# ----------------------------------------------------------------------------
-@python_2_unicode_compatible
class AuthnResponse(StatusResponse):
""" This is where all the profile compliance is checked.
This one does saml2int compliance. """
diff --git a/src/saml2/s2repoze/plugins/sp.py b/src/saml2/s2repoze/plugins/sp.py
index 3b09a91e..afc74539 100644
--- a/src/saml2/s2repoze/plugins/sp.py
+++ b/src/saml2/s2repoze/plugins/sp.py
@@ -15,10 +15,8 @@ import six
from saml2.samlp import Extensions
from saml2 import xmldsig as ds
-from future.backports.urllib.parse import parse_qs
-from future.backports.urllib.parse import urlparse
-
from six import StringIO
+from six.moves.urllib import parse
from paste.httpexceptions import HTTPSeeOther, HTTPRedirection
from paste.httpexceptions import HTTPNotImplemented
@@ -104,7 +102,7 @@ class SAML2Plugin(object):
self.discosrv = discovery
self.idp_query_param = idp_query_param
self.logout_endpoints = [
- urlparse(ep)[2] for ep in config.endpoint("single_logout_service")
+ parse.urlparse(ep)[2] for ep in config.endpoint("single_logout_service")
]
try:
self.metadata = self.conf.metadata
@@ -158,7 +156,7 @@ class SAML2Plugin(object):
environ["wsgi.input"] = StringIO(body) # restore the request body
# as a stream so that everything seems untouched
- post = parse_qs(body) # parse the POST fields into a dict
+ post = parse.parse_qs(body) # parse the POST fields into a dict
logger.debug("identify post: %s", post)
@@ -218,7 +216,7 @@ class SAML2Plugin(object):
query = environ.get(key)
if query:
try:
- _idp_entity_id = dict(parse_qs(query))[self.idp_query_param][0]
+ _idp_entity_id = dict(parse.parse_qs(query))[self.idp_query_param][0]
if _idp_entity_id in idps:
idp_entity_id = _idp_entity_id
break
@@ -239,7 +237,7 @@ class SAML2Plugin(object):
if self.wayf:
if query:
try:
- wayf_selected = dict(parse_qs(query))["wayf_selected"][0]
+ wayf_selected = dict(parse.parse_qs(query))["wayf_selected"][0]
except KeyError:
return self._wayf_redirect(came_from)
idp_entity_id = wayf_selected
@@ -385,7 +383,7 @@ class SAML2Plugin(object):
if (environ["PATH_INFO"]) in ret and ret.split(environ["PATH_INFO"])[
1
] == "":
- query = parse_qs(environ["QUERY_STRING"])
+ query = parse.parse_qs(environ["QUERY_STRING"])
sid = query["sid"][0]
came_from = self.outstanding_queries[sid]
except:
diff --git a/src/saml2/sigver.py b/src/saml2/sigver.py
index 4483b03b..59fe2dee 100644
--- a/src/saml2/sigver.py
+++ b/src/saml2/sigver.py
@@ -13,7 +13,7 @@ import six
from time import mktime
from binascii import hexlify
-from future.backports.urllib.parse import urlencode
+from six.moves.urllib import parse
import saml2.cryptography.asymmetric
import saml2.cryptography.pki
@@ -578,7 +578,7 @@ def verify_redirect_signature(saml_msg, crypto, cert=None, sigkey=None):
_args = saml_msg.copy()
del _args['Signature'] # everything but the signature
string = '&'.join(
- [urlencode({k: _args[k]}) for k in _order if k in
+ [parse.urlencode({k: _args[k]}) for k in _order if k in
_args]).encode('ascii')
if cert:
diff --git a/tests/test_30_mdstore.py b/tests/test_30_mdstore.py
index 9f56bf94..46a38aea 100644
--- a/tests/test_30_mdstore.py
+++ b/tests/test_30_mdstore.py
@@ -4,7 +4,7 @@ import datetime
import re
from collections import OrderedDict
-from future.backports.urllib.parse import quote_plus
+from six.moves.urllib import parse
from saml2.config import Config
from saml2.mdstore import MetadataStore, MetaDataExtern
@@ -299,7 +299,7 @@ def test_mdx_service():
entity_id = "http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php"
url = "http://mdx.example.com/entities/{}".format(
- quote_plus(MetaDataMDX.sha1_entity_transform(entity_id)))
+ parse.quote_plus(MetaDataMDX.sha1_entity_transform(entity_id)))
responses.add(responses.GET, url, body=TEST_METADATA_STRING, status=200,
content_type=SAML_METADATA_CONTENT_TYPE)
@@ -315,7 +315,7 @@ def test_mdx_single_sign_on_service():
entity_id = "http://xenosmilus.umdc.umu.se/simplesaml/saml2/idp/metadata.php"
url = "http://mdx.example.com/entities/{}".format(
- quote_plus(MetaDataMDX.sha1_entity_transform(entity_id)))
+ parse.quote_plus(MetaDataMDX.sha1_entity_transform(entity_id)))
responses.add(responses.GET, url, body=TEST_METADATA_STRING, status=200,
content_type=SAML_METADATA_CONTENT_TYPE)
diff --git a/tests/test_51_client.py b/tests/test_51_client.py
index a56ef2cf..2e2b7f1c 100644
--- a/tests/test_51_client.py
+++ b/tests/test_51_client.py
@@ -4,9 +4,7 @@
import base64
import uuid
import six
-from future.backports.urllib.parse import parse_qs
-from future.backports.urllib.parse import urlencode
-from future.backports.urllib.parse import urlparse
+from six.moves.urllib import parse
from pytest import raises
from saml2.argtree import add_path
@@ -1378,7 +1376,7 @@ class TestClient:
relay_state="relay2", sign=True, sigalg=SIG_RSA_SHA256)
loc = info["headers"][0][1]
- qs = parse_qs(loc[1:])
+ qs = parse.parse_qs(loc[1:])
assert _leq(qs.keys(),
['SigAlg', 'SAMLRequest', 'RelayState', 'Signature'])
@@ -1417,8 +1415,8 @@ class TestClient:
assert binding == BINDING_HTTP_REDIRECT
loc = info["headers"][0][1]
- _, _, _, _, qs, _ = urlparse(loc)
- qs = parse_qs(qs)
+ _, _, _, _, qs, _ = parse.urlparse(loc)
+ qs = parse.parse_qs(qs)
assert _leq(qs.keys(),
['SigAlg', 'SAMLRequest', 'RelayState', 'Signature'])
@@ -2940,7 +2938,7 @@ class TestClientNonAsciiAva:
relay_state="relay2", sign=True, sigalg=SIG_RSA_SHA256)
loc = info["headers"][0][1]
- qs = parse_qs(loc[1:])
+ qs = parse.parse_qs(loc[1:])
assert _leq(qs.keys(),
['SigAlg', 'SAMLRequest', 'RelayState', 'Signature'])
@@ -2979,8 +2977,8 @@ class TestClientNonAsciiAva:
assert binding == BINDING_HTTP_REDIRECT
loc = info["headers"][0][1]
- _, _, _, _, qs, _ = urlparse(loc)
- qs = parse_qs(qs)
+ _, _, _, _, qs, _ = parse.urlparse(loc)
+ qs = parse.parse_qs(qs)
assert _leq(qs.keys(),
['SigAlg', 'SAMLRequest', 'RelayState', 'Signature'])
@@ -3076,8 +3074,8 @@ class TestClientWithDummy():
assert http_args["headers"][0][0] == "Location"
assert http_args["data"] == []
redirect_url = http_args["headers"][0][1]
- _, _, _, _, qs, _ = urlparse(redirect_url)
- qs_dict = parse_qs(qs)
+ _, _, _, _, qs, _ = parse.urlparse(redirect_url)
+ qs_dict = parse.parse_qs(qs)
req = self.server.parse_authn_request(qs_dict["SAMLRequest"][0],
binding)
resp_args = self.server.response_args(req.message, [response_binding])
@@ -3097,8 +3095,8 @@ class TestClientWithDummy():
assert http_args["headers"][0][0] == "Location"
assert http_args["data"] == []
redirect_url = http_args["headers"][0][1]
- _, _, _, _, qs, _ = urlparse(redirect_url)
- qs_dict = parse_qs(qs)
+ _, _, _, _, qs, _ = parse.urlparse(redirect_url)
+ qs_dict = parse.parse_qs(qs)
req = self.server.parse_authn_request(qs_dict["SAMLRequest"][0],
binding)
resp_args = self.server.response_args(req.message, [response_binding])
@@ -3152,7 +3150,7 @@ class TestClientWithDummy():
# Here I fake what the client will do
# create the form post
- http_args["data"] = urlencode(_dic)
+ http_args["data"] = parse.urlencode(_dic)
http_args["method"] = "POST"
http_args["dummy"] = _dic["SAMLRequest"]
http_args["headers"] = [('Content-type',
@@ -3188,7 +3186,7 @@ class TestClientWithDummy():
# Here I fake what the client will do
# create the form post
- http_args["data"] = urlencode(_dic)
+ http_args["data"] = parse.urlencode(_dic)
http_args["method"] = "POST"
http_args["dummy"] = _dic["SAMLRequest"]
http_args["headers"] = [('Content-type',