Skip to content

Commit ec56e05

Browse files
committed
Merge branch 'roland_master' into example_updates
2 parents a001e0e + a12cc2a commit ec56e05

22 files changed

+1511
-1087
lines changed

.travis.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
language: python
22

3+
sudo: false
4+
35
env:
46
- TOX_ENV=py27
57
- TOX_ENV=py34
68

9+
addons:
10+
apt:
11+
packages:
12+
- xmlsec1
13+
714
services:
815
- mongodb
916

10-
install:
11-
- sudo apt-get install xmlsec1
12-
1317
script:
1418
- ./setup.py test

example/sp-wsgi/sp.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import re
55
import argparse
66
import os
7+
from future.backports.http.cookies import SimpleCookie
8+
import six
9+
710
from saml2.extension.pefim import SPCertEnc
811
from saml2.metadata import create_metadata_string
912
import service_conf
1013

11-
from Cookie import SimpleCookie
12-
from urlparse import parse_qs
14+
from six.moves.urllib.parse import parse_qs
1315
import sys
1416

1517
from saml2 import BINDING_HTTP_REDIRECT, element_to_extension_element
@@ -59,7 +61,7 @@ def dict_to_table(ava, lev=0, width=1):
5961
txt = ['<table border=%s bordercolor="black">\n' % width]
6062
for prop, valarr in ava.items():
6163
txt.append("<tr>\n")
62-
if isinstance(valarr, basestring):
64+
if isinstance(valarr, six.string_types):
6365
txt.append("<th>%s</th>\n" % str(prop))
6466
try:
6567
txt.append("<td>%s</td>\n" % valarr.encode("utf8"))

src/saml2/authn.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
import logging
2-
from urllib import urlencode
3-
from urlparse import parse_qs
4-
from urlparse import urlsplit
52
import six
63
import time
74
import ldap
@@ -13,6 +10,8 @@
1310
from saml2.httputil import Unauthorized
1411
from saml2.httputil import parse_cookie
1512

13+
from six.moves.urllib.parse import urlencode, parse_qs, urlsplit
14+
1615
__author__ = 'rolandh'
1716

1817
logger = logging.getLogger(__name__)

src/saml2/client.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from saml2 import BINDING_HTTP_POST
1515
from saml2 import BINDING_SOAP
1616

17+
import saml2.xmldsig as ds
18+
1719
from saml2.ident import decode, code
1820
from saml2.httpbase import HTTPError
1921
from saml2.s_utils import sid
@@ -161,7 +163,7 @@ def global_logout(self, name_id, reason="", expire=None, sign=None):
161163
return self.do_logout(name_id, entity_ids, reason, expire, sign)
162164

163165
def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
164-
expected_binding=None):
166+
expected_binding=None, **kwargs):
165167
"""
166168
167169
:param name_id: Identifier of the Subject (a NameID instance)
@@ -172,6 +174,7 @@ def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
172174
:param sign: Whether to sign the request or not
173175
:param expected_binding: Specify the expected binding then not try it
174176
all
177+
:param kwargs: Extra key word arguments.
175178
:return:
176179
"""
177180
# check time
@@ -203,9 +206,14 @@ def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
203206

204207
destination = destinations(srvs)[0]
205208
logger.info("destination to provider: %s" % destination)
209+
try:
210+
session_info = self.users.get_info_from(name_id, entity_id)
211+
session_indexes = [session_info['session_index']]
212+
except KeyError:
213+
session_indexes = None
206214
req_id, request = self.create_logout_request(
207215
destination, entity_id, name_id=name_id, reason=reason,
208-
expire=expire)
216+
expire=expire, session_indexes=session_indexes)
209217

210218
# to_sign = []
211219
if binding.startswith("http://"):
@@ -214,15 +222,23 @@ def do_logout(self, name_id, entity_ids, reason, expire, sign=None,
214222
if sign is None:
215223
sign = self.logout_requests_signed
216224

225+
sigalg = None
226+
key = None
217227
if sign:
218-
srequest = self.sign(request)
228+
if binding == BINDING_HTTP_REDIRECT:
229+
sigalg = kwargs.get("sigalg", ds.sig_default)
230+
key = kwargs.get("key", self.signkey)
231+
srequest = str(request)
232+
else:
233+
srequest = self.sign(request)
219234
else:
220-
srequest = "%s" % request
235+
srequest = str(request)
221236

222237
relay_state = self._relay_state(req_id)
223238

224239
http_info = self.apply_binding(binding, srequest, destination,
225-
relay_state)
240+
relay_state, sigalg=sigalg,
241+
key=key)
226242

227243
if binding == BINDING_SOAP:
228244
response = self.send(**http_info)

src/saml2/client_base.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
to conclude its tasks.
77
"""
88
import threading
9-
from six.moves.urllib.parse import urlencode
10-
from six.moves.urllib.parse import urlparse
119
import six
1210

1311
from saml2.entity import Entity
@@ -26,8 +24,11 @@
2624
from saml2.soap import make_soap_enveloped_saml_thingy
2725

2826
from six.moves.urllib.parse import parse_qs
27+
from six.moves.urllib.parse import urlencode
28+
from six.moves.urllib.parse import urlparse
2929

30-
from saml2.s_utils import signature, UnravelError, exception_trace
30+
from saml2.s_utils import signature
31+
from saml2.s_utils import UnravelError
3132
from saml2.s_utils import do_attributes
3233

3334
from saml2 import samlp, BINDING_SOAP, SAMLError

src/saml2/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env python
2+
from saml2.saml import NAME_FORMAT_URI
23

34
__author__ = 'rolandh'
45

@@ -93,6 +94,7 @@
9394
"ecp",
9495
"name_id_format",
9596
"logout_requests_signed",
97+
"requested_attribute_name_format"
9698
]
9799

98100
AA_IDP_ARGS = [
@@ -236,6 +238,7 @@ def __init__(self, homedir="."):
236238
self.extensions = {}
237239
self.attribute = []
238240
self.attribute_profile = []
241+
self.requested_attribute_name_format = NAME_FORMAT_URI
239242

240243
def setattr(self, context, attr, val):
241244
if context == "":

src/saml2/mdstore.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,7 @@ def load(self, typ, *args, **kwargs):
795795
self.ii += 1
796796
key = self.ii
797797
kwargs.update(_args)
798-
_md = MetaData(self.onts, self.attrc, args[0], **kwargs)
798+
_md = InMemoryMetaData(self.onts, self.attrc, args[0])
799799
elif typ == "remote":
800800
key = kwargs["url"]
801801
for _key in ["node_name", "check_validity"]:

0 commit comments

Comments
 (0)