#5 bug fix: handling string key problem
This commit is contained in:
parent
c611871156
commit
78bc74cff3
6 changed files with 52 additions and 14 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -10,3 +10,4 @@ pom.xml.asc
|
|||
.lein-failures
|
||||
.lein-plugins
|
||||
.lein-repl-history
|
||||
.nrepl-port
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
(defproject clj-jwt "0.0.7"
|
||||
(defproject clj-jwt "0.0.8"
|
||||
:description "Clojure library for JSON Web Token(JWT)"
|
||||
:url "https://github.com/liquidz/clj-jwt"
|
||||
:license {:name "Eclipse Public License"
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
(ns clj-jwt.core
|
||||
(:require
|
||||
[clj-jwt.base64 :refer [url-safe-encode-str url-safe-decode-str]]
|
||||
[clj-jwt.sign :refer [get-signature-fn get-verify-fn supported-algorithm?]]
|
||||
[clj-jwt.intdate :refer [joda-time->intdate]]
|
||||
[clojure.data.json :as json]
|
||||
[clojure.string :as str]))
|
||||
[clj-jwt.base64 :refer [url-safe-encode-str url-safe-decode-str]]
|
||||
[clj-jwt.sign :refer [get-signature-fn get-verify-fn supported-algorithm?]]
|
||||
[clj-jwt.intdate :refer [joda-time->intdate]]
|
||||
[clj-jwt.json-key-fn :refer [write-key read-key]]
|
||||
[clojure.data.json :as json]
|
||||
[clojure.string :as str]))
|
||||
|
||||
(def ^:private DEFAULT_SIGNATURE_ALGORITHM :HS256)
|
||||
(def ^:private full-key-name #(subs (str %) 1))
|
||||
(def ^:private map->encoded-json (comp url-safe-encode-str
|
||||
#(json/write-str % :key-fn full-key-name)))
|
||||
(def ^:private encoded-json->map (comp #(json/read-str % :key-fn keyword)
|
||||
#(json/write-str % :key-fn write-key)))
|
||||
(def ^:private encoded-json->map (comp #(json/read-str % :key-fn read-key)
|
||||
url-safe-decode-str))
|
||||
(defn- update-map [m k f] (if (contains? m k) (update-in m [k] f) m))
|
||||
|
||||
|
|
17
src/clj_jwt/json_key_fn.clj
Normal file
17
src/clj_jwt/json_key_fn.clj
Normal file
|
@ -0,0 +1,17 @@
|
|||
(ns clj-jwt.json-key-fn
|
||||
(:require
|
||||
[clojure.string :as str]))
|
||||
|
||||
(defn write-key
|
||||
[x]
|
||||
(cond
|
||||
(string? x) (str "\"" x "\"")
|
||||
:else (name x)))
|
||||
|
||||
(defn read-key
|
||||
[x]
|
||||
(if-let [y (re-seq #"^\"(.*)\"$" x)]
|
||||
(-> y first second)
|
||||
(keyword x)))
|
||||
|
||||
|
|
@ -150,11 +150,11 @@
|
|||
(-> claim jwt (sign :ES512 ec-prv-key) to-str str->jwt (verify ec-pub-key)) => true)
|
||||
|
||||
(fact "Claims containing string key should be verified"
|
||||
(let [sclaim {"a/b" "c"}]
|
||||
(-> sclaim jwt (sign "foo") (verify "foo")) => true
|
||||
(-> sclaim jwt (sign "foo") to-str str->jwt (verify "foo")) => true
|
||||
(-> sclaim jwt (sign "foo") (verify "bar")) => false)))
|
||||
|
||||
(let [sclaim {"a/b" "c"}
|
||||
token (-> sclaim jwt (sign "foo"))]
|
||||
(verify token "foo") => true
|
||||
(-> token to-str str->jwt (verify "foo")) => true
|
||||
(verify token "bar") => false)))
|
||||
|
||||
(facts "str->jwt function should work."
|
||||
(let [before (jwt claim)
|
||||
|
@ -168,6 +168,14 @@
|
|||
before (-> claim jwt (sign "foo"))
|
||||
after (-> before to-str str->jwt)]
|
||||
(fact "signed jwt"
|
||||
(:header before) => (:header after)
|
||||
(:claims before) => (:claims after)
|
||||
(:signature before) => (:signature after)))
|
||||
|
||||
(let [claim {"a/b" "c"}
|
||||
before (jwt claim)
|
||||
after (-> before to-str str->jwt)]
|
||||
(fact "Claim containing string key"
|
||||
(:header before) => (:header after)
|
||||
(:claims before) => (:claims after)
|
||||
(:signature before) => (:signature after))))
|
||||
|
|
12
test/clj_jwt/json_key_fn_test.clj
Normal file
12
test/clj_jwt/json_key_fn_test.clj
Normal file
|
@ -0,0 +1,12 @@
|
|||
(ns clj-jwt.json-key-fn-test
|
||||
(:require
|
||||
[clj-jwt.json-key-fn :refer :all]
|
||||
[midje.sweet :refer :all]))
|
||||
|
||||
(fact "write-key should work fine."
|
||||
(write-key :foo) => "foo"
|
||||
(write-key "foo") => "\"foo\"")
|
||||
|
||||
(fact "read-key should work fine."
|
||||
(read-key "foo") => :foo
|
||||
(read-key "\"foo\"") => "foo")
|
Loading…
Reference in a new issue