arimelody.me/controller/ip.go

24 lines
686 B
Go
Raw Normal View History

2025-02-07 16:40:58 +00:00
package controller
import (
2025-02-07 16:54:36 +00:00
"arimelody-web/model"
2025-02-07 16:40:58 +00:00
"net/http"
"slices"
2025-02-07 16:54:36 +00:00
"strings"
2025-02-07 16:40:58 +00:00
)
// Returns the request's original IP address, resolving the `x-forwarded-for`
// header if the request originates from a trusted proxy.
2025-02-07 16:54:36 +00:00
func ResolveIP(app *model.AppState, r *http.Request) string {
addr := strings.Split(r.RemoteAddr, ":")[0]
if slices.Contains(app.Config.TrustedProxies, addr) {
2025-02-07 16:40:58 +00:00
forwardedFor := r.Header.Get("x-forwarded-for")
if len(forwardedFor) > 0 {
// discard extra IPs; cloudflare tends to append their nodes
forwardedFor = strings.Split(forwardedFor, ", ")[0]
2025-02-07 16:40:58 +00:00
return forwardedFor
}
}
2025-02-07 16:54:36 +00:00
return addr
2025-02-07 16:40:58 +00:00
}