/
Muvz82
/
openbox-linux
Обзор
Документация
Войти
/
Muvz82
/
openbox-linux
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
apps/backend/internal/api/server.go
99 строк
3 KB
Mikhail Sviridov
init
18 май 2026, 17:54
18 май 2026, 17:54
482974b
Код
Авторство
О чём код?
package api import ( "context" "net/http" ) // Server — HTTP-сервер backend API. type Server struct { addr string mux *http.ServeMux server *http.Server } // NewServer создаёт новый сервер на заданном адресе. func NewServer(addr string) *Server { s := &Server{ addr: addr, mux: http.NewServeMux(), } s.registerRoutes() return s } func (s *Server) registerRoutes() { s.mux.HandleFunc("/api/health", s.handleHealth) s.mux.HandleFunc("/api/host", s.handleHost) s.mux.HandleFunc("/api/tools", s.handleTools) // VM endpoints s.mux.HandleFunc("/api/vm/list", s.handleVMList) s.mux.HandleFunc("/api/vm/status", s.handleVMStatus) s.mux.HandleFunc("/api/vm/start", s.handleVMStart) s.mux.HandleFunc("/api/vm/shutdown", s.handleVMShutdown) s.mux.HandleFunc("/api/vm/destroy", s.handleVMDestroy) s.mux.HandleFunc("/api/vm/define", s.handleVMDefine) s.mux.HandleFunc("/api/vm/create-disk", s.handleVMCreateDisk) s.mux.HandleFunc("/api/vm/logs", s.handleVMLogs) // Wizard endpoints s.mux.HandleFunc("/api/wizard/check-iso", s.handleCheckISO) s.mux.HandleFunc("/api/wizard/disk-free", s.handleDiskFree) s.mux.HandleFunc("/api/wizard/browse-iso", s.handleBrowseISO) s.mux.HandleFunc("/api/wizard/browse-dir", s.handleBrowseDir) // App index endpoints s.mux.HandleFunc("/api/apps/list", s.handleAppList) s.mux.HandleFunc("/api/apps/get", s.handleAppGet) s.mux.HandleFunc("/api/apps/add", s.handleAppAdd) s.mux.HandleFunc("/api/apps/update", s.handleAppUpdate) s.mux.HandleFunc("/api/apps/delete", s.handleAppDelete) s.mux.HandleFunc("/api/apps/import-installer", s.handleImportInstaller) s.mux.HandleFunc("/api/apps/shared-dir", s.handleSharedDir) // RDP endpoints s.mux.HandleFunc("/api/rdp/config", s.handleRDPConfig) s.mux.HandleFunc("/api/rdp/connect", s.handleRDPConnect) s.mux.HandleFunc("/api/rdp/test", s.handleRDPTest) // SSH endpoints s.mux.HandleFunc("/api/ssh/config", s.handleSSHConfig) s.mux.HandleFunc("/api/ssh/test", s.handleSSHTest) s.mux.HandleFunc("/api/ssh/exec", s.handleSSHExec) s.mux.HandleFunc("/api/ssh/launch", s.handleSSHLaunchApp) // Logs endpoint s.mux.HandleFunc("/api/logs", s.handleLogs) // Auth token endpoint (for dev mode) s.mux.HandleFunc("/api/auth-token", s.handleAuthToken) } // Start запускает HTTP-сервер. func (s *Server) Start() error { handler := corsMiddleware(s.mux) s.server = &http.Server{ Addr: s.addr, Handler: handler, } return s.server.ListenAndServe() } // Shutdown корректно останавливает сервер. func (s *Server) Shutdown(ctx context.Context) error { if s.server != nil { return s.server.Shutdown(ctx) } return nil } // corsMiddleware добавляет CORS-заголовки для dev-режима. func corsMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type, X-Auth-Token") if r.Method == http.MethodOptions { w.WriteHeader(http.StatusNoContent) return } next.ServeHTTP(w, r) }) }