@@ -22,34 +22,37 @@ encode(Algorithm, Payload, Secret, HeaderExtra) ->
22
22
{ok , <<DataEncoded /binary , $. , SignatureEncoded /binary >>}.
23
23
24
24
decode (Data , Secret ) when is_binary (Data ) ->
25
- try binary :split (Data , [<<" ." >>], [global ]) of
26
- [HeaderEncoded , PayloadEncoded , SignatureEncoded ] ->
27
- Header = jsx :decode (base64url :decode (HeaderEncoded )),
28
- Type = proplists :get_value (<<" typ" >>, Header ),
29
- AlgorithmStr = proplists :get_value (<<" alg" >>, Header ),
30
- Expiration = proplists :get_value (<<" exp" >>, Header , noexp ),
31
- Algorithm = algorithm_to_atom (AlgorithmStr ),
32
- DataEncoded = <<HeaderEncoded /binary , $. , PayloadEncoded /binary >>,
33
- ActualSignature = get_signature (Algorithm , DataEncoded , Secret ),
34
- Signature = base64url :decode (SignatureEncoded ),
35
- Payload = jsx :decode (base64url :decode (PayloadEncoded )),
36
- Jwt = # jwt {typ = Type , body = Payload , alg = Algorithm ,
37
- sig = Signature , actual_sig = ActualSignature },
38
- if
39
- Signature =:= ActualSignature ->
40
- % TODO: leeway
41
- NowSecs = now_secs (),
42
- if
43
- Expiration == noexp orelse Expiration > NowSecs ->
44
- {ok , Jwt };
45
- true ->
46
- {error , {expired , Expiration }}
47
- end ;
48
- true ->
49
- {error , {badsig , Jwt }}
50
- end ;
51
- _ ->
52
- {error , badtoken }
25
+ try
26
+ case binary :split (Data , [<<" ." >>], [global ]) of
27
+ [HeaderEncoded , PayloadEncoded , SignatureEncoded ] ->
28
+ Header = jsx :decode (base64url :decode (HeaderEncoded )),
29
+ Type = proplists :get_value (<<" typ" >>, Header ),
30
+ AlgorithmStr = proplists :get_value (<<" alg" >>, Header ),
31
+ Expiration = proplists :get_value (<<" exp" >>, Header , noexp ),
32
+ Algorithm = algorithm_to_atom (AlgorithmStr ),
33
+ DataEncoded = <<HeaderEncoded /binary , $. ,
34
+ PayloadEncoded /binary >>,
35
+ ActualSignature = get_signature (Algorithm , DataEncoded , Secret ),
36
+ Signature = base64url :decode (SignatureEncoded ),
37
+ Payload = base64url :decode (PayloadEncoded ),
38
+ Jwt = # jwt {typ = Type , body = Payload , alg = Algorithm ,
39
+ sig = Signature , actual_sig = ActualSignature },
40
+ if
41
+ Signature =:= ActualSignature ->
42
+ % TODO: leeway
43
+ NowSecs = now_secs (),
44
+ if
45
+ Expiration == noexp orelse Expiration > NowSecs ->
46
+ {ok , Jwt };
47
+ true ->
48
+ {error , {expired , Expiration }}
49
+ end ;
50
+ true ->
51
+ {error , {badsig , Jwt }}
52
+ end ;
53
+ _ ->
54
+ {error , badtoken }
55
+ end
53
56
catch
54
57
error :E ->
55
58
{error , E }
0 commit comments