Files
Local-Cursor/internal/backend/server/context.go
FuDie0915 db73cf5a39 chore: import Local-Cursor v1.1.8 source snapshot
Includes the current working directory changes. Historical commits and release binaries are excluded to limit Gitea storage.
Source base: d7515973fbfd6dd2001fa156c483455b8081c7cb
2026-11-10 01:24:28 +08:00

73 lines
1.4 KiB
Go

package server
import (
"log/slog"
"net/http"
"net/url"
"strings"
"time"
)
const HeaderServerUpstreamURL = "X-Server-Upstream-URL"
type SourceKind string
const (
SourceNative SourceKind = "native"
SourceMITM SourceKind = "mitm"
)
type ProtocolClass string
const (
ProtocolHTTP ProtocolClass = "http"
ProtocolConnectUnary ProtocolClass = "connect_unary"
ProtocolConnectStream ProtocolClass = "connect_stream"
)
type Context struct {
Writer http.ResponseWriter
Request *http.Request
RouteName string
Source SourceKind
Protocol ProtocolClass
StartedAt time.Time
UpstreamURL *url.URL
Mode ExecutionMode
LastError error
Logger *slog.Logger
}
func newContext(writer http.ResponseWriter, request *http.Request, route Route) *Context {
return &Context{
Writer: writer,
Request: request,
RouteName: route.Name,
Protocol: route.Protocol,
StartedAt: time.Now(),
Logger: slog.Default(),
Mode: ModeLocal,
}
}
func (ctx *Context) ParseUpstreamURL() error {
if ctx == nil || ctx.Request == nil {
return nil
}
rawURL := strings.TrimSpace(ctx.Request.Header.Get(HeaderServerUpstreamURL))
if rawURL == "" {
ctx.Source = SourceNative
ctx.UpstreamURL = nil
return nil
}
parsed, err := ParseAndValidateRawURL(rawURL)
if err != nil {
return err
}
ctx.Source = SourceMITM
ctx.UpstreamURL = parsed
return nil
}