1010import base64
1111import warnings
1212from copy import deepcopy
13- import calendar
14- from datetime import datetime
13+ from datetime import datetime , timezone
1514from hashlib import sha1 , sha256 , sha384 , sha512
1615from isodate import parse_duration as duration_parser
1716import re
@@ -389,7 +388,7 @@ def parse_time_to_SAML(time):
389388 :return: SAML2 timestamp.
390389 :rtype: string
391390 """
392- data = datetime .utcfromtimestamp (float (time ))
391+ data = datetime .fromtimestamp (float (time ), timezone . utc )
393392 return data .strftime (OneLogin_Saml2_Utils .TIME_FORMAT )
394393
395394 @staticmethod
@@ -405,25 +404,25 @@ def parse_SAML_to_time(timestr):
405404 :rtype: int
406405 """
407406 try :
408- data = datetime .strptime (timestr , OneLogin_Saml2_Utils .TIME_FORMAT )
407+ data = datetime .strptime (timestr , OneLogin_Saml2_Utils .TIME_FORMAT ). replace ( tzinfo = timezone . utc )
409408 except ValueError :
410409 try :
411- data = datetime .strptime (timestr , OneLogin_Saml2_Utils .TIME_FORMAT_2 )
410+ data = datetime .strptime (timestr , OneLogin_Saml2_Utils .TIME_FORMAT_2 ). replace ( tzinfo = timezone . utc )
412411 except ValueError :
413412 elem = OneLogin_Saml2_Utils .TIME_FORMAT_WITH_FRAGMENT .match (timestr )
414413 if not elem :
415414 raise Exception ("time data %s does not match format %s" % (timestr , r"yyyy-mm-ddThh:mm:ss(\.s+)?Z" ))
416- data = datetime .strptime (elem .groups ()[0 ] + "Z" , OneLogin_Saml2_Utils .TIME_FORMAT )
415+ data = datetime .strptime (elem .groups ()[0 ] + "Z" , OneLogin_Saml2_Utils .TIME_FORMAT ). replace ( tzinfo = timezone . utc )
417416
418- return calendar . timegm (data .utctimetuple ())
417+ return int (data .timestamp ())
419418
420419 @staticmethod
421420 def now ():
422421 """
423422 :return: unix timestamp of actual time.
424423 :rtype: int
425424 """
426- return calendar . timegm (datetime .utcnow (). utctimetuple ())
425+ return int (datetime .now ( timezone . utc ). timestamp ())
427426
428427 @staticmethod
429428 def parse_duration (duration , timestamp = None ):
@@ -445,10 +444,10 @@ def parse_duration(duration, timestamp=None):
445444
446445 timedelta = duration_parser (duration )
447446 if timestamp is None :
448- data = datetime .utcnow ( ) + timedelta
447+ data = datetime .now ( timezone . utc ) + timedelta
449448 else :
450- data = datetime .utcfromtimestamp (timestamp ) + timedelta
451- return calendar . timegm (data .utctimetuple ())
449+ data = datetime .fromtimestamp (timestamp , timezone . utc ) + timedelta
450+ return int (data .timestamp ())
452451
453452 @staticmethod
454453 def get_expire_time (cache_duration = None , valid_until = None ):
0 commit comments