- Shipped
- September 17, 2026 at 3:33 AM UTC
- Author
- Kamo
- Commit
- 3de80ea
PUT /api/oauth-config/{id} stored whatever arrived under clientSecret. Responses mask the secret, and the edit form sends a blank back while promising "Leave blank to keep existing secret", so saving ANY edit to a Google or Microsoft integration's app registration (a display name, a note) replaced the real secret with a blank and broke its token exchange. Now only a non-blank value that is not the mask replaces it. **************** This build also picks up the library's credential guards (kamo-shared-library, same change set), which close two live exposures here: GET /api/security/org serialized the caller's own User as the owner of each org they own, with its password hash, recovery seed words, security answer and answer hashes; and the EHR exchange partner list returned each partner's inbound token hash. **************** now also proves an owned org written by the real HTTP wire mapper carries none of the owner's credentials.