package requestmodifiers

import (
	"strings"
	//"fmt"
	"ladder/proxychain"
)

var forwardBlacklist map[string]bool

func init() {
	forwardBlacklist = map[string]bool{
		"host":              true,
		"connection":        true,
		"keep-alive":        true,
		"content-length":    true,
		"content-encoding":  true,
		"transfer-encoding": true,
		"referer":           true,
		"x-forwarded-for":   true,
		"x-real-ip":         true,
		"forwarded":         true,
		"accept-encoding":   true,
	}
}

// ForwardRequestHeaders forwards the requests headers sent from the client to the upstream server
func ForwardRequestHeaders() proxychain.RequestModification {
	return func(chain *proxychain.ProxyChain) error {
		forwardHeaders := func(key, value []byte) {
			k := strings.ToLower(string(key))
			v := string(value)
			if forwardBlacklist[k] {
				return
			}
			// fmt.Println(k, v)
			chain.Request.Header.Set(k, v)
		}

		chain.Context.Request().
			Header.VisitAll(forwardHeaders)

		return nil
	}
}
