add authentication method
Some checks failed
CI / test-build (push) Failing after 2m1s

This commit is contained in:
2025-12-14 23:55:12 +07:00
parent ed96137bad
commit 54e76d9304
18 changed files with 2197 additions and 34 deletions

84
docs/DATABASE.md Normal file
View File

@@ -0,0 +1,84 @@
# Database Persistence
## Overview
AtlasOS now supports SQLite-based database persistence for configuration and state management. The database layer is optional - if no database path is provided, the system operates in in-memory mode (data is lost on restart).
## Configuration
Set the `ATLAS_DB_PATH` environment variable to enable database persistence:
```bash
export ATLAS_DB_PATH=/var/lib/atlas/atlas.db
./atlas-api
```
If not set, the system defaults to `data/atlas.db` in the current directory.
## Database Schema
The database includes tables for:
- **users** - User accounts and authentication
- **audit_logs** - Audit trail with indexes for efficient querying
- **smb_shares** - SMB/CIFS share configurations
- **nfs_exports** - NFS export configurations
- **iscsi_targets** - iSCSI target configurations
- **iscsi_luns** - iSCSI LUN mappings
- **snapshot_policies** - Automated snapshot policies
## Current Status
**Database Infrastructure**: Complete
- SQLite database connection and migration system
- Schema definitions for all entities
- Optional database mode (falls back to in-memory if not configured)
**Store Migration**: In Progress
- Stores currently use in-memory implementations
- Database-backed implementations can be added incrementally
- Pattern established for migration
## Migration Pattern
To migrate a store to use the database:
1. Add database field to store struct
2. Update `New*Store()` to accept `*db.DB` parameter
3. Implement database queries in CRUD methods
4. Update `app.go` to pass database to store constructor
Example pattern:
```go
type UserStore struct {
db *db.DB
mu sync.RWMutex
// ... other fields
}
func NewUserStore(db *db.DB, auth *Service) *UserStore {
// Initialize with database
}
func (s *UserStore) Create(...) (*User, error) {
// Use database instead of in-memory map
_, err := s.db.Exec("INSERT INTO users ...")
// ...
}
```
## Benefits
- **Persistence**: Configuration survives restarts
- **Audit Trail**: Historical audit logs preserved
- **Scalability**: Can migrate to PostgreSQL/MySQL later
- **Backup**: Simple file-based backup (SQLite database file)
## Next Steps
1. Migrate user store to database (highest priority for security)
2. Migrate audit log store (for historical tracking)
3. Migrate storage service stores (SMB/NFS/iSCSI)
4. Migrate snapshot policy store
5. Add database backup/restore utilities