42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
# ProxyEngine
|
||
|
||
**Özet:** HTTP isteklerini upstream backend'e ileten merkezi proxy motoru (`internal/proxy/proxy.go:24`). Tüm header'ları korur, hassas header'ları log'da maskeler, hop-by-hop header'ları otomatik atlar.
|
||
|
||
**Kütüphaneler:** Go `net/http`, `context`, `io`
|
||
|
||
**Bağlantılar:** [[OpenAIHandler]], [[AnthropicHandler]], [[Index]]
|
||
|
||
## Struct
|
||
|
||
```go
|
||
type ForwardResult struct {
|
||
StatusCode int
|
||
Body []byte
|
||
Headers http.Header
|
||
}
|
||
```
|
||
|
||
## Fonksiyonlar
|
||
|
||
### `Forward(ctx, method, targetURL, headers, body, timeoutSec) *ForwardResult`
|
||
- HTTP isteğini hedef URL'ye iletir
|
||
- Context üzerinden timeout yönetimi (`time.Duration(timeoutSec) * time.Second`)
|
||
- Hop-by-hop header'ları atlar: `Connection`, `TE`, `Trailers`, `Transfer-Encoding`, `Upgrade`
|
||
- Body'yi log için okur, sonra tekrar sarar
|
||
- `ForwardResult{StatusCode, Body, Headers}` döndürür
|
||
|
||
### `MaskSensitiveHeaders(headers) http.Header`
|
||
- Header'ları clone'lar
|
||
- `Authorization` → `Bearer [REDACTED]`
|
||
- `X-Api-Key` → `[REDACTED]`
|
||
- Sadece loglama amaçlı kullanılır; upstream'e orijinal header gider
|
||
|
||
### `truncateForLog(s, maxLen) string`
|
||
- Uzun string'leri `maxLen` (2000) karakterde kırpar, `...[TRUNCATED]` ekler
|
||
|
||
## Güvenlik
|
||
|
||
- Hassas header'lar upstream'e **olduğu gibi** iletilir ama **log'da maskelenir**
|
||
- Hop-by-hop header'lar otomatik atlanır (proxy zincirini bozmamak için)
|
||
- Sensitive header masking sadece log çıktısı içindir
|