Skip to content

Commit 52e3fb1

Browse files
author
tobmes
committed
Register auth serializer with JSON encoding and decoding before setup_security
1 parent a3b979a commit 52e3fb1

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

source/app/iris_engine/tasker/celery.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1818

1919
import os
20+
import json
21+
from datetime import datetime, date
2022
from celery import Celery
2123
from celery.security import setup_security
24+
from kombu.serialization import register
2225
from app.configuration import CeleryConfig
2326

2427

2528
def _patch_celery_cert_datetime():
26-
import datetime
2729
from celery.security.certificate import Certificate
2830

2931
_original_has_expired = Certificate.has_expired
@@ -33,11 +35,28 @@ def _patched_has_expired(self):
3335
return _original_has_expired(self)
3436
except TypeError:
3537
not_valid_after = self._cert.not_valid_after_utc
36-
return datetime.datetime.now(datetime.timezone.utc) >= not_valid_after
38+
return datetime.now(datetime.timezone.utc) >= not_valid_after
3739

3840
Certificate.has_expired = _patched_has_expired
3941

4042

43+
def _register_auth_serializer():
44+
"""Register a minimal auth serializer before setup_security() is called.
45+
The actual message signing is handled by setup_security().
46+
This is needed because setup_security() tries to enable the auth serializer
47+
but it must be registered first."""
48+
49+
def _encode_auth(data):
50+
return json.dumps(data).encode('utf-8'), 'application/auth'
51+
52+
def _decode_auth(data):
53+
if isinstance(data, bytes):
54+
data = data.decode('utf-8')
55+
return json.loads(data)
56+
57+
register('auth', _encode_auth, _decode_auth, content_type='application/auth')
58+
59+
4160
def _check_certificate_files():
4261
key_path = CeleryConfig.security_key
4362
cert_path = CeleryConfig.security_certificate
@@ -63,6 +82,7 @@ def make_celery(name):
6382
)
6483

6584
if _check_certificate_files():
85+
_register_auth_serializer()
6686
_patch_celery_cert_datetime()
6787
setup_security(
6888
allowed_serializers=['auth'],

0 commit comments

Comments
 (0)