dainvo

Security

Dainvo stores sensitive calendar data locally and will eventually connect to external providers. Security boundaries must be explicit from the start.

Token Handling

Token payloads are stored through the main-process TokenVault. The vault uses Electron safeStorage for encryption and stores only encrypted blobs in the SQLite account_tokens table. Token retrieval is main-process only; renderer APIs may expose connection status such as hasTokens, but must never expose token payloads or encrypted blobs. If encryption is unavailable in production, the vault fails closed rather than storing plaintext. No plaintext development fallback is configured.

Provider Access

Public desktop OAuth client IDs and tenant IDs are bundled in the app so users can sign in without entering developer configuration. These identifiers are not client secrets. Do not add provider client secrets to the app or repository; installed desktop apps are public clients and cannot protect traditional secrets.

Generic CalDAV credentials are user-provided credentials rather than OAuth app configuration. They are stored only through the encrypted main-process TokenVault, never returned to the renderer after submission, and should be app passwords where the provider supports them.

Local Data

IPC Boundary

Document URLs, event links, attendees, descriptions, and due dates can reveal private work context. Treat them as sensitive application data: