init bootstrap

This commit is contained in:
Fran Jurmanović
2025-07-06 15:02:09 +02:00
commit 016728532c
47 changed files with 8894 additions and 0 deletions

423
docs/ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,423 @@
# Architecture Documentation
## Overview
This document describes the architecture of the Bootstrap App, which follows clean architecture principles with clear separation of concerns, dependency injection, and modern security practices.
## Architecture Principles
### Clean Architecture
The application follows Uncle Bob's Clean Architecture principles:
- **Independence of Frameworks**: The architecture doesn't depend on specific frameworks
- **Testability**: Business rules can be tested without UI, database, or external services
- **Independence of UI**: The UI can change without changing the business rules
- **Independence of Database**: Business rules are not bound to the database
- **Independence of External Services**: Business rules know nothing about the outside world
### SOLID Principles
- **Single Responsibility**: Each class/module has one reason to change
- **Open/Closed**: Open for extension, closed for modification
- **Liskov Substitution**: Objects should be replaceable with instances of their subtypes
- **Interface Segregation**: Many client-specific interfaces are better than one general-purpose interface
- **Dependency Inversion**: Depend on abstractions, not concretions
## Layer Architecture
### 1. Presentation Layer (`controller/`)
**Responsibility**: Handle HTTP requests and responses
- Input validation and sanitization
- Request/response mapping
- Error handling and status codes
- Authentication and authorization checks
**Components**:
- Controllers for each domain
- Middleware for cross-cutting concerns
- Request/response DTOs
**Dependencies**: Service Layer
### 2. Business Logic Layer (`service/`)
**Responsibility**: Implement business rules and orchestrate operations
- Business rule validation
- Transaction management
- Cross-domain operations
- Business logic orchestration
**Components**:
- Service classes for each domain
- Business rule validators
- Transaction coordinators
**Dependencies**: Repository Layer, External Services
### 3. Data Access Layer (`repository/`)
**Responsibility**: Data persistence and retrieval
- Database operations
- Query optimization
- Data mapping
- Cache management
**Components**:
- Repository interfaces and implementations
- Database models
- Query builders
**Dependencies**: Database, Cache
### 4. Domain Layer (`model/`)
**Responsibility**: Core business entities and rules
- Domain entities
- Value objects
- Domain services
- Business rule definitions
**Components**:
- Entity models
- Validation rules
- Domain constants
- Business exceptions
**Dependencies**: None (should be isolated)
### 5. Infrastructure Layer (`utl/`)
**Responsibility**: External concerns and utilities
- Database configuration
- Logging
- Security utilities
- Configuration management
- External service integrations
**Components**:
- Database connection and migration
- Logging infrastructure
- Security middleware
- Configuration loaders
- Utility functions
## Component Interaction Flow
```
HTTP Request
[Middleware Stack] ← Security, Logging, CORS
[Controller] ← Request handling, validation
[Service] ← Business logic, orchestration
[Repository] ← Data access, persistence
[Database/Cache] ← Data storage
```
## Dependency Injection
The application uses Uber Dig for dependency injection, providing:
- **Loose Coupling**: Components depend on interfaces, not implementations
- **Testability**: Easy to mock dependencies for testing
- **Configuration**: Centralized dependency configuration
- **Lifecycle Management**: Automatic instance management
### DI Container Structure
```go
// Database and core services
di.Provide(func() *gorm.DB { ... })
di.Provide(NewCache)
// Repositories
di.Provide(NewUserRepository)
di.Provide(NewRoleRepository)
// ...
// Services
di.Provide(NewUserService)
di.Provide(NewAuthService)
// ...
// Controllers
di.Invoke(NewUserController)
di.Invoke(NewAuthController)
// ...
```
## Security Architecture
### Authentication Flow
```
Client Request
[CORS Middleware] ← Cross-origin validation
[Security Headers] ← Security headers injection
[Rate Limiting] ← Request rate validation
[JWT Validation] ← Token verification
[Permission Check] ← Authorization validation
[Controller] ← Authorized request processing
```
### Security Layers
1. **Network Security**: CORS, security headers, HTTPS
2. **Authentication**: JWT token validation
3. **Authorization**: Role-based access control
4. **Input Security**: Sanitization, validation, size limits
5. **Audit Security**: Logging, monitoring, alerting
## Database Architecture
### Entity Relationships
```
Users
├── UserRoles (Many-to-Many with Roles)
├── AuditLogs (One-to-Many)
└── SecurityEvents (One-to-Many)
Roles
├── UserRoles (Many-to-Many with Users)
└── RolePermissions (Many-to-Many with Permissions)
Permissions
└── RolePermissions (Many-to-Many with Roles)
SystemConfig (Standalone)
```
### Base Model Pattern
All entities inherit from `BaseModel`:
```go
type BaseModel struct {
ID string `json:"id" gorm:"primary_key"`
DateCreated time.Time `json:"dateCreated"`
DateUpdated time.Time `json:"dateUpdated"`
}
```
Benefits:
- Consistent ID generation (UUID)
- Automatic timestamp management
- Uniform audit trail
- Simplified queries
## API Architecture
### RESTful Design
- **Resource-based URLs**: `/api/v1/users/{id}`
- **HTTP Methods**: GET, POST, PUT, DELETE, PATCH
- **Status Codes**: Appropriate HTTP status codes
- **Content Negotiation**: JSON request/response format
### API Versioning
- **URL Versioning**: `/api/v1/`
- **Backward Compatibility**: Maintain older versions
- **Migration Path**: Clear upgrade documentation
### Response Format
```go
type APIResponse struct {
Success bool `json:"success"`
Data interface{} `json:"data,omitempty"`
Message string `json:"message,omitempty"`
Error string `json:"error,omitempty"`
Code int `json:"code,omitempty"`
}
```
### Pagination
```go
type PaginatedResponse struct {
APIResponse
Pagination PaginationResponse `json:"pagination"`
}
```
## Middleware Architecture
### Middleware Stack (Order Matters)
1. **Recovery**: Panic recovery and logging
2. **Security Headers**: OWASP security headers
3. **CORS**: Cross-origin resource sharing
4. **Rate Limiting**: Request rate limiting
5. **Request Logging**: HTTP request/response logging
6. **Authentication**: JWT token validation
7. **Authorization**: Permission validation
8. **Input Validation**: Request sanitization
### Security Middleware Components
- **Rate Limiter**: Token bucket algorithm with IP-based limits
- **Input Sanitizer**: XSS protection, SQL injection prevention
- **Content Validator**: Content-type and size validation
- **User Agent Validator**: Bot detection and blocking
## Configuration Architecture
### Configuration Layers
1. **Environment Variables**: Runtime configuration
2. **Database Config**: Dynamic configuration storage
3. **Default Values**: Fallback configuration
4. **Validation**: Configuration validation rules
### Configuration Categories
- **Security**: JWT secrets, encryption keys, password policies
- **Database**: Connection settings, migration options
- **API**: Rate limits, timeouts, CORS settings
- **Logging**: Log levels, retention policies
- **Features**: Feature flags, service toggles
## Error Handling Architecture
### Error Types
1. **Business Errors**: Domain rule violations
2. **Validation Errors**: Input validation failures
3. **System Errors**: Infrastructure failures
4. **Security Errors**: Authentication/authorization failures
### Error Propagation
```
Controller → Service → Repository
↓ ↓ ↓
HTTP Business Data
Error Error Error
```
### Error Response Format
```go
type HTTPError struct {
Code int `json:"code"`
Message string `json:"message"`
Details map[string]interface{} `json:"details,omitempty"`
}
```
## Logging Architecture
### Log Levels
- **DEBUG**: Detailed information for debugging
- **INFO**: General information about application flow
- **WARN**: Warning messages for potential issues
- **ERROR**: Error messages for failures
- **PANIC**: Critical errors that cause application termination
### Log Categories
1. **Application Logs**: General application flow
2. **HTTP Logs**: Request/response logging
3. **Security Logs**: Authentication, authorization events
4. **Audit Logs**: User actions and system changes
5. **Performance Logs**: Response times, resource usage
### Log Format
```
[TIMESTAMP] LEVEL [CALLER] MESSAGE
[2024-01-01 12:00:00] INFO [main.go:42] Starting application
```
## Caching Architecture
### Cache Layers
1. **Application Cache**: In-memory cache for frequently accessed data
2. **Database Cache**: GORM query result caching
3. **HTTP Cache**: Response caching for static content
### Cache Strategies
- **TTL-based**: Time-to-live expiration
- **LRU**: Least recently used eviction
- **Size-based**: Memory usage limits
- **Manual**: Explicit cache invalidation
## Testing Architecture
### Test Layers
1. **Unit Tests**: Individual component testing
2. **Integration Tests**: Component interaction testing
3. **API Tests**: End-to-end API testing
4. **Security Tests**: Security vulnerability testing
### Test Structure
```
test/
├── unit/ # Unit tests
├── integration/ # Integration tests
├── api/ # API tests
├── fixtures/ # Test data
└── helpers/ # Test utilities
```
### Mock Strategy
- **Interface Mocking**: Mock external dependencies
- **Database Mocking**: In-memory database for tests
- **HTTP Mocking**: Mock external API calls
## Scalability Considerations
### Horizontal Scaling
- **Stateless Design**: No server-side session storage
- **Database Connection Pooling**: Efficient connection management
- **Load Balancer Friendly**: Health checks and graceful shutdown
### Performance Optimization
- **Database Indexing**: Optimized query performance
- **Pagination**: Limit result set sizes
- **Caching**: Reduce database load
- **Compression**: Reduce bandwidth usage
### Monitoring Points
- **Health Endpoints**: Application health status
- **Metrics Collection**: Performance metrics
- **Log Aggregation**: Centralized logging
- **Alert Configuration**: Automated alerting
## Deployment Architecture
### Build Process
1. **Dependency Resolution**: `go mod download`
2. **Code Generation**: Swagger documentation
3. **Compilation**: Static binary creation
4. **Testing**: Automated test execution
5. **Packaging**: Container image creation
### Deployment Strategies
- **Blue-Green**: Zero-downtime deployments
- **Rolling**: Gradual instance replacement
- **Canary**: Phased traffic migration
- **Feature Flags**: Runtime feature control
### Environment Configuration
- **Development**: Local development setup
- **Staging**: Production-like testing environment
- **Production**: Live application environment
- **DR**: Disaster recovery environment
## Security Considerations
### Threat Model
1. **Authentication Bypass**: JWT validation, rate limiting
2. **Authorization Escalation**: RBAC, permission validation
3. **Data Injection**: Input sanitization, parameterized queries
4. **Data Exposure**: Access logging, encryption at rest
5. **DoS Attacks**: Rate limiting, request size limits
### Security Controls
- **Input Validation**: All user inputs validated
- **Output Encoding**: XSS prevention
- **Access Control**: Role-based permissions
- **Audit Logging**: All actions logged
- **Encryption**: Sensitive data encrypted
## Future Considerations
### Planned Enhancements
- **Microservices**: Service decomposition
- **Event Sourcing**: Event-driven architecture
- **CQRS**: Command query responsibility segregation
- **GraphQL**: Alternative API interface
- **Real-time**: WebSocket support
### Technology Evolution
- **Database**: PostgreSQL migration path
- **Cache**: Redis integration
- **Messaging**: Event bus implementation
- **Search**: Full-text search capabilities
- **Analytics**: Business intelligence integration

