opencode-cursor-agent/internal/server/session.go

29 lines
760 B
Go

package server
import (
"fmt"
"net/http"
"strings"
"time"
)
const sessionHeaderName = "X-Cursor-Session-ID"
const exposeHeadersName = "Access-Control-Expose-Headers"
func ensureSessionHeader(w http.ResponseWriter, r *http.Request) string {
sessionKey := strings.TrimSpace(r.Header.Get(sessionHeaderName))
if sessionKey == "" {
sessionKey = fmt.Sprintf("csess_%d", time.Now().UnixNano())
}
w.Header().Set(sessionHeaderName, sessionKey)
existing := w.Header().Get(exposeHeadersName)
if existing == "" {
w.Header().Set(exposeHeadersName, sessionHeaderName)
} else if !strings.Contains(strings.ToLower(existing), strings.ToLower(sessionHeaderName)) {
w.Header().Set(exposeHeadersName, existing+", "+sessionHeaderName)
}
return sessionKey
}