Files
backend/router.go
NanamiAdmin 33e5119b0a feat(logging): add real-time log streaming via websocket
- Implement WebSocket endpoint for streaming logs to clients
- Add log broadcaster to manage client connections and history
- Update documentation with new WebSocket API details
- Include gorilla/websocket dependency for WebSocket support
2026-03-17 19:12:15 +08:00

73 lines
2.3 KiB
Go

package main
import (
"net/http"
"strings"
"super-frpc/postLog"
)
func setupRoutes() {
postLog.Info("Setting up routes...")
http.HandleFunc("/system/getStatus", GetStatusHandler)
http.HandleFunc("/system/getSoftwareInfo", GetSoftwareInfoHandler)
logHandler := postLog.NewLogSocketHandler(postLog.GetLogBroadcaster())
http.HandleFunc("/system/getLogs", logHandler.Handle)
http.HandleFunc("/register", RegisterHandler)
http.HandleFunc("/login", LoginHandler)
http.HandleFunc("/logout", LogoutHandler)
http.HandleFunc("/userMgr/create", CreateUserHandler)
http.HandleFunc("/userMgr/remove", RemoveUserHandler)
http.HandleFunc("/userMgr/list", ListUserHandler)
// http.HandleFunc("/userMgr/modify", ModifyUserHandler)
http.HandleFunc("/sessionMgr/list", ListActiveSessionsHandler)
http.HandleFunc("/sessionMgr/remove", RemoveSessionHandler)
http.HandleFunc("/frpcAct/instanceMgr/create", CreateInstanceHandler)
http.HandleFunc("/frpcAct/instanceMgr/list", ListInstancesHandler)
http.HandleFunc("/frpcAct/instanceMgr/", func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if len(path) < len("/frpcAct/instanceMgr/") { // Check if path is at least as long as the base path
SendErrorResponse(w, http.StatusNotFound, "invalid path")
return
}
remainingPath := path[len("/frpcAct/instanceMgr/"):] // Get the remaining path after the base path
if r.Method == http.MethodGet { // Handle `/list` and `/list/<instanceName>` by GET request
if remainingPath == "list" {
ListInstancesHandler(w, r)
return
}
instanceName := strings.Trim(remainingPath, "/") // Get the instance name from the remaining path
if instanceName != "" {
ListInstancesHandler(w, r)
return
}
}
if r.Method == http.MethodPost { // Handle `/create`, `/delete`, and `/modify/<field>` by POST request
if remainingPath == "create" {
CreateInstanceHandler(w, r)
return
}
if remainingPath == "delete" {
DeleteInstanceHandler(w, r)
return
}
if remainingPath == "modify" { // Handle `/modify` by POST request
ModifyInstanceHandler(w, r)
return
}
}
SendErrorResponse(w, http.StatusNotFound, "endpoint not found") // Send error response if no endpoint is found
})
}