11import base64
22import re
3+ from typing import Optional
34
45from cryptography .fernet import Fernet
56
910class Crypt :
1011
1112 @classmethod
12- def is_encrypted_value (cls , value ) -> bool :
13- return not not re .match (ENCRYPTION_REGEX , value )
13+ def is_encrypted_value (cls , value : Optional [ str ] ) -> bool :
14+ return value is not None and not not re .match (ENCRYPTION_REGEX , value )
1415
1516 @classmethod
16- def _extract_encrypted_value (cls , value ) -> str :
17- return re .match (ENCRYPTION_REGEX , value ).group (1 )
17+ def _extract_encrypted_value (cls , value ) -> Optional [str ]:
18+ match = re .match (ENCRYPTION_REGEX , value )
19+ if match :
20+ return match .group (1 )
21+ return None
1822
1923 @classmethod
2024 def generate_key (cls ) -> str :
2125 key_bytes = Fernet .generate_key ()
2226 return base64 .encodebytes (key_bytes ).decode ('utf-8' )
2327
2428 @classmethod
25- def decrypt_value (cls , value : str , key : str ) -> str :
26- if not key :
29+ def decrypt_value (cls , value : str , key : Optional [ str ] ) -> str :
30+ if not key or not value :
2731 return value
2832 key_bytes = base64 .decodebytes (key .encode ('utf-8' ))
29- value_bytes = base64 .decodebytes (cls ._extract_encrypted_value (value ).encode ('utf-8' ))
33+ encrypted_value = cls ._extract_encrypted_value (value )
34+ if not encrypted_value :
35+ return value
36+ value_bytes = base64 .decodebytes (encrypted_value .encode ('utf-8' ))
3037 decrypted_bytes = Fernet (key = key_bytes ).decrypt (value_bytes )
3138 return decrypted_bytes .decode ('utf-8' )
3239
@@ -35,13 +42,3 @@ def encrypt_value(cls, value: str, key: str) -> str:
3542 key_bytes = base64 .decodebytes (key .encode ('utf-8' ))
3643 encrypted_bytes = Fernet (key = key_bytes ).encrypt (value .encode ('utf-8' ))
3744 return 'enc{' + base64 .encodebytes (encrypted_bytes ).decode ('utf-8' ).strip ().replace ('\n ' , '' ) + '}'
38-
39-
40- if __name__ == '__main__' :
41- key = Crypt .generate_key ()
42- message = 'Hello World'
43- encrypt_value = Crypt .encrypt_value (message , key )
44- print (encrypt_value )
45- print (Crypt .is_encrypted_value (encrypt_value ))
46- print (Crypt ._extract_encrypted_value (encrypt_value ))
47- print (Crypt .decrypt_value (encrypt_value , key ))
0 commit comments