feat: add vm power actions
This commit is contained in:
+18
-1
@@ -16,6 +16,7 @@ import (
|
||||
"forgejo.digital-droplets.de/philschlo/proxui/platform/config"
|
||||
"forgejo.digital-droplets.de/philschlo/proxui/platform/encryption"
|
||||
"forgejo.digital-droplets.de/philschlo/proxui/platform/logging"
|
||||
"github.com/hibiken/asynq"
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
|
||||
"proxui/backend/internal/auth"
|
||||
@@ -24,6 +25,7 @@ import (
|
||||
"proxui/backend/internal/membership"
|
||||
"proxui/backend/internal/operator"
|
||||
"proxui/backend/internal/profile"
|
||||
"proxui/backend/internal/queue"
|
||||
"proxui/backend/internal/rbac"
|
||||
"proxui/backend/internal/vm"
|
||||
)
|
||||
@@ -61,13 +63,25 @@ func main() {
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
queueClient := asynq.NewClient(asynq.RedisClientOpt{Addr: cfg.RedisAddr})
|
||||
defer queueClient.Close()
|
||||
taskEnqueuer := queue.NewEnqueuer(queueClient)
|
||||
|
||||
profileMiddleware := profile.NewMiddleware(profile.NewRepository(db), logger)
|
||||
membershipMiddleware := membership.NewMiddleware(membership.NewRepository(db), logger)
|
||||
authorizationMiddleware := authorization.NewMiddleware()
|
||||
clusterRepository := cluster.NewRepository(db, tokenCipher)
|
||||
clusterAdminHandler := clusteradmin.NewHandler(clusterRepository)
|
||||
operatorMiddleware := operator.NewMiddleware(cfg.OperatorToken)
|
||||
vmHandler := vm.NewHandler(vm.NewSQLRepository(db))
|
||||
vmHandler := vm.NewHandler(
|
||||
vm.NewSQLRepository(db),
|
||||
vm.WithPower(vm.PowerDependencies{
|
||||
Clusters: clusterRepository,
|
||||
ClientFactory: vm.DefaultPowerClientFactory,
|
||||
Tasks: taskEnqueuer,
|
||||
Audit: vm.NewSQLPowerAuditWriter(db),
|
||||
}),
|
||||
)
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("GET /healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -104,6 +118,9 @@ func main() {
|
||||
"GET /vms/{vmID}",
|
||||
authMiddleware.RequireAuth(profileMiddleware.EnsureProfile(http.HandlerFunc(vmHandler.GetVM))),
|
||||
)
|
||||
mux.Handle("POST /vms/{vmID}/start", authMiddleware.RequireAuth(profileMiddleware.EnsureProfile(http.HandlerFunc(vmHandler.StartVM))))
|
||||
mux.Handle("POST /vms/{vmID}/stop", authMiddleware.RequireAuth(profileMiddleware.EnsureProfile(http.HandlerFunc(vmHandler.StopVM))))
|
||||
mux.Handle("POST /vms/{vmID}/reboot", authMiddleware.RequireAuth(profileMiddleware.EnsureProfile(http.HandlerFunc(vmHandler.RebootVM))))
|
||||
clusterManageChain := func(handler http.HandlerFunc) http.Handler {
|
||||
return operatorMiddleware.RequireOperator(authorizationMiddleware.Require(rbac.ActionClusterManage, handler))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user