#5 bug fix: handling string key problem

This commit is contained in:
liquidz 2014-06-19 21:54:25 +09:00
parent c611871156
commit 78bc74cff3
6 changed files with 52 additions and 14 deletions

1
.gitignore vendored
View file

@ -10,3 +10,4 @@ pom.xml.asc
.lein-failures
.lein-plugins
.lein-repl-history
.nrepl-port

View file

@ -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"

View file

@ -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))

View 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)))

View file

@ -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))))

View 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")