blob: 212d7f2d75915d01f84b6376a27e7b2e08db6c0e (
plain) (
blame)
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
|
open! Lwt.Syntax
open! Lwt.Infix
open! Flesh
let program (p : Portal.t) config (features : Stream.features) =
let+ _auth = Sasl.authenticate p config features.mechanisms
in begin match _auth with
| Error (NotAuthorized, Some (_, text)) -> print_endline ("Not authorized: " ^ text)
| Error (MalformedRequest, Some (_, text)) -> print_endline ("Malformed request: " ^ text)
| Error _ -> print_endline "Error!"
| Ok _ -> print_endline "Success!"
end
let main =
let config : Sasl.auth_config = {
jid = (Sys.getenv "FLESH_JID");
password = (Sys.getenv "FLESH_PASSWORD");
preferred_mechanisms = [Sasl.PLAIN]
}
in let domain = (List.nth (String.split_on_char '@' config.jid) 1) in
let* portal, features = Stream.initiate domain config in
Lwt.catch
(fun () -> program portal config features >|= (fun () -> portal.push None))
(fun exn ->
portal.push None;
(* I suspect JavaScript's [wrap_callback] swallows the Exceptions thrown by
OCaml, so... The next best thing is probably printing something. *)
print_endline
(match exn with
| Xml.InvalidStanza stanza -> "Invalid stanza: " ^ stanza
| _ -> "... and so I stumble back to bed.");
Lwt.fail exn)
|