Security Architecture
PrivyCode’s security model is built on four core principles:- Authentication - GitHub OAuth 2.0 for identity verification
- Authorization - Token-based access control
- Access Control - Time and view-limited sharing
- Data Protection - Secure token storage and transmission
Authentication Security
GitHub OAuth 2.0
PrivyCode uses GitHub’s OAuth 2.0 implementation for secure user authentication:internal/github/oauth.go
- State parameter prevents CSRF attacks
- Scoped access requests minimal required permissions
- Tokens stored securely in database
- HTTPS-only callback URLs in production
CSRF Protection
Each OAuth flow includes a unique state parameter:internal/handlers/auth_handler.go
Authorization Controls
Token-Based Authentication
All API requests require Bearer token authentication:internal/middleware/auth.go
- Stateless authentication
- Database validation on every request
- No client-side credential storage
- Context-based user injection
Protected Routes
internal/routes/router.go
Viewer access endpoints use viewer link tokens instead of user authentication, enabling anonymous access to shared repositories.
CORS Configuration
Cross-Origin Resource Sharing is restricted to trusted origins:internal/middleware/cors.go
- Whitelist-based origin validation
- Credentials allowed only for trusted origins
- Preflight request handling
- Method and header restrictions
Access Control
Repository Verification
Before creating viewer links, the system verifies repository access:internal/handlers/viewer_handler.go
- Prevents links to non-existent repositories
- Ensures user has repository access
- Validates permissions before link creation
Time-Limited Access
Viewer links automatically expire after a configured duration:internal/handlers/viewer_handler.go
internal/handlers/viewer_handler.go
Time-based expiration is checked on every access attempt, ensuring expired links are immediately inaccessible.
View Count Limits
Optional view limits restrict the number of times a link can be accessed:internal/handlers/viewer_handler.go
- Single-use links:
max_views: 1 - Limited team access:
max_views: 10 - Controlled public sharing:
max_views: 100
Soft Delete Protection
Deleted links are immediately inaccessible:internal/handlers/viewer_handler.go
Data Protection
Database Security
User Model:internal/models/user.go
internal/models/viewer_link.go
- Unique constraints prevent token collisions
- Cascade delete removes orphaned viewer links
- Non-null constraints enforce data integrity
- Foreign key relationships maintain referential integrity
Environment Variable Management
config/config.go
Secure Token Generation
Viewer link tokens use UUID v4 for cryptographic randomness:internal/utils/token.go
- Cryptographically random
- Globally unique
- Unpredictable
- URL-safe
Best Practices
Use HTTPS in Production
Use HTTPS in Production
Always configure production environments to use HTTPS:Benefits:
.env (Production)
- Encrypts all data in transit
- Prevents token interception
- Required for secure cookies
- Protects OAuth flow integrity
Minimize Token Scope
Minimize Token Scope
Request only necessary GitHub permissions:Principle of Least Privilege:
read:user- Basic profile information onlyrepo- Repository access (read/write for private repos)- Avoid requesting write permissions unless required
Implement Rate Limiting
Implement Rate Limiting
Protect endpoints from abuse:
Consider implementing rate limiting at the reverse proxy level (nginx, Cloudflare) for better performance.
Regular Security Audits
Regular Security Audits
Recommended Practices:
- Review viewer link access logs regularly
- Monitor for unusual access patterns
- Audit expired and deleted links
- Rotate GitHub OAuth credentials periodically
- Keep dependencies updated
Secure Database Access
Secure Database Access
PostgreSQL Security:Best Practices:
- Use connection pooling
- Enable SSL/TLS for database connections
- Create read-only replicas for analytics
- Regular database backups
Token Rotation
Token Rotation
Update GitHub tokens on each OAuth flow:Benefits:
internal/handlers/auth_handler.go
- Invalidates old tokens
- Reduces token compromise window
- Maintains fresh permissions
Input Validation
Input Validation
Validate all user inputs:
internal/handlers/viewer_handler.go
Security Checklist
Use this checklist when deploying PrivyCode:Configure HTTPS
- SSL/TLS certificates installed
- HTTPS enforced for all endpoints
- HSTS headers configured
- Redirect HTTP to HTTPS
Secure Environment Variables
- GitHub OAuth credentials set
- Database credentials secured
- Production secrets not in version control
- Environment-specific configs validated
Database Security
- PostgreSQL SSL enabled
- Database user has minimal permissions
- Automated backups configured
- Connection pooling enabled
Access Controls
- CORS properly configured
- Auth middleware on protected routes
- Token validation working
- Rate limiting implemented
Security Incident Response
If you suspect a security breach:-
Immediately revoke access:
-
Rotate credentials:
- Regenerate GitHub OAuth credentials
- Update database passwords
- Invalidate all active sessions
-
Audit access logs:
- Check for unauthorized access patterns
- Review viewer link access logs
- Identify affected repositories
-
Notify affected users:
- Inform users of potential breach
- Recommend password changes
- Provide security guidance
Next Steps
Authentication
Learn about GitHub OAuth implementation
Viewer Links
Understand viewer link mechanics