From 47ff1dcd8592da53005cc355691cf5c7516af571 Mon Sep 17 00:00:00 2001 From: J0sueTM Date: Wed, 7 Aug 2024 16:11:20 -0300 Subject: [PATCH] feat: scratch method retrieval --- deps.edn | 8 ++++--- resources/command-allowlist.edn | 4 ++++ src/com/moclojer/rq.clj | 38 +++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 resources/command-allowlist.edn diff --git a/deps.edn b/deps.edn index f1426fa..ceb62bb 100644 --- a/deps.edn +++ b/deps.edn @@ -1,8 +1,10 @@ -{:paths ["src"] +{:paths ["src" "resources"] :deps - {redis.clients/jedis {:mvn/version "5.1.2"} + {redis.clients/jedis {#_#_:mvn/version "5.1.2" + :local/root "vendor/jedis/target/jedis-5.2.0-SNAPSHOT.jar"} org.clojure/tools.logging {:mvn/version "1.3.0"} - ch.qos.logback/logback-classic {:mvn/version "1.5.6"}} + ch.qos.logback/logback-classic {:mvn/version "1.5.6"} + camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"}} :aliases {;; clj -A:dev -m com.moclojer.rq diff --git a/resources/command-allowlist.edn b/resources/command-allowlist.edn new file mode 100644 index 0000000..0469b54 --- /dev/null +++ b/resources/command-allowlist.edn @@ -0,0 +1,4 @@ +#{"lpush" "rpush" "lpop" "rpop" "brpop" + "blpop" "lrange" "lindex" "lset" "lrem" + "llen" "linsert" "ltrim" "rpoplpush" + "brpoplpush" "lmove"} diff --git a/src/com/moclojer/rq.clj b/src/com/moclojer/rq.clj index 5b03476..8bcd310 100644 --- a/src/com/moclojer/rq.clj +++ b/src/com/moclojer/rq.clj @@ -26,3 +26,41 @@ "Disconnect and close redis client" ([] (close-client *redis-pool*)) ([client] (.close @client))) + +(comment + ;; (import [java.util Arrays]) + (require '[clojure.string :as str] + '[clojure.java.io :as io] + '[clojure.edn :as edn] + '[camel-snake-kebab.core :as csk]) + (import [redis.clients.jedis JedisPooled]) + + (def allowlist + (-> (io/resource "command-allowlist.edn") + (slurp) + (edn/read-string))) + + (->> (.getMethods JedisPooled) + (map + (fn [class] + {:name (csk/->kebab-case (.getName class)) + :parameters (map + #(identity + {:type (-> (.. % getType getName) + (str/split #"\.") + (last) + (csk/->kebab-case)) + :name (csk/->kebab-case (.getName %))}) + (.getParameters class))})) + (filter #(contains? allowlist (:name %))) + (reduce + (fn [methods {:keys [name parameters]}] + (let [overload-count (count + (filter + #(str/starts-with? (key %) name) + methods)) + cur-overload-id (when (> overload-count 0) overload-count)] + (assoc methods (str name cur-overload-id) parameters))) + {})) + ;; + )