From f20a09da3d09f54842254706b0cf2e3d05a82ca1 Mon Sep 17 00:00:00 2001 From: s-ol Date: Fri, 15 Mar 2019 00:40:35 +0100 Subject: initial commit --- .gitignore | 2 ++ project.clj | 11 +++++++++++ resources/config.edn | 19 +++++++++++++++++++ src/redirectly/core.clj | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 .gitignore create mode 100644 project.clj create mode 100644 resources/config.edn create mode 100644 src/redirectly/core.clj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9a630f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.lein-repl-history +target diff --git a/project.clj b/project.clj new file mode 100644 index 0000000..9ae0b54 --- /dev/null +++ b/project.clj @@ -0,0 +1,11 @@ +(defproject redirectly "0.1.0-SNAPSHOT" + :description "mini redirect service" + :url "https://s-ol.nu/redirectly" + :plugins [[lein-ring "0.12.5"]] + :ring {:handler redirectly.core/handler + :destroy redirectly.core/destroy} + :dependencies [[org.clojure/clojure "1.10.0"] + [sonian/carica "1.2.2"] + [ring/ring-core "1.7.1"] + [ring/ring-jetty-adapter "1.7.1"] + [ring-logger "1.0.1"]]) diff --git a/resources/config.edn b/resources/config.edn new file mode 100644 index 0000000..7443162 --- /dev/null +++ b/resources/config.edn @@ -0,0 +1,19 @@ +{:routes {"" {:to [:mmm]} + :plonat-atek {:to [:mmm "/games/plonat_atek"]} + :iii-telefoni {:to [:mmm "/projects/iii-telefoni"]}} + :404 " + + + + not found + + +

entry not found :(

+

+ if you followed a link here, please let me know at s+missing <ät> s-ol <döt> nu. +

+

+ in the meantime, you may find what you were looking for at mmm.s-ol.nu. +

+ + "} diff --git a/src/redirectly/core.clj b/src/redirectly/core.clj new file mode 100644 index 0000000..8b7025f --- /dev/null +++ b/src/redirectly/core.clj @@ -0,0 +1,32 @@ +(ns redirectly.core + (:require [carica.core :refer [config clear-config-cache!]] + [ring.util.response :as response])) + +(def routes (config :routes)) + +(defn matches? [[slug route] uri] + (when (= uri (str "/" (name slug))) + route)) + +(defn status [route] + (or (:status route) 307)) + +(defn url [route] + (:to route)) + +(defmulti url (fn [{to :to}] + (if (vector? to) + (first to) + :url))) + +(defmethod url :url [{to :to}] to) +(defmethod url :mmm [{[_ path] :to}] (str "//mmm.s-ol.nu" path)) + +(defn handler [req] + (if-let [route (some #(matches? % (:uri req)) routes)] + (response/redirect (url route) (status route)) + (-> (response/not-found (config :404)) + (response/content-type "text/html")))) + +(defn destroy [] + (clear-config-cache!)) -- cgit v1.2.3