[DEPRECATED] Go implementation of plcbundle
at 4c90c2aa4383441204bab523347d2e6e2bd7dfc2 52 lines 1.3 kB view raw
1package server 2 3import ( 4 "net/http" 5 6 "github.com/goccy/go-json" 7) 8 9// corsMiddleware adds CORS headers 10func corsMiddleware(next http.Handler) http.Handler { 11 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 12 // Skip CORS for WebSocket upgrade requests 13 if r.Header.Get("Upgrade") == "websocket" { 14 next.ServeHTTP(w, r) 15 return 16 } 17 18 // Normal CORS handling 19 w.Header().Set("Access-Control-Allow-Origin", "*") 20 w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") 21 22 if requestedHeaders := r.Header.Get("Access-Control-Request-Headers"); requestedHeaders != "" { 23 w.Header().Set("Access-Control-Allow-Headers", requestedHeaders) 24 } else { 25 w.Header().Set("Access-Control-Allow-Headers", "*") 26 } 27 28 w.Header().Set("Access-Control-Max-Age", "86400") 29 30 if r.Method == "OPTIONS" { 31 w.WriteHeader(204) 32 return 33 } 34 35 next.ServeHTTP(w, r) 36 }) 37} 38 39// sendJSON sends a JSON response 40func sendJSON(w http.ResponseWriter, statusCode int, data interface{}) { 41 w.Header().Set("Content-Type", "application/json") 42 43 jsonData, err := json.Marshal(data) 44 if err != nil { 45 w.WriteHeader(500) 46 w.Write([]byte(`{"error":"failed to marshal JSON"}`)) 47 return 48 } 49 50 w.WriteHeader(statusCode) 51 w.Write(jsonData) 52}