package savvy

  1. Overview
  2. Docs
A straightforward OAuth2 client

Install

Dune Dependency

Authors

Maintainers

Sources

savvy-0.2.0.tbz
sha256=172de1fdd0e5d015c7dbbef1845f47d452bd9c3153ebb07b0a0d459164906957
sha512=4cdb0156d9bce1ae8f466bedc7be52d303dfb73d099dceb47949fbf0cd5a9452ba1da13db829e88432ff4fb9404fda41694033dcd91e3bb6466b729cf2740272

doc/src/savvy.utils/utils.ml.html

Source file utils.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(* Generate a cryptographically secure random state value *)
let generate_state () =
  let open Cryptokit in
  let rng = Random.device_rng "/dev/urandom" in
  transform_string (Hexa.encode ()) (Random.string rng 32)

(* Create a code_verifier for PKCE *)
let generate_code_verifier () =
  let open Cryptokit in
  let rng = Random.device_rng "/dev/urandom" in
  transform_string (Hexa.encode ()) (Random.string rng 128)

let generate_code_challenge verifier =
  let hasher = Cryptokit.Hash.sha256 () in
  hasher#add_string verifier;
  let base64_string = Base64.encode_string ~pad:false hasher#result in
  (* URLs are so picky, can't have pluses, can't have slashes, can't have pictures, the worst. *)
  String.map (function '+' -> '-' | '/' -> '_' | c -> c) base64_string

let form_encode p =
  p |> List.map (fun (k,v) -> Printf.sprintf "%s=%s" k v)
  |> String.concat "&"
  |> Cohttp_lwt.Body.of_string
OCaml

Innovation. Community. Security.