| 199 | } |
| 200 | |
| 201 | func (proxy *ProxyServer) decryptRequest(req *http.Request, r *clientRequest) { |
| 202 | var cookies buffer |
| 203 | for _, c := range req.Cookies() { |
| 204 | c.Value = proxy.Cipher.Decrypt(c.Value, &r.iv) |
| 205 | cookies.Writes(c.String(), ";") |
| 206 | } |
| 207 | req.Header.Set("Cookie", cookies.Trunc(';').String()) |
| 208 | |
| 209 | if origin := req.Header.Get("Origin"); len(origin) > 4 { |
| 210 | req.Header.Set("Origin", proxy.Decrypt(origin[:len(origin)-4], &r.iv)) |
| 211 | } |
| 212 | |
| 213 | if referer := req.Header.Get("Referer"); referer != "" { |
| 214 | req.Header.Set("Referer", proxy.Decrypt(referer, &r.iv)) |
| 215 | } |
| 216 | |
| 217 | for k := range req.Header { |
| 218 | if k[:3] == "Cf-" || (len(k) > 12 && strings.ToLower(k[:12]) == "x-forwarded-") { |
| 219 | // ignore all cloudflare headers |
| 220 | // this is needed when you use cf as the frontend: |
| 221 | // gofw client -> cloudflare -> gofw server -> target host using cloudflare |
| 222 | |
| 223 | // delete all x-forwarded-... headers |
| 224 | // some websites won't allow them |
| 225 | req.Header.Del(k) |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | req.Body = proxy.Cipher.IO.NewReadCloser(req.Body, &r.iv) |
| 230 | } |
| 231 | |
| 232 | func copyHeaders(dst, src http.Header, gc *Cipher, enc bool, iv *[ivLen]byte) { |
| 233 | for k := range dst { |