(backend) add development service for drive

The create_demo command will now create a 'drive' service for development
purpose.
Add setup documentation.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
This commit is contained in:
Fabre Florian
2025-10-14 15:31:21 +02:00
parent 3a69b59973
commit fdabd556ef
6 changed files with 64 additions and 7 deletions
+1
View File
@@ -21,3 +21,4 @@ and this project adheres to
- ✨(backend) limit search to the calling app (audience) and a configured
list of services
- 🔧(compose) rename docker network 'lasuite-net' as 'lasuite-network'
- ✨(backend) add demo service for Drive.
+4 -5
View File
@@ -21,13 +21,12 @@ Add those Django settings the Docs application to enable the feature.
SEARCH_INDEXER_CLASS="core.services.search_indexers.FindDocumentIndexer"
SEARCH_INDEXER_COUNTDOWN=10 # Debounce delay in seconds for the indexer calls.
# Indexation endpoint.
SEARCH_INDEXER_SECRET=my-token-from-the-find-impress-service
# The token from service "docs" of Find application.
SEARCH_INDEXER_URL="http://app-find:8000/api/v1.0/documents/index/"
# The token from service "docs" of Find application (development).
SEARCH_INDEXER_SECRET="find-api-key-for-docs-with-exactly-50-chars-length"
SEARCH_INDEXER_URL="http://find:8000/api/v1.0/documents/index/"
# Search endpoint. Uses the OIDC token for authentication
SEARCH_INDEXER_QUERY_URL="http://app-find:8000/api/v1.0/documents/search/"
SEARCH_INDEXER_QUERY_URL="http://find:8000/api/v1.0/documents/search/"
```
We also need to enable the **OIDC Token** refresh or the authentication will fail quickly.
+43
View File
@@ -0,0 +1,43 @@
# Setup the Find search for Drive
This configuration will enable the fulltext search feature for Docs :
- Each save on **core.Item** or **core.Item** will trigger the indexer
- Once indexer service configured, the `api/v1.0/item/search/` will work as a proxy with the Find API for fulltext search.
## Create an index service for Drive
Configure a **Service** for Docs application with these settings
- **Name**: `drive`<br>_request.auth.name of the Docs application._
- **Client id**: `drive`<br>_Name of the token audience or client_id of the Docs application._
See [how-to-use-indexer.md](how-to-use-indexer.md) for details.
## Configure settings of Drive
Add those Django settings the Docs application to enable the feature.
```python
SEARCH_INDEXER_CLASS="core.services.search_indexers.SearchIndexer"
SEARCH_INDEXER_COUNTDOWN=10 # Debounce delay in seconds for the indexer calls.
# The token from service "drive" of Find application (development)
SEARCH_INDEXER_SECRET=find-api-key-for-driv-with-exactly-50-chars-length
SEARCH_INDEXER_URL="http://find:8000/api/v1.0/documents/index/"
# Search endpoint. Uses the OIDC token for authentication
SEARCH_INDEXER_QUERY_URL="http://find:8000/api/v1.0/documents/search/"
# Limit the mimetypes and size of indexable files
SEARCH_INDEXER_ALLOWED_MIMETYPES=["text/"]
SEARCH_INDEXER_UPLOAD_MAX_SIZE=2 * 2**20 # 2Mb
```
We also need to enable the **OIDC Token** refresh or the authentication will fail quickly.
```shell
# Store OIDC tokens in the session
OIDC_STORE_ACCESS_TOKEN = True # Store the access token in the session
OIDC_STORE_REFRESH_TOKEN = True # Store the encrypted refresh token in the session
OIDC_STORE_REFRESH_TOKEN_KEY = "your-32-byte-encryption-key==" # Must be a valid Fernet key (32 url-safe base64-encoded bytes)
```
+7 -1
View File
@@ -65,12 +65,18 @@ And add the key in the calling application Django settings.
**Development Mode (Docs + Find)**
The command `make demo` will create a working service configuration for `docs` with the following secret key
The command `make demo` will create a working service configuration for `docs` and `drive` with predefined secret keys
```python
# Docs
SEARCH_INDEXER_SECRET="find-api-key-for-docs-with-exactly-50-chars-length"
```
```python
# Drive
SEARCH_INDEXER_SECRET="find-api-key-for-driv-with-exactly-50-chars-length"
```
## Setup search API
The **`/search/`** endpoint is an OIDC ResourceServer view and needs extra Django settings (see [lasuite](https://github.com/suitenumerique/django-lasuite/blob/main/documentation/how-to-use-oidc-resource-server-backend.md) for details)
+5
View File
@@ -8,4 +8,9 @@ DEV_SERVICES = (
"client_id": "impress",
"token": "find-api-key-for-docs-with-exactly-50-chars-length",
},
{
"name": "drive",
"client_id": "drive",
"token": "find-api-key-for-driv-with-exactly-50-chars-length",
},
)
@@ -26,8 +26,11 @@ def test_commands_create_demo():
"""The create_demo management command should create objects as expected."""
call_command("create_demo")
assert models.Service.objects.exclude(name="docs").count() == 2
assert models.Service.objects.exclude(name="docs").count() == 3
assert opensearch_client().count()["count"] == 4
docs = models.Service.objects.get(name="docs")
assert docs.client_id == "impress"
drive = models.Service.objects.get(name="drive")
assert drive.client_id == "drive"