(ns bunny2realip.core (:require [babashka.http-client :as http] [cheshire.core :as json] [clojure.string :as s])) (defonce ip-lists ["https://bunnycdn.com/api/system/edgeserverlist/" "https://bunnycdn.com/api/system/cdnserverlist/"]) (defonce realip-dest "/etc/nginx/conf.d/bunny.conf") (defn get-list [url] (-> url http/get :body json/parse-string)) (defn format-ips [ip] (str "set_real_ip_from " ip ";")) (defn -main [& args] (let [ips (set (mapcat get-list ip-lists)) realips (map format-ips (sort ips))] (try (as-> realips $ (concat $ ["real_ip_header X-Real-IP;" "real_ip_recursive on;"]) (s/join "\n" $) (spit realip-dest $)) (System/exit 0) (catch Exception _ (System/exit -1)))))