@@ -41,11 +41,11 @@ def builder(sp, authnsign=False, wsign=False, valid_until=None, cache_duration=N
4141 :param wsign: wantAssertionsSigned attribute
4242 :type wsign: string
4343
44- :param valid_until: Metadata's valid time
45- :type valid_until: string|DateTime
44+ :param valid_until: Metadata's expiry date
45+ :type valid_until: string|DateTime|Timestamp
4646
4747 :param cache_duration: Duration of the cache in seconds
48- :type cache_duration: string|Timestamp
48+ :type cache_duration: int|string
4949
5050 :param contacts: Contacts info
5151 :type contacts: dict
@@ -56,15 +56,18 @@ def builder(sp, authnsign=False, wsign=False, valid_until=None, cache_duration=N
5656 if valid_until is None :
5757 valid_until = int (datetime .now ().strftime ("%s" )) + OneLogin_Saml2_Metadata .TIME_VALID
5858 if not isinstance (valid_until , basestring ):
59- valid_until_time = gmtime (valid_until )
60- valid_until_time = strftime (r'%Y-%m-%dT%H:%M:%SZ' , valid_until_time )
59+ if isinstance (valid_until , datetime ):
60+ valid_until_time = valid_until
61+ else :
62+ valid_until_time = gmtime (valid_until )
63+ valid_until_str = strftime (r'%Y-%m-%dT%H:%M:%SZ' , valid_until_time )
6164 else :
62- valid_until_time = valid_until
65+ valid_until_str = valid_until
6366
6467 if cache_duration is None :
65- cache_duration = int ( datetime . now (). strftime ( "%s" )) + OneLogin_Saml2_Metadata .TIME_CACHED
68+ cache_duration = OneLogin_Saml2_Metadata .TIME_CACHED
6669 if not isinstance (cache_duration , basestring ):
67- cache_duration_str = 'PT%sS' % cache_duration
70+ cache_duration_str = 'PT%sS' % cache_duration # 'P'eriod of 'T'ime x 'S'econds
6871 else :
6972 cache_duration_str = cache_duration
7073
@@ -121,8 +124,8 @@ def builder(sp, authnsign=False, wsign=False, valid_until=None, cache_duration=N
121124
122125 metadata = """<?xml version="1.0"?>
123126<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
124- validUntil=" %(valid)s"
125- cacheDuration=" %(cache)s"
127+ %(valid)s
128+ %(cache)s
126129 entityID="%(entity_id)s">
127130 <md:SPSSODescriptor AuthnRequestsSigned="%(authnsign)s" WantAssertionsSigned="%(wsign)s" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
128131%(sls)s <md:NameIDFormat>%(name_id_format)s</md:NameIDFormat>
@@ -134,8 +137,8 @@ def builder(sp, authnsign=False, wsign=False, valid_until=None, cache_duration=N
134137%(contacts)s
135138</md:EntityDescriptor>""" % \
136139 {
137- 'valid' : valid_until_time ,
138- 'cache' : cache_duration_str ,
140+ 'valid' : ( 'validUntil="%s"' % valid_until_str ) if valid_until_str else '' ,
141+ 'cache' : ( 'cacheDuration="%s"' % cache_duration_str ) if cache_duration_str else '' ,
139142 'entity_id' : sp ['entityId' ],
140143 'authnsign' : str_authnsign ,
141144 'wsign' : str_wsign ,
0 commit comments