open Ppx_yojson_conv_lib.Yojson_conv.Primitives open Cohttp open Cohttp_lwt_unix open Lwt type public_key = { id : string; owner : string; public_key_pem : string; [@key "publicKeyPem"] } [@@deriving yojson] [@@yojson.allow_extra_fields] type t = { name : string; public_key : public_key [@key "publicKey"] } [@@deriving yojson] [@@yojson.allow_extra_fields] let activity_header = Some (Header.of_list [ ("Accept", "application/activity+json") ]) let get_user actor_url = let%lwt _, body = Client.get ?headers:activity_header (Uri.of_string actor_url) in body |> Cohttp_lwt.Body.to_string >|= fun body -> let body = Yojson.Safe.from_string body |> t_of_yojson in body let get_public_pem user = user.public_key.public_key_pem |> Cstruct.of_string |> X509.Public_key.decode_pem let name user = user.name