Skip to content

Commit 95d0ef6

Browse files
committed
🔧(backend) force a valid key for token storage in development mode
Generate a fernet key for the OIDC_STORE_REFRESH_TOKEN_KEY in development settings if not set. Signed-off-by: Fabre Florian <[email protected]>
1 parent 85f1203 commit 95d0ef6

File tree

4 files changed

+41
-9
lines changed

4 files changed

+41
-9
lines changed

bin/fernetkey

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env bash
2+
3+
# shellcheck source=bin/_config.sh
4+
source "$(dirname "${BASH_SOURCE[0]}")/_config.sh"
5+
6+
_dc_run app-dev python -c 'from cryptography.fernet import Fernet;import sys; sys.stdout.write("\n" + Fernet.generate_key().decode() + "\n");'

env.d/development/common

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,12 @@ OIDC_REDIRECT_ALLOWED_HOSTS=["http://localhost:8083", "http://localhost:3000"]
5050
OIDC_AUTH_REQUEST_EXTRA_PARAMS={"acr_values": "eidas1"}
5151

5252
# Store OIDC tokens in the session
53-
OIDC_STORE_ACCESS_TOKEN = True # Store the access token in the session
54-
OIDC_STORE_REFRESH_TOKEN = True # Store the encrypted refresh token in the session
55-
OIDC_STORE_REFRESH_TOKEN_KEY = ThisIsAnExampleKeyForDevPurposeOnly
53+
OIDC_STORE_ACCESS_TOKEN = True
54+
OIDC_STORE_REFRESH_TOKEN = True # Store the encrypted refresh token in the session.
55+
56+
# Must be a valid Fernet key (32 url-safe base64-encoded bytes)
57+
# To create one, use the bin/fernetkey command.
58+
# OIDC_STORE_REFRESH_TOKEN_KEY="your-32-byte-encryption-key=="
5659

5760
# AI
5861
AI_FEATURE_ENABLED=true

src/backend/core/tests/test_models_documents.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,9 +1507,16 @@ def test_models_documents_post_save_indexer_deleted(mock_push, indexer_settings)
15071507
user = factories.UserFactory()
15081508

15091509
with transaction.atomic():
1510-
doc = factories.DocumentFactory()
1511-
doc_deleted = factories.DocumentFactory()
1512-
doc_ancestor_deleted = factories.DocumentFactory(parent=doc_deleted)
1510+
doc = factories.DocumentFactory(
1511+
link_reach=models.LinkReachChoices.AUTHENTICATED
1512+
)
1513+
doc_deleted = factories.DocumentFactory(
1514+
link_reach=models.LinkReachChoices.AUTHENTICATED
1515+
)
1516+
doc_ancestor_deleted = factories.DocumentFactory(
1517+
parent=doc_deleted,
1518+
link_reach=models.LinkReachChoices.AUTHENTICATED,
1519+
)
15131520
doc_deleted.soft_delete()
15141521
doc_ancestor_deleted.ancestors_deleted_at = doc_deleted.deleted_at
15151522

@@ -1562,9 +1569,16 @@ def test_models_documents_post_save_indexer_restored(mock_push, indexer_settings
15621569
user = factories.UserFactory()
15631570

15641571
with transaction.atomic():
1565-
doc = factories.DocumentFactory()
1566-
doc_deleted = factories.DocumentFactory()
1567-
doc_ancestor_deleted = factories.DocumentFactory(parent=doc_deleted)
1572+
doc = factories.DocumentFactory(
1573+
link_reach=models.LinkReachChoices.AUTHENTICATED
1574+
)
1575+
doc_deleted = factories.DocumentFactory(
1576+
link_reach=models.LinkReachChoices.AUTHENTICATED
1577+
)
1578+
doc_ancestor_deleted = factories.DocumentFactory(
1579+
parent=doc_deleted,
1580+
link_reach=models.LinkReachChoices.AUTHENTICATED,
1581+
)
15681582
doc_deleted.soft_delete()
15691583
doc_ancestor_deleted.ancestors_deleted_at = doc_deleted.deleted_at
15701584

src/backend/impress/settings.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import sentry_sdk
2020
from configurations import Configuration, values
21+
from cryptography.fernet import Fernet
2122
from csp.constants import NONE
2223
from lasuite.configuration.values import SecretFileValue
2324
from sentry_sdk.integrations.django import DjangoIntegration
@@ -944,6 +945,14 @@ class Development(Base):
944945
},
945946
}
946947

948+
# There is no key for token storage in default configuration.
949+
# In development environment we can create one if needed.
950+
OIDC_STORE_REFRESH_TOKEN_KEY = values.Value(
951+
default=Fernet.generate_key().decode(),
952+
environ_name="OIDC_STORE_REFRESH_TOKEN_KEY",
953+
environ_prefix=None,
954+
)
955+
947956
def __init__(self):
948957
# pylint: disable=invalid-name
949958
self.INSTALLED_APPS += ["django_extensions", "drf_spectacular_sidecar"]

0 commit comments

Comments
 (0)