Skip to content

Commit 9b0af6d

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 <ffabre@hybird.org>
1 parent 287b0ee commit 9b0af6d

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
@@ -1541,9 +1541,16 @@ def test_models_documents_post_save_indexer_deleted(mock_push, indexer_settings)
15411541
user = factories.UserFactory()
15421542

15431543
with transaction.atomic():
1544-
doc = factories.DocumentFactory()
1545-
doc_deleted = factories.DocumentFactory()
1546-
doc_ancestor_deleted = factories.DocumentFactory(parent=doc_deleted)
1544+
doc = factories.DocumentFactory(
1545+
link_reach=models.LinkReachChoices.AUTHENTICATED
1546+
)
1547+
doc_deleted = factories.DocumentFactory(
1548+
link_reach=models.LinkReachChoices.AUTHENTICATED
1549+
)
1550+
doc_ancestor_deleted = factories.DocumentFactory(
1551+
parent=doc_deleted,
1552+
link_reach=models.LinkReachChoices.AUTHENTICATED,
1553+
)
15471554
doc_deleted.soft_delete()
15481555
doc_ancestor_deleted.ancestors_deleted_at = doc_deleted.deleted_at
15491556

@@ -1596,9 +1603,16 @@ def test_models_documents_post_save_indexer_restored(mock_push, indexer_settings
15961603
user = factories.UserFactory()
15971604

15981605
with transaction.atomic():
1599-
doc = factories.DocumentFactory()
1600-
doc_deleted = factories.DocumentFactory()
1601-
doc_ancestor_deleted = factories.DocumentFactory(parent=doc_deleted)
1606+
doc = factories.DocumentFactory(
1607+
link_reach=models.LinkReachChoices.AUTHENTICATED
1608+
)
1609+
doc_deleted = factories.DocumentFactory(
1610+
link_reach=models.LinkReachChoices.AUTHENTICATED
1611+
)
1612+
doc_ancestor_deleted = factories.DocumentFactory(
1613+
parent=doc_deleted,
1614+
link_reach=models.LinkReachChoices.AUTHENTICATED,
1615+
)
16021616
doc_deleted.soft_delete()
16031617
doc_ancestor_deleted.ancestors_deleted_at = doc_deleted.deleted_at
16041618

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)