72 lines
3.6 KiB
Markdown
72 lines
3.6 KiB
Markdown
---
|
|
phase: 117-smsplanet-integration
|
|
plan: 01
|
|
completed: 2026-05-12
|
|
status: complete-with-environment-gaps
|
|
---
|
|
|
|
# Summary: SMSPLANET Integration Settings + Test SMS
|
|
|
|
## Result
|
|
|
|
Implemented the first SMSPLANET integration slice: one global configuration screen, encrypted credentials, support for Bearer token and key + password authorization, hub visibility, and a real test SMS flow using `POST https://api2.smsplanet.pl/sms`.
|
|
|
|
The implementation also fixes the integration settings checkbox/radio layout reported during UAT by moving the options into the existing compact SCSS component.
|
|
|
|
## Acceptance Criteria
|
|
|
|
| AC | Status | Notes |
|
|
|----|--------|-------|
|
|
| AC-1 Configuration save | PASS | `SmsplanetIntegrationRepository` stores one global row, encrypts token/key/password, and never returns secrets to the view. |
|
|
| AC-2 Two auth methods | PASS | Bearer token sends `Authorization: Bearer ...`; key + password sends credentials in form payload. First save requires complete credentials for the selected method. |
|
|
| AC-3 Validation | PASS | Save/test validate CSRF, sender, selected auth method, phone number and message length before API calls. |
|
|
| AC-4 Real test SMS | IMPLEMENTED, MANUAL PENDING | API client performs real send and does not set `test=1`. Manual live send is pending because local DB/migration verification was blocked. |
|
|
| AC-5 Hub visibility | PASS | `IntegrationsHubController` includes SMSPLANET with configuration, secret, active and last-test status. |
|
|
| AC-6 Docs/compliance | PASS WITH TOOLING GAPS | DOCS and `.paul/codebase` updated. PHP lint/build passed. Migration, PHPUnit and Sonar were blocked by local tooling/environment. |
|
|
|
|
## Verification
|
|
|
|
Passed:
|
|
- `C:\xampp\php\php.exe -l` for all new/modified PHP files in this phase.
|
|
- `npm run build --if-present`.
|
|
- `git diff --check`.
|
|
|
|
Blocked or unavailable:
|
|
- `C:\xampp\php\php.exe bin\migrate.php` failed because local MySQL refused the connection: `SQLSTATE[HY000] [2002]`.
|
|
- `vendor\bin\phpunit` was not available: `Could not open input file`.
|
|
- `sonar-scanner` was not available in PATH.
|
|
- Manual real SMSPLANET send remains pending until the migration is applied and valid SMSPLANET credentials are tested.
|
|
|
|
## Deviations
|
|
|
|
- `api_key` is stored as `api_key_encrypted` rather than plaintext. This is stricter than the draft task and consistent with the requirement that credentials are secrets.
|
|
- `IntegrationSecretCipher` had an invalid namespace import and was fixed because SMSPLANET and existing integrations depend on it at runtime.
|
|
- Checkbox/radio UI was adjusted in `resources/scss/app.scss` after the UAT screenshot showed inconsistent native control sizing/alignment.
|
|
|
|
## Files Changed
|
|
|
|
- `.paul/codebase/architecture.md`
|
|
- `.paul/codebase/db_schema.md`
|
|
- `.paul/codebase/tech_changelog.md`
|
|
- `.paul/phases/117-smsplanet-integration/117-01-PLAN.md`
|
|
- `.paul/phases/117-smsplanet-integration/117-01-SUMMARY.md`
|
|
- `DOCS/ARCHITECTURE.md`
|
|
- `DOCS/DB_SCHEMA.md`
|
|
- `DOCS/TECH_CHANGELOG.md`
|
|
- `database/migrations/20260512_000108_create_smsplanet_integration_settings.sql`
|
|
- `resources/lang/pl.php`
|
|
- `resources/scss/app.scss`
|
|
- `resources/views/settings/smsplanet.php`
|
|
- `routes/web.php`
|
|
- `src/Modules/Settings/IntegrationSecretCipher.php`
|
|
- `src/Modules/Settings/IntegrationsHubController.php`
|
|
- `src/Modules/Settings/SmsplanetApiClient.php`
|
|
- `src/Modules/Settings/SmsplanetIntegrationController.php`
|
|
- `src/Modules/Settings/SmsplanetIntegrationRepository.php`
|
|
|
|
## Follow-Up
|
|
|
|
- Start local MySQL/XAMPP and run `C:\xampp\php\php.exe bin\migrate.php`.
|
|
- Save real SMSPLANET credentials and run both manual test paths: Bearer token and key + password.
|
|
- Run Sonar once `sonar-scanner` is available.
|