diff --git a/pyproject.toml b/pyproject.toml index 985692043..ae7954c0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,6 @@ importlib-resources = {python = "<3.9", version = "*"} paste = {optional = true, version = "*"} pyopenssl = "<24.3.0" python-dateutil = "*" -pytz = "*" "repoze.who" = {optional = true, version = "*"} requests = "^2" xmlschema = "^2" @@ -68,7 +67,6 @@ ipdb = "^0.13.9" mypy = "^1.0.0" types-pyopenssl = "^23.0.0.3" types-python-dateutil = "^2.8.19.6" -types-pytz = "^2022.7.1.0" types-setuptools = "^67.2.0.1" types-six = "^1.16.21.4" types-requests = "^2.28.11.12" diff --git a/src/saml2/cert.py b/src/saml2/cert.py index c5f626601..916a36d5e 100644 --- a/src/saml2/cert.py +++ b/src/saml2/cert.py @@ -7,7 +7,6 @@ from OpenSSL import crypto import dateutil.parser -import pytz import saml2.cryptography.pki @@ -278,7 +277,7 @@ def verify_chain(self, cert_chain_str_list, cert_str): def certificate_not_valid_yet(self, cert): starts_to_be_valid = dateutil.parser.parse(cert.get_notBefore()) - now = pytz.UTC.localize(datetime.datetime.utcnow()) + now = datetime.datetime.now(datetime.timezone.utc) if starts_to_be_valid < now: return False return True diff --git a/src/saml2/mongo_store.py b/src/saml2/mongo_store.py index 14be9c9ff..ca69515b1 100644 --- a/src/saml2/mongo_store.py +++ b/src/saml2/mongo_store.py @@ -205,7 +205,7 @@ def store(self, value, **kwargs): doc.update(kwargs) # Add timestamp to all documents to allow external garbage collecting if "created_at" not in doc: - doc["created_at"] = datetime.datetime.utcnow() + doc["created_at"] = datetime.datetime.now(datetime.timezone.utc) _ = self.db.insert_one(doc) def get(self, value=None, **kwargs): diff --git a/src/saml2/sigver.py b/src/saml2/sigver.py index f3af1ec99..7e78ad875 100644 --- a/src/saml2/sigver.py +++ b/src/saml2/sigver.py @@ -29,7 +29,6 @@ from urllib import parse from OpenSSL import crypto -import pytz from saml2 import ExtensionElement from saml2 import SamlBase @@ -387,7 +386,7 @@ def active_cert(key): except AttributeError: return False - now = pytz.UTC.localize(datetime.datetime.utcnow()) + now = datetime.datetime.now(datetime.timezone.utc) valid_from = dateutil.parser.parse(cert.get_notBefore()) valid_to = dateutil.parser.parse(cert.get_notAfter()) active = not cert.has_expired() and valid_from <= now < valid_to diff --git a/src/saml2/time_util.py b/src/saml2/time_util.py index c3e5b1393..1d12a6e95 100644 --- a/src/saml2/time_util.py +++ b/src/saml2/time_util.py @@ -6,7 +6,7 @@ """ import calendar -from datetime import datetime +from datetime import datetime, timezone from datetime import timedelta import re import sys @@ -175,7 +175,7 @@ def time_in_a_while(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0 :return: UTC time """ delta = timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks) - return datetime.utcnow() + delta + return datetime.now(timezone.utc) + delta def time_a_while_ago(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0): @@ -185,7 +185,7 @@ def time_a_while_ago(days=0, seconds=0, microseconds=0, milliseconds=0, minutes= minutes[, hours[, weeks]]]]]]]) """ delta = timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks) - return datetime.utcnow() - delta + return datetime.now(timezone.utc) - delta def in_a_while(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0, format=TIME_FORMAT): diff --git a/tests/test_41_response.py b/tests/test_41_response.py index 59f688885..3216a3cdf 100644 --- a/tests/test_41_response.py +++ b/tests/test_41_response.py @@ -127,7 +127,7 @@ def test_issuer_none(self): @patch("saml2.time_util.datetime") def test_false_sign(self, mock_datetime, caplog): caplog.set_level(logging.ERROR) - mock_datetime.utcnow = Mock(return_value=datetime.datetime(2016, 9, 4, 9, 59, 39)) + mock_datetime.now = Mock(return_value=datetime.datetime(2016, 9, 4, 9, 59, 39, tzinfo=datetime.timezone.utc)) with open(FALSE_ASSERT_SIGNED) as fp: xml_response = fp.read() diff --git a/tests/test_44_authnresp.py b/tests/test_44_authnresp.py index 5be61d9b5..8c332ef4f 100644 --- a/tests/test_44_authnresp.py +++ b/tests/test_44_authnresp.py @@ -1,6 +1,6 @@ #!/usr/bin/env python from contextlib import closing -from datetime import datetime +from datetime import datetime, timezone from dateutil import parser from pathutils import dotname @@ -131,7 +131,7 @@ def test_verify_w_authn(self): assert len(authn_info) == 1 assert authn_info[0][0] == INTERNETPROTOCOLPASSWORD assert authn_info[0][1] == ["http://www.example.com/login"] - now = datetime.utcnow() + now = datetime.now(timezone.utc) dt = parser.parse(authn_info[0][2]) assert now.year == dt.year and now.month == dt.month and now.day == dt.day session_info = self.ar.session_info()