505
docs/SECURITY.md Normal file
View File

@@ -0,0 +1,505 @@
# Security Documentation
## Overview
This document outlines the comprehensive security measures implemented in the Bootstrap App. The application follows industry best practices and security standards to protect against common threats and vulnerabilities.
## Security Architecture
### Defense in Depth
The application implements multiple layers of security:
1. **Network Security**: HTTPS, CORS, security headers
2. **Authentication**: JWT token-based authentication
3. **Authorization**: Role-based access control (RBAC)
4. **Input Security**: Validation, sanitization, size limits
5. **Data Security**: Encryption, secure storage
6. **Monitoring**: Audit logging, security event tracking
7. **Infrastructure**: Secure deployment practices
## Authentication System
### JWT (JSON Web Tokens)
**Implementation**:
- RS256/HS256 signing algorithms
- Configurable token expiration (default: 24 hours access, 7 days refresh)
- Secure token storage and transmission
- Token revocation support
**Security Features**:
- Cryptographically secure secret generation
- Token payload minimization
- Automatic token expiration
- Refresh token rotation
**Configuration**:
```env
JWT_SECRET=base64-encoded-secret-64-bytes
JWT_ACCESS_TTL_HOURS=24
JWT_REFRESH_TTL_DAYS=7
JWT_ISSUER=omega-server
```
### Password Security
**Hashing**:
- bcrypt with cost factor 12
- Salt automatically generated per password
- Resistant to rainbow table attacks
**Password Policy**:
- Minimum 8 characters
- Must contain uppercase, lowercase, number, special character
- Common password detection
- Password strength scoring (0-100)
**Additional Security**:
- Account lockout after failed attempts
- Password history prevention
- Secure password reset flow
## Authorization System
### Role-Based Access Control (RBAC)
**Components**:
- **Users**: Individual user accounts
- **Roles**: Collections of permissions (admin, user, viewer)
- **Permissions**: Granular access rights (user:create, user:read, etc.)
**Permission Format**:
```
resource:action
Examples: user:create, role:delete, system:admin
```
**Default Roles**:
- **admin**: Full system access
- **user**: Standard user privileges
- **viewer**: Read-only access
### Permission Checking
**Implementation**:
```go
// Middleware-based permission checking
app.Get("/api/v1/users", authMW.HasPermission("user:read"), controller.GetUsers)
// Service-level permission checking
if !user.HasPermission("user:create") {
return errors.New("insufficient permissions")
}
```
## Input Security
### Validation & Sanitization
**Input Validation**:
- JSON schema validation
- Type checking
- Range validation
- Format validation (email, UUID, etc.)
**Input Sanitization**:
- HTML entity encoding
- SQL injection prevention
- XSS protection
- Path traversal prevention
**Request Limits**:
- Maximum request size: 10MB
- Request timeout: 30 seconds
- Header size limits
- URL length limits
### Content Security
**Content-Type Validation**:
- Strict content-type checking
- File upload validation
- MIME type verification
- Extension whitelist
**File Upload Security**:
- Virus scanning integration points
- File size limits
- Storage isolation
- Access control
## Network Security
### HTTPS/TLS
**Requirements**:
- TLS 1.2+ minimum
- Strong cipher suites
- Perfect Forward Secrecy
- HSTS headers
**Certificate Management**:
- Automated certificate renewal
- Certificate pinning options
- Certificate transparency monitoring
### CORS (Cross-Origin Resource Sharing)
**Configuration**:
```env
CORS_ALLOWED_ORIGIN=https://yourdomain.com,https://app.yourdomain.com
```
**Security Headers**:
- Strict origin validation
- Credential handling
- Preflight request validation
### Security Headers
**Implemented Headers**:
```http
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Content-Security-Policy: default-src 'self'
Referrer-Policy: strict-origin-when-cross-origin
```
## Rate Limiting
### Multi-Layer Rate Limiting
**Global Rate Limiting**:
- 100 requests per minute per IP
- Configurable limits per endpoint
- Token bucket algorithm
**Authentication Rate Limiting**:
- 5 login attempts per 15 minutes
- Progressive delays for failed attempts
- Account lockout protection
**API Rate Limiting**:
- Per-user rate limits
- Per-endpoint specific limits
- Burst capacity handling
### Implementation
```go
// Global rate limiting
app.Use(securityMW.RateLimit(100, 1*time.Minute))
// Authentication rate limiting
app.Post("/auth/login", securityMW.AuthRateLimit(), authController.Login)
```
## Data Protection
### Encryption
**Encryption at Rest**:
- Database field-level encryption for sensitive data
- AES-256-GCM encryption
- Secure key management
**Encryption in Transit**:
- TLS 1.2+ for all communications
- Certificate validation
- Perfect Forward Secrecy
**Key Management**:
```env
ENCRYPTION_KEY=32-character-hex-key # 256-bit key
```
### Data Classification
**Sensitive Data Types**:
- Passwords (hashed with bcrypt)
- Personal information (encrypted)
- Authentication tokens (secure storage)
- System secrets (environment variables)
**Data Handling**:
- Minimal data collection
- Data retention policies
- Secure data deletion
- Access logging
## Audit & Monitoring
### Audit Logging
**Logged Events**:
- Authentication attempts (success/failure)
- Authorization decisions
- Data access and modifications
- Administrative actions
- Security events
**Audit Log Format**:
```json
{
"id": "uuid",
"userId": "user-id",
"action": "create",
"resource": "user",
"resourceId": "target-user-id",
"success": true,
"ipAddress": "192.168.1.1",
"userAgent": "Browser/1.0",
"timestamp": "2024-01-01T12:00:00Z",
"details": {...}
}
```
### Security Event Monitoring
**Event Types**:
- Brute force attempts
- Privilege escalation attempts
- Suspicious activity patterns
- Rate limit violations
- Authentication anomalies
**Response Actions**:
- Automatic account lockout
- Rate limit enforcement
- Security team notifications
- Event correlation
## Vulnerability Management
### Security Testing
**Automated Testing**:
- Static code analysis
- Dependency vulnerability scanning
- Security unit tests
- Integration security tests
**Manual Testing**:
- Penetration testing
- Code review
- Security architecture review
- Threat modeling
### Dependency Management
**Security Practices**:
- Regular dependency updates
- Vulnerability scanning
- License compliance
- Supply chain security
**Go Module Security**:
```bash
go mod tidy
go list -m -u all
go mod download
```
## Incident Response
### Security Incident Types
**Authentication Incidents**:
- Brute force attacks
- Credential stuffing
- Account takeover
**Authorization Incidents**:
- Privilege escalation
- Unauthorized access
- Permission bypass
**Data Incidents**:
- Data breach
- Data exposure
- Data integrity issues
### Response Procedures
**Detection**:
- Automated monitoring alerts
- Log analysis
- User reports
- Security team monitoring
**Response**:
1. Incident containment
2. Impact assessment
3. Evidence preservation
4. Stakeholder notification
5. Recovery procedures
6. Post-incident review
## Secure Configuration
### Environment Security
**Production Settings**:
```env
GO_ENV=production
DEBUG_MODE=false
LOG_LEVEL=WARN
```
**Secret Management**:
- Environment variable storage
- Secure secret generation
- Secret rotation procedures
- Access control for secrets
### Database Security
**Security Measures**:
- Connection encryption
- Prepared statements (SQL injection prevention)
- Access control
- Backup encryption
**Configuration**:
- Minimal database privileges
- Regular security updates
- Connection pooling limits
- Query logging for monitoring
## Compliance & Standards
### Security Standards
**Frameworks**:
- OWASP Top 10 compliance
- NIST Cybersecurity Framework
- ISO 27001 principles
- PCI DSS guidelines (where applicable)
**Security Controls**:
- Access control (AC)
- Audit and accountability (AU)
- Configuration management (CM)
- Identification and authentication (IA)
- System and communications protection (SC)
### Privacy Protection
**Data Protection**:
- GDPR compliance considerations
- Data minimization principles
- User consent management
- Right to deletion
**Privacy by Design**:
- Default privacy settings
- Data encryption
- Access logging
- User control over data
## Deployment Security
### Secure Deployment
**Build Security**:
- Secure build pipeline
- Dependency verification
- Binary signing
- Vulnerability scanning
**Runtime Security**:
- Minimal attack surface
- Process isolation
- Resource limits
- Security monitoring
### Infrastructure Security
**Server Hardening**:
- OS security updates
- Unnecessary service removal
- Firewall configuration
- Intrusion detection
**Container Security** (if applicable):
- Minimal base images
- Security scanning
- Runtime protection
- Resource limits
## Security Maintenance
### Regular Security Tasks
**Daily**:
- Security log review
- Incident monitoring
- Threat intelligence updates
**Weekly**:
- Vulnerability assessment
- Security metric review
- Access review
**Monthly**:
- Security training updates
- Policy review
- Penetration testing
- Security architecture review
### Security Updates
**Update Process**:
1. Security advisory monitoring
2. Impact assessment
3. Testing in staging
4. Coordinated deployment
5. Verification testing
**Emergency Updates**:
- Critical vulnerability response
- Out-of-band patching
- Incident coordination
- Communication procedures
## Security Contact Information
### Reporting Security Issues
**Internal Team**:
- Security team email: security@company.com
- Incident hotline: +1-XXX-XXX-XXXX
- Escalation procedures: [Internal documentation]
**External Researchers**:
- Security disclosure policy
- Responsible disclosure program
- Bug bounty program (if applicable)
- PGP key for encrypted communication
### Security Training
**Developer Training**:
- Secure coding practices
- Security testing procedures
- Incident response training
- Regular security updates
**User Training**:
- Security awareness
- Password best practices
- Phishing recognition
- Incident reporting
## Conclusion
This security documentation outlines the comprehensive security measures implemented in the Bootstrap App. Regular review and updates of these security practices ensure ongoing protection against evolving threats.
For questions about security implementations or to report security issues, please contact the security team through the designated channels.
**Last Updated**: [Current Date]
**Next Review**: [Review Date]
**Document Version**: 1.0