Commit Graph
132 Commits
Author SHA1 Message Date
Kevin L'Hereec d44d896556 fix: persist empty POST in TR-069 trace when CPE uses a new TCP port
Build & Deploy / build (push) Successful in 38s
Build & Deploy / docker (push) Successful in 1m5s
Build & Deploy / deploy (push) Successful in 23s
When a CPE sends an empty POST (polling) on a new TCP connection, the
remoteKey (IP:port) differs from the one registered during Inform.
Add StateMachineManager.getHashIdForRemoteIp() to find the device by
IP alone as a fallback, so cwmpDeviceId is resolved and the exchange
is properly stored in the trace (cwmpMethod: Empty, dashed arrow).
2026-07-17 14:24:44 +02:00
Kevin L'Hereec 3bb85d9031 fix: support alias-based IPv6 interface names and add engine reset utility
Build & Deploy / build (push) Successful in 30s
Build & Deploy / docker (push) Successful in 1m4s
Build & Deploy / deploy (push) Successful in 35s
- Home.vue: extend RE_IPV4/RE_IPV6 to match alias-based interface names
  like Device.IP.Interface.[BR_LAN].IPv6Address.[GUA_LAN].IPAddress
  (used by Sagemcom Livebox 4 with AliasBasedAddressing=1)
- reference_engine.ts: add resetReferenceEngine() to allow config reload
  without restart (wassup provider disabled via config/references.json)
2026-07-17 14:21:02 +02:00
Kevin L'Hereec 1fc9715888 fix: display IPv6 address in device table and disable wassup provider
Build & Deploy / build (push) Successful in 31s
Build & Deploy / docker (push) Successful in 1m3s
Build & Deploy / deploy (push) Successful in 24s
- Home.vue: add getIpAddress() with IPv4/IPv6 fallback chain (TR-098, TR-181)
  hoisted regex constants, prefer interface index 1, format IPv6 with brackets
- config/references.json: disable wassup provider (mock URL unreachable)
2026-07-17 11:57:09 +02:00
kevin.lhereec b12141792f fix: supprimer import logger inutilise dans cwmp_middleware (TS6133)
Build & Deploy / build (push) Successful in 40s
Build & Deploy / docker (push) Successful in 1m6s
Build & Deploy / deploy (push) Successful in 25s
2026-07-17 10:39:48 +02:00
kevin.lhereec 7932b43840 chore: passer LOG_LEVEL en debug pour le prochain deploiement
Build & Deploy / build (push) Failing after 34s
Build & Deploy / docker (push) Skipped
Build & Deploy / deploy (push) Skipped
2026-07-17 10:38:29 +02:00
kevin.lhereec 5ea25d462e feat: logs debug sur les echanges XML CWMP
Build & Deploy / build (push) Failing after 36s
Build & Deploy / docker (push) Skipped
Build & Deploy / deploy (push) Skipped
- cwmp_middleware: log XML brut recu (bodyPreview 500 chars), contentType,
  bodyLength, et message extrait (type, cwmpVersion, cwmpId, messageKeys)
  + log body vide (CPE polling)
- cwmp_logger_middleware: log XML pretty-print complet CPE->ACS et ACS->CPE
  en debug, independamment du statut trace
- cwmp_controller: log routage message (messageType), InformResponse,
  TransferCompleteResponse, reponses state machine avec longueur
2026-07-17 10:36:57 +02:00
kevin.lhereec ebe088a179 fix: couleur bandeau trace orange -> pink
Build & Deploy / build (push) Successful in 35s
Build & Deploy / docker (push) Successful in 55s
Build & Deploy / deploy (push) Successful in 22s
2026-07-17 10:33:23 +02:00
kevin.lhereec b00c0c94a8 feat: suppression des commandes PENDING depuis /commands
Build & Deploy / build (push) Successful in 40s
Build & Deploy / docker (push) Successful in 1m4s
Build & Deploy / deploy (push) Successful in 26s
- Ajout de destroy() dans CommandsController (DELETE /commands/:id)
- Routes DELETE /commands/:id dans les groupes /api/v1 et /internal
- Bouton supprimer dans Commands.vue visible uniquement sur les commandes PENDING
- Utilise fetchWithCsrf pour la protection CSRF
2026-07-17 10:31:56 +02:00
kevin.lhereec b22d3e9b56 fix: correction subnet IPv6 ULA (fd00:adam:: invalide -> fd00:ad4a::)
Build & Deploy / build (push) Successful in 33s
Build & Deploy / docker (push) Successful in 15s
Build & Deploy / deploy (push) Successful in 4s
2026-07-17 10:22:06 +02:00
kevin.lhereec 8cddf98093 fix: CSRF token sur les requetes mutantes /internal + IPv6 Docker + tests Connection Request
Build & Deploy / build (push) Successful in 30s
Build & Deploy / docker (push) Successful in 1m6s
Build & Deploy / deploy (push) Failing after 33s
- Ajout de fetchWithCsrf() helper qui lit le cookie XSRF-TOKEN et injecte
  X-XSRF-TOKEN sur toutes les requetes POST/PUT/PATCH/DELETE vers /internal/*
- Remplacement de fetch() par fetchWithCsrf() dans tous les composants Vue
  concernes (Tr069Trace, DeviceDetail, SequenceViewer, Home, configurations,
  firmware_catalog)
- Activation IPv6 sur les reseaux Docker (enable_ipv6: true, subnet fd00:adam::/64)
  dans docker-compose.yml et docker-compose.prod.yml
- Ajout tests unitaires DeviceService.sendWakeOnWlan : IPv4, IPv6, ENETUNREACH,
  credentials fallback chain (11 tests)
2026-07-17 10:16:29 +02:00
L HEREEC Kevin INNOV/PTFM 63ee6f94f1 fix: prefix internal routes group with .as('internal') to avoid duplicate route names
Build & Deploy / build (push) Successful in 40s
Build & Deploy / docker (push) Successful in 1m3s
Build & Deploy / deploy (push) Successful in 21s
2026-07-13 15:06:43 +02:00
L HEREEC Kevin INNOV/PTFM e645157970 feat: auto-run MongoDB migrations at boot in MongodbProvider
Build & Deploy / build (push) Successful in 34s
Build & Deploy / docker (push) Successful in 1m8s
Build & Deploy / deploy (push) Successful in 24s
2026-07-13 15:03:19 +02:00
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