aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2019-03-14 23:40:35 +0000
committers-ol <s-ol@users.noreply.github.com>2019-03-14 23:42:29 +0000
commitf20a09da3d09f54842254706b0cf2e3d05a82ca1 (patch)
treec3e97328e4ff37f023a95c6032910ed718daf29f /src
downloadredirectly-f20a09da3d09f54842254706b0cf2e3d05a82ca1.tar.gz
redirectly-f20a09da3d09f54842254706b0cf2e3d05a82ca1.zip
initial commit
Diffstat (limited to 'src')
-rw-r--r--src/redirectly/core.clj32
1 files changed, 32 insertions, 0 deletions
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!))