package httpapp import ( "net/http" "gitea.avt.data-center.id/othman.suseno/atlas/internal/models" ) func (a *App) routes() { // Static files fs := http.FileServer(http.Dir(a.cfg.StaticDir)) a.mux.Handle("/static/", http.StripPrefix("/static/", fs)) // Web UI a.mux.HandleFunc("/", a.handleDashboard) // Health & metrics a.mux.HandleFunc("/healthz", a.handleHealthz) a.mux.HandleFunc("/health", a.handleHealthCheck) // Detailed health check a.mux.HandleFunc("/metrics", a.handleMetrics) // Diagnostics a.mux.HandleFunc("/api/v1/system/info", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleSystemInfo(w, r) }, nil, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/system/logs", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleLogs(w, r) }, nil, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/system/gc", methodHandler( nil, func(w http.ResponseWriter, r *http.Request) { a.handleGC(w, r) }, nil, nil, nil, )) // API Documentation a.mux.HandleFunc("/api/docs", a.handleAPIDocs) a.mux.HandleFunc("/api/openapi.yaml", a.handleOpenAPISpec) // Backup & Restore a.mux.HandleFunc("/api/v1/backups", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListBackups(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateBackup(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/backups/", a.handleBackupOps) // Dashboard API a.mux.HandleFunc("/api/v1/dashboard", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleDashboardAPI(w, r) }, nil, nil, nil, nil, )) // API v1 routes - ZFS Management a.mux.HandleFunc("/api/v1/disks", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListDisks(w, r) }, nil, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/pools", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListPools(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreatePool(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/pools/", a.handlePoolOps) a.mux.HandleFunc("/api/v1/datasets", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListDatasets(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateDataset(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/datasets/", a.handleDatasetOps) a.mux.HandleFunc("/api/v1/zvols", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListZVOLs(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateZVOL(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/zvols/", a.handleZVOLOps) // Snapshot Management a.mux.HandleFunc("/api/v1/snapshots", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListSnapshots(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateSnapshot(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/snapshots/", a.handleSnapshotOps) a.mux.HandleFunc("/api/v1/snapshot-policies", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListSnapshotPolicies(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateSnapshotPolicy(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/snapshot-policies/", a.handleSnapshotPolicyOps) // Storage Services - SMB a.mux.HandleFunc("/api/v1/shares/smb", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListSMBShares(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateSMBShare(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/shares/smb/", a.handleSMBShareOps) // Storage Services - NFS a.mux.HandleFunc("/api/v1/exports/nfs", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListNFSExports(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateNFSExport(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/exports/nfs/", a.handleNFSExportOps) // Storage Services - iSCSI a.mux.HandleFunc("/api/v1/iscsi/targets", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListISCSITargets(w, r) }, func(w http.ResponseWriter, r *http.Request) { a.handleCreateISCSITarget(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/iscsi/targets/", a.handleISCSITargetOps) // Job Management a.mux.HandleFunc("/api/v1/jobs", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListJobs(w, r) }, nil, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/jobs/", a.handleJobOps) // Authentication & Authorization (public endpoints) a.mux.HandleFunc("/api/v1/auth/login", methodHandler( nil, func(w http.ResponseWriter, r *http.Request) { a.handleLogin(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/auth/logout", methodHandler( nil, func(w http.ResponseWriter, r *http.Request) { a.handleLogout(w, r) }, nil, nil, nil, )) // User Management (requires authentication, admin-only for create/update/delete) a.mux.HandleFunc("/api/v1/users", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListUsers(w, r) }, func(w http.ResponseWriter, r *http.Request) { adminRole := models.RoleAdministrator a.requireRole(adminRole)(http.HandlerFunc(a.handleCreateUser)).ServeHTTP(w, r) }, nil, nil, nil, )) a.mux.HandleFunc("/api/v1/users/", a.handleUserOpsWithAuth) // Audit Logs a.mux.HandleFunc("/api/v1/audit", a.handleListAuditLogs) }