If no identity information refrain from constructing an AttributeStatement.
This commit is contained in:
@@ -755,6 +755,22 @@ class SamlBase(ExtensionContainer):
|
|||||||
def verify(self):
|
def verify(self):
|
||||||
return valid_instance(self)
|
return valid_instance(self)
|
||||||
|
|
||||||
|
def empty(self):
|
||||||
|
for prop, _typ, _req in self.c_attributes.values():
|
||||||
|
if getattr(self, prop, None):
|
||||||
|
return False
|
||||||
|
|
||||||
|
for prop, klassdef in self.c_children.values():
|
||||||
|
if getattr(self, prop):
|
||||||
|
return False
|
||||||
|
|
||||||
|
for param in ["text", "extension_elements", "extension_attributes"]:
|
||||||
|
if getattr(self, param):
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@@ -675,9 +675,9 @@ class Assertion(dict):
|
|||||||
else:
|
else:
|
||||||
_authn_statement = None
|
_authn_statement = None
|
||||||
|
|
||||||
|
|
||||||
_ass = assertion_factory(
|
_ass = assertion_factory(
|
||||||
issuer=issuer,
|
issuer=issuer,
|
||||||
attribute_statement=[attr_statement],
|
|
||||||
conditions=conds,
|
conditions=conds,
|
||||||
subject=factory(
|
subject=factory(
|
||||||
saml.Subject,
|
saml.Subject,
|
||||||
@@ -696,6 +696,9 @@ class Assertion(dict):
|
|||||||
if _authn_statement:
|
if _authn_statement:
|
||||||
_ass.authn_statement = [_authn_statement]
|
_ass.authn_statement = [_authn_statement]
|
||||||
|
|
||||||
|
if not attr_statement.empty():
|
||||||
|
_ass.attribute_statement=[attr_statement],
|
||||||
|
|
||||||
return _ass
|
return _ass
|
||||||
|
|
||||||
def apply_policy(self, sp_entity_id, policy, metadata=None):
|
def apply_policy(self, sp_entity_id, policy, metadata=None):
|
||||||
|
@@ -433,6 +433,7 @@ class Saml2Client(Base):
|
|||||||
'method': "POST
|
'method': "POST
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
logger.info("logout request: %s" % request)
|
||||||
|
|
||||||
_req = self._parse_request(request, LogoutRequest,
|
_req = self._parse_request(request, LogoutRequest,
|
||||||
"single_logout_service", binding)
|
"single_logout_service", binding)
|
||||||
|
@@ -315,6 +315,7 @@ def test_assertion_2():
|
|||||||
'urn:oid:2.16.840.1.113730.3.1.241',
|
'urn:oid:2.16.840.1.113730.3.1.241',
|
||||||
'urn:oid:0.9.2342.19200300.100.1.1'])
|
'urn:oid:0.9.2342.19200300.100.1.1'])
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -751,5 +752,26 @@ def test_filter_ava_5():
|
|||||||
assert ava == {}
|
assert ava == {}
|
||||||
|
|
||||||
|
|
||||||
|
def test_assertion_with_zero_attributes():
|
||||||
|
ava = {}
|
||||||
|
ast = Assertion(ava)
|
||||||
|
policy = Policy({
|
||||||
|
"default": {
|
||||||
|
"lifetime": {"minutes": 240},
|
||||||
|
"attribute_restrictions": None, # means all I have
|
||||||
|
"name_form": NAME_FORMAT_URI
|
||||||
|
},
|
||||||
|
})
|
||||||
|
name_id = NameID(format=NAMEID_FORMAT_TRANSIENT, text="foobar")
|
||||||
|
issuer = Issuer(text="entityid", format=NAMEID_FORMAT_ENTITY)
|
||||||
|
msg = ast.construct("sp_entity_id", "in_response_to", "consumer_url",
|
||||||
|
name_id, [AttributeConverterNOOP(NAME_FORMAT_URI)],
|
||||||
|
policy, issuer=issuer, authn_decl=ACD ,
|
||||||
|
authn_auth="authn_authn")
|
||||||
|
|
||||||
|
print msg
|
||||||
|
assert msg.attribute_statement == []
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
test_filter_ava_5()
|
test_assertion_with_zero_attributes()
|
Reference in New Issue
Block a user