package websocket
import (
"net/http"
"github.com/go-chi/chi"
"github.com/goodrain/rainbond/api/controller"
"github.com/goodrain/rainbond/pkg/component/eventlog"
"github.com/sirupsen/logrus"
)
func Routes() chi.Router {
r := chi.NewRouter()
r.Get("/docker_console", controller.GetWebCli().HandleWS)
r.Get("/docker_log", eventlog.Default().SocketServer.PushDockerLog)
r.Get("/monitor_message", controller.GetMonitorMessage().Get)
r.Get("/new_monitor_message", controller.GetMonitorMessage().Get)
r.Get("/event_log", eventlog.Default().SocketServer.PushEventMessage)
r.Get("/services/{serviceID}/pubsub", eventlog.Default().SocketServer.Pubsub)
return r
}
func LogRoutes() chi.Router {
r := chi.NewRouter()
r.Get("/{gid}/{filename}", controller.GetLogFile().Get)
r.Get("/install_log/{filename}", controller.GetLogFile().GetInstallLog)
return r
}
func AppRoutes() chi.Router {
r := chi.NewRouter()
r.Get("/download/{format}/{fileName}", controller.GetManager().Download)
r.Post("/upload/{eventID}", controller.GetManager().Upload)
r.Options("/upload/{eventID}", controller.GetManager().Upload)
return r
}
func PackageBuildRoutes() chi.Router {
r := chi.NewRouter()
r.Use(packageBuildCORS)
r.Post("/component/events/{eventID}", controller.GetManager().UploadPackage)
r.Options("/component/events/{eventID}", controller.GetManager().UploadPackage)
chunkController := &controller.ChunkUploadController{}
r.Post("/component/events/{eventID}/upload/init", chunkController.InitUpload)
r.Options("/component/events/{eventID}/upload/init", chunkController.HandleOptions)
r.Post("/component/events/{eventID}/upload/chunk", chunkController.UploadChunk)
r.Options("/component/events/{eventID}/upload/chunk", chunkController.HandleOptions)
r.Post("/component/events/{eventID}/upload/complete", chunkController.CompleteUpload)
r.Options("/component/events/{eventID}/upload/complete", chunkController.HandleOptions)
r.Get("/component/events/{eventID}/upload/status/{sessionID}", chunkController.GetUploadStatus)
r.Options("/component/events/{eventID}/upload/status/{sessionID}", chunkController.HandleOptions)
r.Delete("/component/events/{eventID}/upload/{sessionID}", chunkController.CancelUpload)
r.Options("/component/events/{eventID}/upload/{sessionID}", chunkController.HandleOptions)
return r
}
func packageBuildCORS(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
controller.SetPackageBuildCORSHeaders(w, r)
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
}
func FileOperateRoutes() chi.Router {
r := chi.NewRouter()
r.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
logrus.Debugf("处理请求: %s %s", r.Method, r.URL.Path)
origin := r.Header.Get("Origin")
if origin == "" {
origin = "*"
}
w.Header().Set("Access-Control-Allow-Origin", origin)
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Custom-Header, X-Requested-With")
w.Header().Set("Access-Control-Allow-Credentials", "true")
w.Header().Set("Access-Control-Max-Age", "3600")
if r.Method == "OPTIONS" {
logrus.Debug("处理 OPTIONS 预检请求")
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
})
r.Route("/", func(r chi.Router) {
r.Get("/download/{fileName}", controller.GetFileManage().DownloadFile)
r.Post("/upload", controller.GetFileManage().UploadFile)
r.Post("/mkdir", controller.GetFileManage().CreateDirectory)
})
return r
}
func LongVersionRoutes() chi.Router {
r := chi.NewRouter()
r.Options("/upload", controller.GetManager().OptionLongVersion)
r.Post("/upload", controller.GetManager().UploadLongVersion)
r.Get("/download/{language}/{version}", controller.GetManager().DownloadLongVersion)
r.Head("/download/{language}/{version}", controller.GetManager().DownloadLongVersion)
return r
}
func HelmInstallRegionStatus() chi.Router {
r := chi.NewRouter()
r.Get("/region_status/{token}", controller.GetManager().GetRegionStatus)
return r
}