[DEPRECATED] Go implementation of plcbundle
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}