add dependencies
This commit is contained in:
parent
3795081098
commit
6eaf5397bc
5 changed files with 49 additions and 4 deletions
|
@ -1,13 +1,18 @@
|
|||
# pyright: reportIncompatibleMethodOverride=false, reportFunctionMemberAccess=false
|
||||
import copy
|
||||
from base64 import b64decode, b64encode
|
||||
from datetime import date, datetime
|
||||
from functools import partialmethod
|
||||
from hashlib import sha256
|
||||
from importlib import import_module
|
||||
|
||||
import django
|
||||
from cryptography.fernet import Fernet, MultiFernet
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import FieldError
|
||||
from django.db.models import fields
|
||||
from django.db.models import Value, fields
|
||||
from django.utils import dateparse, timezone
|
||||
from django.utils.encoding import force_bytes
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
# from django.db.models import JSONField as DJANGO_JSONField
|
||||
|
@ -16,6 +21,28 @@ from django.utils.translation import gettext_lazy as _
|
|||
from django_jsonform.models.fields import ArrayField as DJANGO_ArrayField
|
||||
from django_jsonform.models.fields import JSONField as DJANGO_JSONField
|
||||
|
||||
|
||||
def _get_crypter():
|
||||
configured_keys = [settings.SECRET_KEY] + settings.SECRET_KEY_FALLBACKS
|
||||
keys = [Fernet(b64encode(sha256(force_bytes(k)).digest())) for k in configured_keys]
|
||||
if len(keys) == 0:
|
||||
raise ValueError("No keys defined")
|
||||
return MultiFernet(keys)
|
||||
|
||||
|
||||
CRYPTER = _get_crypter()
|
||||
|
||||
|
||||
def encrypt_str(s: str) -> str:
|
||||
# be sure to encode the string to bytes
|
||||
return CRYPTER.encrypt(s.encode("utf-8")).decode("utf-8")
|
||||
|
||||
|
||||
def decrypt_str(t: str) -> str:
|
||||
# be sure to decode the bytes to a string
|
||||
return CRYPTER.decrypt(t.encode("utf-8")).decode("utf-8")
|
||||
|
||||
|
||||
__all__ = (
|
||||
"BooleanField",
|
||||
"CharField",
|
||||
|
@ -29,6 +56,7 @@ __all__ = (
|
|||
"IPAddressField",
|
||||
"GenericIPAddressField",
|
||||
"NullBooleanField",
|
||||
"EncryptedTextField",
|
||||
"TextField",
|
||||
"TimeField",
|
||||
"URLField",
|
||||
|
@ -81,9 +109,6 @@ class JSONFieldDescriptor(object):
|
|||
setattr(instance, self.field.json_field_name, json_value)
|
||||
|
||||
|
||||
fields.CharField
|
||||
|
||||
|
||||
class JSONFieldMixin(object):
|
||||
"""
|
||||
Override django.db.model.fields.Field.contribute_to_class
|
||||
|
@ -226,6 +251,16 @@ class TextField(JSONFieldMixin, fields.TextField):
|
|||
pass
|
||||
|
||||
|
||||
class EncryptedTextField(JSONFieldMixin, fields.TextField):
|
||||
def to_json(self, value):
|
||||
if value:
|
||||
return encrypt_str(str(value))
|
||||
|
||||
def from_json(self, value):
|
||||
if value:
|
||||
return decrypt_str(value)
|
||||
|
||||
|
||||
class TimeField(JSONFieldMixin, fields.TimeField):
|
||||
def to_json(self, value):
|
||||
if value:
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.test import TestCase
|
||||
|
||||
from catalog.book.tests import *
|
||||
from catalog.common.jsondata import decrypt_str, encrypt_str
|
||||
from catalog.game.tests import *
|
||||
from catalog.movie.tests import *
|
||||
from catalog.music.tests import *
|
||||
|
@ -39,3 +40,9 @@ class CatalogCase(TestCase):
|
|||
self.hyperion_print.merge_to(self.hyperion_ebook)
|
||||
resloved = Item.get_by_url(self.hyperion_hardcover.url, True)
|
||||
self.assertEqual(resloved, self.hyperion_ebook)
|
||||
|
||||
def test_encypted_field(self):
|
||||
o = "Hello, World!"
|
||||
e = encrypt_str(o)
|
||||
d = decrypt_str(e)
|
||||
self.assertEqual(o, d)
|
||||
|
|
|
@ -55,6 +55,7 @@ dependencies = [
|
|||
"urlman",
|
||||
"validators",
|
||||
"deepmerge>=1.1.1",
|
||||
"django-typed-models>=0.14.0",
|
||||
]
|
||||
|
||||
[tool.rye]
|
||||
|
|
|
@ -103,6 +103,7 @@ django-slack==5.19.0
|
|||
django-stubs==5.0.2
|
||||
django-stubs-ext==5.0.2
|
||||
# via django-stubs
|
||||
django-typed-models==0.14.0
|
||||
django-tz-detect==0.5.0
|
||||
django-user-messages==1.0.0
|
||||
djlint==1.34.1
|
||||
|
|
|
@ -82,6 +82,7 @@ django-rq==2.10.2
|
|||
django-sass-processor==1.4.1
|
||||
django-simple-history==3.7.0
|
||||
django-slack==5.19.0
|
||||
django-typed-models==0.14.0
|
||||
django-tz-detect==0.5.0
|
||||
django-user-messages==1.0.0
|
||||
dnspython==2.6.1
|
||||
|
|
Loading…
Add table
Reference in a new issue