1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let certificates (text : string) : string list =
let lines = String.split_on_char '\n' text |> List.map String.trim in
let rec go inside acc lines =
match lines with
| [] -> List.rev acc
| "-----BEGIN CERTIFICATE-----" :: rest -> go (Some []) acc rest
| "-----END CERTIFICATE-----" :: rest -> (
match inside with Some b64 -> go None (Base64.decode (String.concat "" (List.rev b64)) :: acc) rest | None -> go None acc rest)
| l :: rest -> go (Option.map (fun b -> l :: b) inside) acc rest
in
go None [] lines