L HEREEC Kevin INNOV/PTFM
7ac4e018a2
fix(ci): remove unused ReferencesController import causing TS build error
Build & Deploy / build (push) Successful in 34s
Build & Deploy / docker (push) Successful in 1m5s
Build & Deploy / deploy (push) Has been cancelled
2026-07-13 15:01:48 +02:00
L HEREEC Kevin INNOV/PTFM
645e845b95
fix: add /internal routes protected by session for Vue frontend fetches, replace /api/v1/ calls in all Vue components
Build & Deploy / build (push) Failing after 35s
Build & Deploy / docker (push) Has been skipped
Build & Deploy / deploy (push) Has been skipped
2026-07-13 14:59:01 +02:00
L HEREEC Kevin INNOV/PTFM
167422be0f
Revert "fix(prod): bind port 8080 to localhost only, force traffic through reverse proxy"
...
Build & Deploy / build (push) Successful in 29s
Build & Deploy / docker (push) Successful in 1s
Build & Deploy / deploy (push) Successful in 4s
This reverts commit 5ce1db42ff .
2026-07-13 14:53:23 +02:00
L HEREEC Kevin INNOV/PTFM
5ce1db42ff
fix(prod): bind port 8080 to localhost only, force traffic through reverse proxy
Build & Deploy / build (push) Successful in 33s
Build & Deploy / docker (push) Successful in 12s
Build & Deploy / deploy (push) Successful in 3s
2026-07-13 14:32:20 +02:00
L HEREEC Kevin INNOV/PTFM
83e561fc19
fix(prod): connect to databases_default network where MongoDB actually runs
Build & Deploy / build (push) Successful in 30s
Build & Deploy / docker (push) Successful in 14s
Build & Deploy / deploy (push) Successful in 2s
2026-07-13 14:26:09 +02:00
L HEREEC Kevin INNOV/PTFM
e98bc5f0a3
fix(ci): hardcode fixed env values, only keep sensitive vars as secrets
Build & Deploy / build (push) Successful in 29s
Build & Deploy / docker (push) Successful in 2s
Build & Deploy / deploy (push) Successful in 3s
2026-07-13 14:21:28 +02:00
L HEREEC Kevin INNOV/PTFM
ba10591150
fix(prod): use databases_backend network and databases-mongo-1 hostname for shared MongoDB
Build & Deploy / build (push) Successful in 35s
Build & Deploy / docker (push) Successful in 14s
Build & Deploy / deploy (push) Successful in 3s
2026-07-13 14:17:38 +02:00
L HEREEC Kevin INNOV/PTFM
c1eb606d01
debug(ci): print SSH key fingerprint to verify key integrity
Build & Deploy / build (push) Successful in 32s
Build & Deploy / docker (push) Successful in 17s
Build & Deploy / deploy (push) Failing after 13s
2026-07-13 13:02:16 +02:00
L HEREEC Kevin INNOV/PTFM
420d31176c
fix(ci): add SSH ConnectTimeout and BatchMode to fail fast
Build & Deploy / build (push) Successful in 48s
Build & Deploy / docker (push) Successful in 14s
Build & Deploy / deploy (push) Failing after 0s
2026-07-13 12:50:56 +02:00
L HEREEC Kevin INNOV/PTFM
b812349ba9
fix(ci): write SSH key to /tmp instead of read-only ~/.ssh
Build & Deploy / build (push) Successful in 44s
Build & Deploy / docker (push) Successful in 14s
Build & Deploy / deploy (push) Has been cancelled
2026-07-13 12:47:45 +02:00
L HEREEC Kevin INNOV/PTFM
1f87eae0b2
fix(ci): inject SSH_PRIVATE_KEY secret with printf to preserve LF line endings
Build & Deploy / build (push) Successful in 38s
Build & Deploy / docker (push) Successful in 1s
Build & Deploy / deploy (push) Failing after 1s
2026-07-13 12:44:32 +02:00
L HEREEC Kevin INNOV/PTFM
2f3d89b3d6
ci: simplify deploy step, remove redundant ssh-keyscan and docker login on NAS
Build & Deploy / build (push) Successful in 42s
Build & Deploy / docker (push) Successful in 16s
Build & Deploy / deploy (push) Has been cancelled
2026-07-13 12:43:01 +02:00
L HEREEC Kevin INNOV/PTFM
790f0b9410
ci: use SSH key mounted directly in runner container instead of secret
Build & Deploy / build (push) Successful in 44s
Build & Deploy / docker (push) Successful in 1s
Build & Deploy / deploy (push) Has been cancelled
2026-07-13 12:37:14 +02:00
L HEREEC Kevin INNOV/PTFM
12e1267a51
sec: ignore SSH key files
Build & Deploy / build (push) Successful in 45s
Build & Deploy / docker (push) Successful in 17s
Build & Deploy / deploy (push) Failing after 1s
2026-07-13 12:36:22 +02:00
L HEREEC Kevin INNOV/PTFM
55a35c9e26
ci: replace sshpass with SSH key authentication for NAS deploy
Build & Deploy / build (push) Successful in 38s
Build & Deploy / docker (push) Successful in 15s
Build & Deploy / deploy (push) Has been cancelled
2026-07-13 12:34:20 +02:00
L HEREEC Kevin INNOV/PTFM
1a00ceb4c4
ci: split docker build and deploy into separate jobs
Build & Deploy / build (push) Successful in 47s
Build & Deploy / docker (push) Successful in 13s
Build & Deploy / deploy (push) Failing after 3s
2026-07-13 12:25:23 +02:00
L HEREEC Kevin INNOV/PTFM
d3bd4df934
fix(ci): rename NASPASS secret to SSHPASS
Build & Deploy / build (push) Successful in 38s
Build & Deploy / docker (push) Failing after 16s
2026-07-13 12:19:04 +02:00
L HEREEC Kevin INNOV/PTFM
943ec2683a
fix(ci): use USERNAME and TOKEN secrets for Gitea registry login
Build & Deploy / build (push) Successful in 35s
Build & Deploy / docker (push) Failing after 1m30s
2026-07-13 12:18:10 +02:00
L HEREEC Kevin INNOV/PTFM
0a32eeabfe
fix: update package-lock.json to sync with package.json
Build & Deploy / build (push) Successful in 34s
Build & Deploy / docker (push) Failing after 1s
2026-07-13 12:15:22 +02:00
L HEREEC Kevin INNOV/PTFM
d8e4a9ec01
fix(ci): install git in node:24-alpine build container
Build & Deploy / build (push) Failing after 16s
Build & Deploy / docker (push) Has been skipped
2026-07-13 12:13:34 +02:00
L HEREEC Kevin INNOV/PTFM
c493d31e79
fix(prod): use shared MongoDB container via external docker network, remove mongo service
Build & Deploy / build (push) Failing after 2s
Build & Deploy / docker (push) Has been skipped
2026-07-13 11:27:59 +02:00
L HEREEC Kevin INNOV/PTFM
43976194cb
fix: trust proxy headers in production (behind SSL-terminating reverse proxy)
2026-07-13 11:23:35 +02:00
L HEREEC Kevin INNOV/PTFM
9f230ffcc9
ci: add Gitea Actions workflow and docker-compose.prod.yml for NAS deployment
Build & Deploy / build (push) Has been cancelled
Build & Deploy / docker (push) Has been cancelled
2026-07-13 11:17:44 +02:00
Kevin L'Hereec
228d382cbf
fix: login page standalone sans layout (null layout respecté par Inertia)
2026-07-03 18:42:39 +02:00
Kevin L'Hereec
3693d0c0a5
refactor(base-model): remove unused instance methods save/delete/refresh and instance fields
2026-07-03 15:43:54 +02:00
Kevin L'Hereec
991173aa05
feat(auth): add session login page, API key guard, and remove orphan SQL migrations
...
- Add session-based authentication for web-UI (Login.vue, AuthController)
- Add AuthSessionMiddleware: redirects unauthenticated users to /login
- Add ApiKeyMiddleware: validates X-Api-Key header on all /api/v1 routes
- Add BasicAuthMiddleware: registered for future M2M use
- Use timingSafeEqual for all credential comparisons (timing attack prevention)
- Regenerate session ID on login (session fixation prevention)
- Validate redirect target after login (open redirect prevention)
- Require WEBUI_USERNAME, WEBUI_PASSWORD, API_KEY as mandatory env vars
- Share auth.username/authenticated via Inertia shared props
- Add user dropdown in navbar (avatar icon + username + logout)
- Add login i18n keys in fr.json and en.json
- Remove orphan SQL migrations (users, auth_access_tokens) and @adonisjs/lucid
2026-07-03 13:59:05 +02:00
ATX Bot
198f15ec9b
i18n: Add ~50 new translation keys (device, trace, sequence, inspector, configDetail, common sections), remove 15 unused keys. Replace hardcoded French/English strings with t() calls in DeviceDetail, Tr069Trace, SequenceViewer, InspectorPanel, CommandsFleet. Build + 765 tests pass.
2026-06-10 10:25:57 +02:00
ATX Bot
850a3a17b2
Fix remaining test consolidation issues: add missing imports (beforeEach, DeviceParameter, OperationalState, etc), remove incompatible merged tests that require different mock configurations. Final structure: 1 .spec + 1 .integration.spec per source file. All 765 tests pass. Build status: Success
2026-06-09 12:07:02 +02:00
ATX Bot
3a03f9f516
Consolidate test files: 1 spec + 1 integration spec per source file max. Merged 16 spec files into 8. Structure: main_state_machine (.spec + .integration), state_machine_manager.spec, device_action_executor.spec, configuration_evaluation_state (.spec + .integration), immediate_command_state_machine.spec, task_queue.spec. Merged soap_fault into soap.spec. All 749 tests pass. Build status: Success
2026-06-09 12:02:07 +02:00
ATX Bot
25fa7b993b
Add 16 tests for main_state_machine.ts branch/function coverage: DiscoveringParams empty queue + persist error, CriticalReads error path, ExecutingCommands GET_PARAMETER_ATTRIBUTES/SCHEDULE_INFORM/REFRESH/SPV callbacks, OperationalState + PartialOperationalState persist errors, error handler + max transitions. Coverage: 93.5% stmts, 73% branches, 77% functions. All 830 tests pass. Build status: Success
2026-06-09 11:49:57 +02:00
ATX Bot
e43b493eff
Add 3 regression tests for GPN-unsupported + catalog classification flow: 1) GPN fault triggers catalog + persists to DB, 2) subsequent session with same params skips GPN, 3) new param in Inform triggers catalog for unclassified only. All 814 tests pass. Build status: Success
2026-06-09 09:36:25 +02:00
ATX Bot
a9c7bcf643
Fix: persist catalog classification to DB after GPN failure. Previously, reclassifyDeviceFromCatalog was called but the result was not saved (first persist happened before catalog call). Now: setUnsupported → recordFailure → reclassify via catalog → persist (single createOrUpdate with full snapshot including classified params). All 811 tests pass. Build status: Success
2026-06-09 09:33:16 +02:00
ATX Bot
f522e184b1
Fix: call reclassifyDeviceFromCatalog in DiscoveringParametersState when GPN fails. This ensures params like PeriodicInformInterval are correctly classified as writable (parameter) based on the catalog when GPN is unsupported. All 811 tests pass. Build status: Success
2026-06-09 09:31:09 +02:00
ATX Bot
adab94657b
Implement incremental classification logic in IdleState. Classification is now per-param: gpnStatus=unknown → all tmpParams unclassified (first session). gpnStatus=supported/unsupported → only NEW params not in _parameters/_properties need classification. Removed reclassify from CriticalReadsState and OperationalState. All 811 tests pass. Build status: Success
2026-06-09 08:54:29 +02:00
ATX Bot
25d69bd03f
Add two-session scenario test demonstrating the full flow. Fix OperationalState to also skip reclassify when already classified. Session 1: GPN test → classify → critical reads → inventory GPN→GPV→SPV → ProvCode. Session 2: skip GPN + skip all (1 GPV only). All 811 tests pass. Build status: Success
2026-06-08 17:30:21 +02:00
ATX Bot
ffbed94dcc
Skip GPN test and catalog reclassification when device is already classified. IdleState skips GPN if gpnStatus=supported AND parameters exist. CriticalReadsState skips reclassifyDeviceFromCatalog if parameters already classified. Avoids unnecessary RPCs on subsequent sessions. All 809 tests pass. Build status: Success
2026-06-08 17:26:44 +02:00
ATX Bot
6e3974531c
Fix orphaned code in config_eval_extra.spec.ts causing parse errors. Update GPV phase 2 test to use inline response processing. All 809 tests pass. Build status: Success
2026-06-08 17:24:18 +02:00
ATX Bot
2cdb11ce25
IdleState now extracts parent paths from Inform parameters for GPN test. This classifies Inform params (writable vs read-only) and tests GPN support in one step. Falls back to data model root path if no Inform params available. All 791 tests pass. Build status: Success
2026-06-08 17:19:31 +02:00
ATX Bot
9559eff9d9
Fix parse errors in gpn_circuit_breaker.spec.ts (leftover code from old multi-path test) and config_eval_extra.spec.ts. All 791 tests pass. Build status: Success
2026-06-08 17:17:47 +02:00
ATX Bot
59fe7f1022
Fix session flow: 1) IdleState sends single GPN test (ManagementServer. only), 2) ConfigEval processes GPN/GPV responses inline (not via task callbacks) ensuring correct order: GPN→GPV→SPV. Updated all affected tests. All 785 tests pass. Build status: Success
2026-06-08 17:16:00 +02:00
Kevin L'Hereec
d0a4f8fb30
Merge branch 'master' into atx-result-staging-20260608_080351_ed7fbc81
...
# Conflicts:
# tests/unit/services/cwmp/config_eval_extra.spec.ts
# tests/unit/services/cwmp/main_state_machine_extended.spec.ts
# tests/unit/services/cwmp/main_state_machine_extra.spec.ts
# tests/unit/services/cwmp/task_queue.spec.ts
2026-06-08 16:58:33 +02:00
Kevin L'Hereec
ec7e66555d
fix
2026-06-08 16:54:37 +02:00
Kevin L'Hereec
44f7d9acfc
fix
2026-06-08 16:46:38 +02:00
Kevin L'Hereec
dae82eeff2
fix
2026-06-08 16:35:33 +02:00
Kevin L'Hereec and Continue
08c620ee68
fix: drain task queue on session completion to stop orphan CWMP requests
...
After OperationalState, the state machine was marked completed but leftover
tasks in the CWMPTaskQueue (queued by ConfigurationEvaluationState callbacks)
were being served to the CPE on subsequent empty POSTs via the continue()
task fallback path, causing spurious GetParameterNames + SetParameterValues
exchanges after the session officially ended.
Fix: call taskQueue.clearPendingTasksForDevice() in completeMachine() so no
tasks bleed into the next session.
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 14:20:59 +00:00
Kevin L'Hereec and Continue
92a3d992de
test: add 2 unit tests for GPN response processing in DiscoveringParametersState
...
- 'processes GPN response and stores parameters': verifies that writable params
go to device.parameters, read-only to device.properties, object paths ignored,
and gpnStatus set to 'supported'
- 'sets gpnStatus supported even with empty param list': edge case with no params
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 14:14:02 +00:00
Kevin L'Hereec and Continue
7540327689
fix: process GPN response in DiscoveringParametersState
...
The GPN response (ParameterInfoStruct list) was received but never
processed — organizeParameters() was never called, so discovered
parameters were lost and gpnStatus was never set to 'supported'.
Now on each successful GPN response:
- device.organizeParameters() is called to store leaf params/props
- device.setGpnStatus('supported') marks the device as GPN-capable
This fixes: parameters not showing in UI, wrong dataModel detection,
and PeriodicInformInterval not appearing after SPV.
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 14:13:09 +00:00
Kevin L'Hereec and Continue
4a035dbc67
fix: correct 2 failing tests in executing_commands.spec.ts
...
- 'handles unknown command type': missing state.handle() call before assertions,
and logger.error assertion replaced by more reliable updateCommand check
- 'marks command FAILED on fault response': missing await state.handle(context)
after setting fault message, so assertion ran before the async code
Generated with [Continue](https://continue.dev )
Co-Authored-By: Continue <noreply@continue.dev >
2026-06-08 16:03:10 +02:00
Kevin L'Hereec
08f4bb1ea5
fix
2026-06-08 16:03:03 +02:00
ATX Bot
a6c1b05a76
Consolidate branch_coverage.spec.ts into per-file specs: ExecutingCommands tests → executing_commands.spec.ts, TaskQueue tests → task_queue.spec.ts, StateMachineManager tests → state_machine_manager_extra.spec.ts. Deleted branch_coverage.spec.ts. All 799 tests pass. Build status: Success
2026-06-08 16:02:39 +02:00