PulseRT uses Google Cloud service account credentials to authenticate with the Analytics Data API. These credentials provide API access and must be protected.
Never commit credentials to version control.
The credentials.json file contains a private key that can be used to access any Google APIs the service account has permissions for. If exposed:
- Revoke the key immediately in Google Cloud Console
- Create a new service account key
- Audit API usage for unauthorized access
-
File permissions: Restrict access to the credentials file:
chmod 600 ~/.config/pulsert/credentials.json -
Location: Store only in the designated config directory (
~/.config/pulsert/) -
Backups: If backing up credentials, ensure backups are encrypted
-
Sharing: Never share credentials via email, chat, or unencrypted channels
The service account should have the minimum required access:
- API scope:
analytics.readonly(read-only access) - GA4 role: Viewer (read-only property access)
- Google Cloud roles: None required beyond service account creation
Rotate your service account key periodically:
- Go to Google Cloud Console > IAM & Admin > Service Accounts
- Select your service account
- Go to Keys tab
- Click "Add Key" > "Create new key" > JSON
- Replace
~/.config/pulsert/credentials.jsonwith the new file - Delete the old key from Google Cloud Console
- Restart PulseRT
Recommended rotation frequency: Every 90 days, or immediately if compromise is suspected.
If you suspect your credentials have been exposed:
- Immediately revoke the key in Google Cloud Console
- Check Google Cloud audit logs for unauthorized usage
- Review GA4 property access logs
- Create a new service account key
- Update your local credentials file
- Consider creating an entirely new service account
- Credentials are read from disk only when needed
- Access tokens are cached in memory, not persisted
- No analytics data is stored locally
- No data is sent to third parties
- All API communication uses HTTPS/TLS
- Tokens are transmitted only to Google OAuth endpoints
- No telemetry or usage data is collected
- PulseRT runs with standard user permissions
- No elevated privileges required
- Configuration stored in user-owned directory
If you discover a security vulnerability in PulseRT:
- Do not open a public issue
- Email the maintainer directly (see charlesjones.dev for contact)
- Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Any suggested fixes (optional)
- Acknowledgment: Within 48 hours
- Initial assessment: Within 7 days
- Fix timeline: Depends on severity
- Critical: 24-72 hours
- High: 1-2 weeks
- Medium/Low: Next release
- Vulnerabilities will be fixed before public disclosure
- Credit will be given to reporters (unless anonymity is requested)
- A security advisory will be published for significant issues
| Version | Supported |
|---|---|
| Latest | Yes |
| Older | No |
Only the latest release receives security updates. Users are encouraged to stay current.
When using PulseRT:
- Keep macOS and Xcode updated
- Use a dedicated service account for PulseRT
- Grant minimal GA4 permissions (Viewer only)
- Rotate credentials periodically
- Monitor Google Cloud audit logs
- Review GA4 property access regularly