Skip to content

feat: Story 022 — Device Provisioning#54

Merged
iagocavalcante merged 5 commits intomainfrom
feat/story-022-device-provisioning
Mar 25, 2026
Merged

feat: Story 022 — Device Provisioning#54
iagocavalcante merged 5 commits intomainfrom
feat/story-022-device-provisioning

Conversation

@iagocavalcante
Copy link
Copy Markdown
Contributor

Summary

Implements Story 022: Device Provisioning — allows organizers to provision check-in devices for volunteers via short initialization tokens.

  • Token generation — organizers generate 8-char codes (XXXX-XXXX) with 24h expiry, single use
  • Device provisioning — volunteers enter token to provision their phone, receive long-lived API token
  • Device management — admin LiveView listing all devices with status, last seen, and revoke action
  • Revocation — organizer revokes access with confirmation, device can no longer authenticate
  • Organization scoping — devices belong to one org, can only access that org's data
  • Sidebar navigation — "Dispositivos" entry in org-level admin sidebar
  • Provisioning APIPOST /api/devices/provision (no auth, token IS the auth)

Files changed (9 files, ~450 lines)

Area Files
Database Migration: devices + device_init_tokens tables
Schemas Device, DeviceInitToken
Context Pretex.Devices — token gen, provisioning, auth, revocation
API DeviceControllerPOST /api/devices/provision
LiveView DeviceLive.Index — token display, device list, revoke
Navigation Sidebar "Dispositivos" entry
Tests 13 tests covering all provisioning scenarios

Closes #22

Test plan

  • All 1500 tests pass (0 failures)
  • Compilation clean with --warnings-as-errors
  • Manual: Navigate to org sidebar → Dispositivos link visible
  • Manual: Generate token → 8-char code displayed
  • Manual: curl -X POST /api/devices/provision -d '{"token":"XXXX-XXXX","device_name":"Test"}' → returns API token
  • Manual: Device appears in list after provisioning
  • Manual: Revoke device → status changes to "Revogado"
  • Manual: Same token cannot be reused

@iagocavalcante iagocavalcante merged commit 1c39fd8 into main Mar 25, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Story 022: Device Provisioning

1 participant