package app import ( "be/app/helper" "mime" "net/http" "path/filepath" "strings" ) func ApiCORS(w http.ResponseWriter, r *http.Request) (http.ResponseWriter, *http.Request) { origin := r.Header.Get("Origin") w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") if strings.HasPrefix(r.Host, "192.168.") { w.Header().Set("Access-Control-Allow-Origin", origin) } w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Accept, Accept-Language, Accept-Encoding") return w, r } func ApiGet(w http.ResponseWriter, r *http.Request) { root, err := filepath.Abs("../public") if err != nil { MCRMLog("ApiGet Abs Error: ", err) return } var file string if strings.Contains(r.URL.Path, "/config.js") { file = filepath.Join(root, "config.js") w.Header().Set("Content-Type", "text/javascript") // set content type header } else if r.URL.Path != "/" { file = filepath.Join(root, r.URL.Path) } contentType := mime.TypeByExtension(filepath.Ext(file)) // get content type if contentType == "" { file = filepath.Join(root, "index.html") } http.ServeFile(w, r, file) } func ApiPost(w http.ResponseWriter, r *http.Request) { access, data, err := helper.EndpointAccess(w, r) if !access || err != nil { MCRMLog("ApiPost EndPointAccess Error: ", err) return } if data != "" { ApiAuth(data, w, r) return } switch r.URL.Path { case "/macro/record": SaveMacro(w, r) case "/macro/list": ListMacros(w, r) case "/macro/open": OpenMacro(w, r) case "/macro/delete": DeleteMacro(w, r) case "/macro/play": PlayMacro("", w, r) case "/device/server/ip": GetServerIP(w, r) case "/device/list": DeviceList(w, r) case "/device/access/check": DeviceAccessCheck(w, r) case "/device/access/request": DeviceAccessRequest(w, r) case "/device/link/ping": PingLink(w, r) case "/device/link/start": StartLink(w, r) case "/device/link/poll": PollLink(w, r) case "/device/link/remove": RemoveLink("", w, r) case "/device/handshake": Handshake(w, r) case "/panel/list": PanelList(w, r) case "/panel/get": GetPanel("", w, r) case "/panel/save/json": SavePanelJSON(w, r) } } func ApiAuth(data string, w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/macro/play": PlayMacro(data, w, r) case "/device/link/remove": RemoveLink(data, w, r) case "/panel/list": MCRMLog("Authenticated Panellist") PanelList(w, r) case "/panel/get": GetPanel(data, w, r) } }