@@ -277,7 +277,7 @@ def _on_all_certificates_invalidated(self, event: AllCertificatesInvalidatedEven
277
277
import logging
278
278
import uuid
279
279
from contextlib import suppress
280
- from datetime import datetime , timedelta
280
+ from datetime import datetime , timedelta , timezone
281
281
from ipaddress import IPv4Address
282
282
from typing import Any , Dict , List , Literal , Optional , Union
283
283
@@ -286,7 +286,7 @@ def _on_all_certificates_invalidated(self, event: AllCertificatesInvalidatedEven
286
286
from cryptography .hazmat .primitives import hashes , serialization
287
287
from cryptography .hazmat .primitives .asymmetric import rsa
288
288
from cryptography .hazmat .primitives .serialization import pkcs12
289
- from jsonschema import exceptions , validate # type: ignore[import-untyped]
289
+ from jsonschema import exceptions , validate
290
290
from ops .charm import (
291
291
CharmBase ,
292
292
CharmEvents ,
@@ -307,7 +307,7 @@ def _on_all_certificates_invalidated(self, event: AllCertificatesInvalidatedEven
307
307
308
308
# Increment this PATCH version before using `charmcraft publish-lib` or reset
309
309
# to 0 if you are raising the major API version
310
- LIBPATCH = 27
310
+ LIBPATCH = 28
311
311
312
312
PYDEPS = ["cryptography" , "jsonschema" ]
313
313
@@ -635,7 +635,9 @@ def _get_closest_future_time(
635
635
datetime: expiry_notification_time if not in the past, expiry_time otherwise
636
636
"""
637
637
return (
638
- expiry_notification_time if datetime .utcnow () < expiry_notification_time else expiry_time
638
+ expiry_notification_time
639
+ if datetime .now (timezone .utc ) < expiry_notification_time
640
+ else expiry_time
639
641
)
640
642
641
643
@@ -650,7 +652,7 @@ def _get_certificate_expiry_time(certificate: str) -> Optional[datetime]:
650
652
"""
651
653
try :
652
654
certificate_object = x509 .load_pem_x509_certificate (data = certificate .encode ())
653
- return certificate_object .not_valid_after
655
+ return certificate_object .not_valid_after_utc
654
656
except ValueError :
655
657
logger .warning ("Could not load certificate." )
656
658
return None
@@ -705,8 +707,8 @@ def generate_ca(
705
707
.issuer_name (subject_name )
706
708
.public_key (private_key_object .public_key ()) # type: ignore[arg-type]
707
709
.serial_number (x509 .random_serial_number ())
708
- .not_valid_before (datetime .utcnow ( ))
709
- .not_valid_after (datetime .utcnow ( ) + timedelta (days = validity ))
710
+ .not_valid_before (datetime .now ( timezone . utc ))
711
+ .not_valid_after (datetime .now ( timezone . utc ) + timedelta (days = validity ))
710
712
.add_extension (x509 .SubjectKeyIdentifier (digest = subject_identifier ), critical = False )
711
713
.add_extension (
712
714
x509 .AuthorityKeyIdentifier (
@@ -860,8 +862,8 @@ def generate_certificate(
860
862
.issuer_name (issuer )
861
863
.public_key (csr_object .public_key ())
862
864
.serial_number (x509 .random_serial_number ())
863
- .not_valid_before (datetime .utcnow ( ))
864
- .not_valid_after (datetime .utcnow ( ) + timedelta (days = validity ))
865
+ .not_valid_before (datetime .now ( timezone . utc ))
866
+ .not_valid_after (datetime .now ( timezone . utc ) + timedelta (days = validity ))
865
867
)
866
868
extensions = get_certificate_extensions (
867
869
authority_key_identifier = ca_pem .extensions .get_extension_for_class (
@@ -1070,7 +1072,7 @@ class CertificatesRequirerCharmEvents(CharmEvents):
1070
1072
class TLSCertificatesProvidesV2 (Object ):
1071
1073
"""TLS certificates provider class to be instantiated by TLS certificates providers."""
1072
1074
1073
- on = CertificatesProviderCharmEvents ()
1075
+ on = CertificatesProviderCharmEvents () # type: ignore[reportAssignmentType]
1074
1076
1075
1077
def __init__ (self , charm : CharmBase , relationship_name : str ):
1076
1078
super ().__init__ (charm , relationship_name )
@@ -1481,7 +1483,7 @@ def certificate_issued_for_csr(
1481
1483
class TLSCertificatesRequiresV2 (Object ):
1482
1484
"""TLS certificates requirer class to be instantiated by TLS certificates requirers."""
1483
1485
1484
- on = CertificatesRequirerCharmEvents ()
1486
+ on = CertificatesRequirerCharmEvents () # type: ignore[reportAssignmentType]
1485
1487
1486
1488
def __init__ (
1487
1489
self ,
@@ -1708,7 +1710,7 @@ def get_expiring_certificates(self) -> List[Dict[str, str]]:
1708
1710
expiry_notification_time = expiry_time - timedelta (
1709
1711
hours = self .expiry_notification_time
1710
1712
)
1711
- if datetime .utcnow ( ) > expiry_notification_time :
1713
+ if datetime .now ( timezone . utc ) > expiry_notification_time :
1712
1714
final_list .append (cert )
1713
1715
return final_list
1714
1716
@@ -1891,7 +1893,7 @@ def _on_secret_expired(self, event: SecretExpiredEvent) -> None:
1891
1893
event .secret .remove_all_revisions ()
1892
1894
return
1893
1895
1894
- if datetime .utcnow ( ) < expiry_time :
1896
+ if datetime .now ( timezone . utc ) < expiry_time :
1895
1897
logger .warning ("Certificate almost expired" )
1896
1898
self .on .certificate_expiring .emit (
1897
1899
certificate = certificate_dict ["certificate" ],
@@ -1937,7 +1939,7 @@ def _on_update_status(self, event: UpdateStatusEvent) -> None:
1937
1939
expiry_time = _get_certificate_expiry_time (certificate_dict ["certificate" ])
1938
1940
if not expiry_time :
1939
1941
continue
1940
- time_difference = expiry_time - datetime .utcnow ( )
1942
+ time_difference = expiry_time - datetime .now ( timezone . utc )
1941
1943
if time_difference .total_seconds () < 0 :
1942
1944
logger .warning ("Certificate is expired" )
1943
1945
self .on .certificate_invalidated .emit (
0 commit comments