105 lines
3.7 KiB
Go
105 lines
3.7 KiB
Go
package httpapp
|
|
|
|
import "net/http"
|
|
|
|
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("/metrics", a.handleMetrics)
|
|
|
|
// API v1 routes - ZFS Management
|
|
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
|
|
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,
|
|
))
|
|
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) { a.handleCreateUser(w, r) },
|
|
nil, nil, nil,
|
|
))
|
|
a.mux.HandleFunc("/api/v1/users/", a.handleUserOps)
|
|
|
|
// Audit Logs
|
|
a.mux.HandleFunc("/api/v1/audit", a.handleListAuditLogs)
|
|
}
|