mirror of
https://github.com/yusing/godoxy.git
synced 2026-02-19 15:27:46 +01:00
123 lines
3.0 KiB
Markdown
123 lines
3.0 KiB
Markdown
# agent/pkg/agentproxy
|
|
|
|
Package for configuring HTTP proxy connections through the GoDoxy Agent using HTTP headers.
|
|
|
|
## Overview
|
|
|
|
This package provides types and functions for parsing and setting agent proxy configuration via HTTP headers. It supports both a modern base64-encoded JSON format and a legacy header-based format for backward compatibility.
|
|
|
|
## Architecture
|
|
|
|
```mermaid
|
|
graph LR
|
|
A[HTTP Request] --> B[ConfigFromHeaders]
|
|
B --> C{Modern Format?}
|
|
C -->|Yes| D[Parse X-Proxy-Config Base64 JSON]
|
|
C -->|No| E[Parse Legacy Headers]
|
|
D --> F[Config]
|
|
E --> F
|
|
|
|
F --> G[SetAgentProxyConfigHeaders]
|
|
G --> H[Modern Headers]
|
|
G --> I[Legacy Headers]
|
|
```
|
|
|
|
## Public Types
|
|
|
|
### Config
|
|
|
|
```go
|
|
type Config struct {
|
|
Scheme string // Proxy scheme (http or https)
|
|
Host string // Proxy host (hostname or hostname:port)
|
|
HTTPConfig // Extended HTTP configuration
|
|
}
|
|
```
|
|
|
|
The `HTTPConfig` embedded type (from `internal/route/types`) includes:
|
|
|
|
- `NoTLSVerify` - Skip TLS certificate verification
|
|
- `ResponseHeaderTimeout` - Timeout for response headers
|
|
- `DisableCompression` - Disable gzip compression
|
|
|
|
## Public Functions
|
|
|
|
### ConfigFromHeaders
|
|
|
|
```go
|
|
func ConfigFromHeaders(h http.Header) (Config, error)
|
|
```
|
|
|
|
Parses proxy configuration from HTTP request headers. Tries modern format first, falls back to legacy format if not present.
|
|
|
|
### proxyConfigFromHeaders
|
|
|
|
```go
|
|
func proxyConfigFromHeaders(h http.Header) (Config, error)
|
|
```
|
|
|
|
Parses the modern base64-encoded JSON format from `X-Proxy-Config` header.
|
|
|
|
### proxyConfigFromHeadersLegacy
|
|
|
|
```go
|
|
func proxyConfigFromHeadersLegacy(h http.Header) Config
|
|
```
|
|
|
|
Parses the legacy header format:
|
|
|
|
- `X-Proxy-Host` - Proxy host
|
|
- `X-Proxy-Https` - Whether to use HTTPS
|
|
- `X-Proxy-Skip-Tls-Verify` - Skip TLS verification
|
|
- `X-Proxy-Response-Header-Timeout` - Response timeout in seconds
|
|
|
|
### SetAgentProxyConfigHeaders
|
|
|
|
```go
|
|
func (cfg *Config) SetAgentProxyConfigHeaders(h http.Header)
|
|
```
|
|
|
|
Sets headers for modern format with base64-encoded JSON config.
|
|
|
|
### SetAgentProxyConfigHeadersLegacy
|
|
|
|
```go
|
|
func (cfg *Config) SetAgentProxyConfigHeadersLegacy(h http.Header)
|
|
```
|
|
|
|
Sets headers for legacy format with individual header fields.
|
|
|
|
## Header Constants
|
|
|
|
Modern headers:
|
|
|
|
- `HeaderXProxyScheme` - Proxy scheme
|
|
- `HeaderXProxyHost` - Proxy host
|
|
- `HeaderXProxyConfig` - Base64-encoded JSON config
|
|
|
|
Legacy headers (deprecated):
|
|
|
|
- `HeaderXProxyHTTPS`
|
|
- `HeaderXProxySkipTLSVerify`
|
|
- `HeaderXProxyResponseHeaderTimeout`
|
|
|
|
## Usage Example
|
|
|
|
```go
|
|
// Reading configuration from incoming request headers
|
|
func handleRequest(w http.ResponseWriter, r *http.Request) {
|
|
cfg, err := agentproxy.ConfigFromHeaders(r.Header)
|
|
if err != nil {
|
|
http.Error(w, "Invalid proxy config", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
// Use cfg.Scheme and cfg.Host to proxy the request
|
|
// ...
|
|
}
|
|
```
|
|
|
|
## Integration
|
|
|
|
This package is used by `agent/pkg/handler/proxy_http.go` to configure reverse proxy connections based on request headers.
|