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 {
|
|
|
|
return forwardedFor
|
|
|
|
}
|
|
|
|
}
|
2025-02-07 16:54:36 +00:00
|
|
|
return addr
|
2025-02-07 16:40:58 +00:00
|
|
|
}
|