- Access control
- Roles within an organisation with an implication table: owner, administrator, support agent, reviewer, knowledge editor, viewer. Permission is checked on every request, not only at sign in.
- Channel credentials
- Keys for mail, messaging and other channels are stored encrypted, with a rotation procedure provided for.
- Content import from a URL
- Guarded against reaching internal network addresses: an allowed scheme list, verification of every IP address and every redirect hop, a size limit counted while streaming, and no forwarding of authentication headers.
- The widget on someone else's domain
- A short lived token in a header instead of a cookie, plus an allowed domain list configured per organisation. A request from a domain off the list is not served.
- Inbound events
- Signature verification and protection against replaying the same event, based on its identifier.
- Kill switches
- Enforced in the transport layer rather than in the interface. A disabled channel will not send a message even when a higher layer asks it to.
- Production configuration
- The application refuses to start when it detects settings meant for local work. A production environment cannot accidentally come up in test mode.