;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS INC Sucursal en España SL

(ns app.util.inet
  "INET addr parsing and validation helpers"
  (:require
   [cuerdas.core :as str]
   [yetti.request :as yreq])
  (:import
   com.google.common.net.InetAddresses
   java.net.InetAddress))

(defn valid?
  [s]
  (InetAddresses/isInetAddress s))

(defn normalize
  [s]
  (try
    (let [addr (InetAddresses/forString s)]
      (.getHostAddress ^InetAddress addr))
    (catch Throwable _cause
      nil)))

(defn parse-request
  [request]
  (or (some-> (yreq/get-header request "x-real-ip")
              (normalize))
      (some-> (yreq/get-header request "x-forwarded-for")
              (str/split #"\s*,\s*")
              (first)
              (normalize))
      (some-> (yreq/remote-addr request)
              (normalize))))
