Commit Graph
22 Commits
Author SHA1 Message Date
Jeppe B ab6c3ba5b6 Fix route permission instance calls (#344)
## Root cause

`route_t::hasPermission()` and `requirePermission()` are instance
methods. Route code was invoking them with `self::`; the new XL Vask
hall-scope helper made that call from a genuinely static context,
causing PHP to throw:

`Non-static method routes\\xlvaskUsageLogsRoute::hasPermission() cannot
be called statically`

## Changes

- Invoke route permission methods through `$this` across all 273
executable legacy calls in 45 route classes.
- Make `xlvaskUsageLogsRoute::allowedHallIdsForUser()` an instance
helper and update all 13 callers.
- Preserve the existing all-scope and own-scope hall selection rules.
- Add a token-aware regression test that rejects executable
`self::hasPermission()` and `self::requirePermission()` calls, while
ignoring comments.
- Add focused XL Vask tests for global scanner hall scope and
group-limited own scope.
- Update affected route contract assertions to the instance-call form.

## Verification

- PHP lint: all 53 changed PHP files
- Focused PHPStan: changed XL Vask route and both new regression tests —
clean
- Focused regression slice: 58 passed, 748 assertions
- Full local unit suite: 1,300 passed, 9,442 assertions (1 unrelated
existing warning, 1 environment skip)
- Full local API suite: 285 passed, 11,704 assertions
- Exact-SHA GitHub Tests workflow: all 7 jobs passed (unit, API,
integration, legacy, edge gateway, and supporting checks)
- Independent exact-SHA QA gate: PASS, no findings
- Independent exact-SHA security gate: PASS, no findings
- Independent exact-SHA reviewer gate: PASS, no findings
- Remote comparison: exactly one commit ahead of
`40b104abed7723a7d1b7028190ecda0e7aeef829`; all 53 remote blob hashes
matched the reviewed worktree

## Delivery state

Draft only for human review. No merge or deployment is included. Qodana
is skipped while the PR remains draft and is therefore not represented
as a passed gate.
2026-08-04 16:04:41 +02:00
copilot-swe-agent[bot] fe9daf1bf2 Merge remote-tracking branch 'origin/master' into fix-unauthenticated-bird-voice-webhook
# Conflicts:
#	services/nginx/app/routes/birdVoiceWebhooksRoute.php
2026-06-01 22:27:40 +00:00
Jeppe B cc00fb2aed Reinstate auth on Bird inbound voice webhook 2026-06-02 00:23:58 +02:00
Jeppe Bundgaard d267fb0f09 Expand Bird Voice Webhook tests to cover scenarios with shared gates and distinct entrance/exit gates, refine payload validation, and enhance gate resolution logic. 2026-04-13 17:55:53 +02:00
Jeppe Bundgaard 8465ee794d Add API test suite for Bird Voice Webhook endpoints, including comprehensive lifecycle tests for inbound call handling scenarios. Extend fixtures with department gate creation support and update OpenAPI spec validations. 2026-04-13 17:08:37 +02:00
Jeppe Bundgaard 9e9372db05 Add unit tests for Bird department gate phone call logic, Edge Broker configuration, and gateway heartbeat status. Refactor warnings handling, Slack notifications, Bird client usage, and Edge gateway probes for improved maintainability and error clarity. 2026-04-09 08:53:10 +02:00
Jeppe Bundgaard 551161b692 Add unit tests for Bird webhook lifecycle, economic customer handling, and payment terms routes with improved error scenarios and response validation. Refactor configuration to support economic API fallback tokens. 2026-04-01 17:44:25 +02:00
Jeppe Bundgaard 368e03ce48 Remove redundant methods and IVR handling logic from Bird voice call webhook route, focusing on streamlined call flow and improved maintainability. 2026-03-27 11:15:27 +01:00
Jeppe Bundgaard 0d825fb45a Refactor Bird voice call route with streamlined call flow, department options listing, and removed redundant methods. Adjust self-serve lane command invoicing logic for better sequence clarity. 2026-03-26 18:29:21 +01:00
Jeppe Bundgaard f148b39a85 Add unit tests for legacy schema compatibility, property gate commands, lane state transitions, and relay synchronization. Extend relay logic with demo relay handling, dynamic image updates, phone normalization, and machine relay hard set methods. 2026-03-26 11:11:34 +01:00
Jeppe Bundgaard d82c7d88ec Implement Bird gate IVR flow 2026-03-09 11:03:45 +01:00
Jeppe Bundgaard 5d1980768a Refactor birdVoiceWebhooksRoute to simplify gate handling by removing single-gate auto-selection logic, enhance multi-gate prompt text, and improve configuration parsing in callGateToOpen. 2026-03-04 16:11:54 +01:00
Jeppe Bundgaard d24a2c7cec Refactor birdVoiceWebhooksRoute to simplify gate handling by removing single-gate auto-selection logic, enhance multi-gate prompt text, and improve configuration parsing in callGateToOpen. 2026-03-04 14:39:30 +01:00
Jeppe Bundgaard 72a4c91e5f Refactor Bird API client to extract reusable executeCallAndHangupWhenAccepted method, update callGateAndHangupWhenAccepted and test outbound call logic to use shared implementation, and enhance timeout handling. 2026-03-04 14:24:11 +01:00
Jeppe Bundgaard da8a01479b Add callGateAndHangupWhenAccepted method to Bird API client, refactor gate opening logic in birdVoiceWebhooksRoute, and implement separate entrance/exit gate handling in department_gates_o. 2026-03-04 14:16:53 +01:00
Jeppe Bundgaard 342209fd2f Add input gathering feature to Bird API client and routes, integrate multi-gate selection flow in birdVoiceWebhooksRoute, and enhance error handling for invalid or expired sessions. 2026-03-04 13:43:19 +01:00
Jeppe Bundgaard 84ba2a1fad Localize user-facing messages in birdVoiceWebhooksRoute to Danish. 2026-03-04 13:25:28 +01:00
Jeppe Bundgaard 4f5ce36667 Simplify getCallerDepartments in birdVoiceWebhooksRoute by removing redundant user and subuser handling, reducing logic to fetch visible department IDs. 2026-03-04 13:20:23 +01:00
Jeppe Bundgaard db41842162 Enhance birdVoiceWebhooksRoute to handle automated gate opening via inbound calls, introduce gate/relay identification methods, refactor phone normalization logic, and improve error handling for unmatched destinations and departments. 2026-03-04 13:13:37 +01:00
Jeppe Bundgaard 96629cba0d Add sayMessage method to Bird API client, extend birdVoiceWebhooksRoute with TTS capability for inbound calls, introduce /bird/voice/calls/{id}/say route, and update OpenAPI spec accordingly. 2026-03-04 12:47:44 +01:00
Jeppe B 37f0f280d8 Adjust Bird inbound department prompt to press-digit menu 2026-03-04 11:17:57 +01:00
Jeppe Bundgaard a69df10b77 Add birdVoiceWebhooksRoute to handle incoming voice call webhooks, support fallback workspace and channel configuration, and send Slack notifications for inbound calls 2026-03-04 10:57:17 +01:00