浏览代码

refactor(api): clean up AuthenticatedActionSerializer

Peter Thomassen 3 年之前
父节点
当前提交
4afd039bb5
共有 1 个文件被更改,包括 5 次插入6 次删除
  1. 5 6
      api/desecapi/serializers.py

+ 5 - 6
api/desecapi/serializers.py

@@ -728,6 +728,8 @@ class AuthenticatedActionSerializer(serializers.ModelSerializer):
     state = serializers.CharField()  # serializer read-write, but model read-only field
     validity_period = settings.VALIDITY_PERIOD_VERIFICATION_SIGNATURE
 
+    _crypto_context = 'desecapi.serializers.AuthenticatedActionSerializer'
+
     class Meta:
         model = models.AuthenticatedAction
         fields = ('state',)
@@ -735,20 +737,19 @@ class AuthenticatedActionSerializer(serializers.ModelSerializer):
     @classmethod
     def _pack_code(cls, data):
         payload = json.dumps(data).encode()
-        code = crypto.encrypt(payload, context='desecapi.serializers.AuthenticatedActionSerializer').decode()
+        code = crypto.encrypt(payload, context=cls._crypto_context).decode()
         return code.rstrip('=')
 
     @classmethod
     def _unpack_code(cls, code, *, ttl):
         code += -len(code) % 4 * '='
         try:
-            payload = crypto.decrypt(code.encode(), context='desecapi.serializers.AuthenticatedActionSerializer',
-                                     ttl=ttl)
+            payload = crypto.decrypt(code.encode(), context=cls._crypto_context, ttl=ttl)
             return json.loads(payload.decode())
         except (TypeError, UnicodeDecodeError, UnicodeEncodeError, json.JSONDecodeError, binascii.Error):
             raise ValueError
 
-    def to_representation(self, instance: models.AuthenticatedUserAction):
+    def to_representation(self, instance: models.AuthenticatedAction):
         # do the regular business
         data = super().to_representation(instance)
 
@@ -756,8 +757,6 @@ class AuthenticatedActionSerializer(serializers.ModelSerializer):
         return {'code': self._pack_code(data)}
 
     def to_internal_value(self, data):
-        data = data.copy()  # avoid side effect from .pop
-
         # calculate code TTL
         validity_period = self.context.get('validity_period', self.validity_period)
         try: