package controller

import (
    "arimelody-web/model"
    "net/http"
    "slices"
    "strings"
)

// Returns the request's original IP address, resolving the `x-forwarded-for`
// header if the request originates from a trusted proxy.
func ResolveIP(app *model.AppState, r *http.Request) string {
    addr := strings.Split(r.RemoteAddr, ":")[0]
    if slices.Contains(app.Config.TrustedProxies, addr) {
        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]
            return forwardedFor
        }
    }
    return addr
}
