-
-
Notifications
You must be signed in to change notification settings - Fork 81
/
jwt.cljs
35 lines (31 loc) · 1.06 KB
/
jwt.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(ns portal.ui.viewer.jwt
(:require [clojure.string :as str]
[goog.crypt.base64 :as Base64]
[portal.ui.inspector :as ins]))
(defn- parse-json [value]
(js->clj (.parse js/JSON (js/atob value)) :keywordize-keys true))
(defn- parse-jwt [jwt]
(try
(let [[header payload signature] (str/split jwt ".")]
(with-meta
{:jwt/header (parse-json header)
:jwt/payload
(with-meta (parse-json payload)
{:portal.viewer/for
{:auth_time :portal.viewer/date-time
:exp :portal.viewer/date-time
:iat :portal.viewer/date-time}})
:jwt/signature
(Base64/decodeStringToUint8Array signature)}
{:portal.viewer/for
{:jwt/signature :portal.viewer/bin}}))
(catch :default e (ins/error->data e))))
(defn inspect-jwt [jwt]
[ins/tabs
{:portal.viewer/jwt (parse-jwt jwt)
"..." jwt}])
(def viewer
{:predicate string?
:component inspect-jwt
:name :portal.viewer/jwt
:doc "Parse a string as a JWT. Will render error if parsing fails."})