Dainvo stores sensitive calendar data locally and will eventually connect to external providers. Security boundaries must be explicit from the start.
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.
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.
app.getPath("userData").ipcRenderer, Node primitives, filesystem access, database
handles, or provider clients to renderer code.contextIsolation enabled and nodeIntegration disabled. If Electron
preload sandboxing is enabled later, bundle preload code so local module
imports remain compatible.Document URLs, event links, attendees, descriptions, and due dates can reveal private work context. Treat them as sensitive application data: