KamoCRM

Seal member VoIP credentials at rest with PlatformSecretCipher; re-seal legacy rows at boot

FixVOIPService
Shipped
October 14, 2026 at 4:21 PM UTC
Author
Kamo
Commit
e7b4dcd

**************** held each member's access token, refresh token (Teams, RingCentral OAuth) and RingCentral JWT assertion exactly as the provider issued them. Every write in RingCentralMemberOAuthService, **************** TeamsOAuthService and TeamsMemberTokenResolver now goes through MemberVoipTokenSealer.seal ('kenc1:' + AES-256-GCM under platform.enc-key) and every read through open, which hands legacy plaintext back unchanged. Fails closed: with no key a credential is refused rather than stored as plaintext, and a sealed value is never returned undecrypted. MemberVoipTokenSealing re-seals legacy values once at boot on one pod (SingletonTaskRunner), idempotent, compare-and-set per value so a refresh that rotated a token in between is never overwritten. Live: one row (a RingCentral JWT) to re-seal; platform-enc-key is mounted on kamovoip.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing