package sihl

  1. Overview
  2. Docs
The modular functional web framework

Install

Dune Dependency

Authors

Maintainers

Sources

sihl-queue-0.1.5.tbz
sha256=bfa7bde9af02bb83d5ca39d54797b05b43317f033d93d24ca86ca42ff8ef83a1
sha512=6bb8727f65116e8042aa1fb77b3c14851ce5238f7b412adadf0f8e5b52d5310e8f06056c96bf76a82ffd7096753f49b2b0482f41e18ee1ca94310b874fe81bf9

doc/src/sihl.utils/utils_jwt.ml.html

Source file utils_jwt.ml

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
36
37
38
39
40
type algorithm = Jwto.algorithm =
  | HS256
  | HS512
  | Unknown

type t = Jwto.t
type payload = (string * string) list

let empty = []
let add_claim ~key ~value payload = Base.List.cons (key, value) payload

let set_expires_in ~now duration payload =
  let span = Utils_time.duration_to_span duration in
  let epoch_s =
    Ptime.add_span now span |> Option.map Ptime.to_float_s |> Option.map Float.to_string
  in
  match epoch_s with
  | Some epoch_s -> add_claim ~key:"exp" ~value:epoch_s payload
  | None -> payload
;;

let encode algorithm ~secret payload = Jwto.encode algorithm secret payload
let decode ~secret token = Jwto.decode_and_verify secret token
let get_claim ~key token = token |> Jwto.get_payload |> Jwto.get_claim key

let is_expired ~now ?(claim = "exp") token =
  let is_ealier =
    let ( let* ) = Option.bind in
    let* claim = get_claim ~key:claim token in
    let* exp = Float.of_string_opt claim in
    let* exp = Ptime.of_float_s exp in
    Option.some (Ptime.is_earlier exp ~than:now)
  in
  Option.value is_ealier ~default:false
;;

let pp = Jwto.pp
let eq = Jwto.eq

module Jwto = Jwto
OCaml

Innovation. Community. Security.