package sihl

  1. Overview
  2. Docs
The modular functional web framework

Install

Dune Dependency

Authors

Maintainers

Sources

sihl-0.1.4.tbz
sha256=49fe887d05083b37523cd6e7ca35239822c561fe7109dd383c30aeb4259a7b98
sha512=4135ad42a75fb9adc3e853a466b696d9ee6d7a9d8acf0cee9fd5f5485679a517f524ce704e2d153df4a7c4f1d14df9f94ab2a8fbe5b36e744b505daab1d40f3d

doc/src/sihl.authn/authn_service.ml.html

Source file authn_service.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
open Lwt.Syntax
module Sig = Authn_service_sig

exception Exception of string

module Make
    (Log : Log.Service.Sig.SERVICE)
    (SessionService : Session.Service.Sig.SERVICE)
    (UserService : User.Service.Sig.SERVICE) : Sig.SERVICE = struct
  let find_user_in_session_opt ctx =
    let* user_id = SessionService.get ctx ~key:"authn" in
    match user_id with
    | None -> Lwt.return None
    | Some user_id -> UserService.find_opt ctx ~user_id

  let find_user_in_session ctx =
    let* user_id = SessionService.get ctx ~key:"authn" in
    match user_id with
    | None -> raise @@ Exception "No user found in current session"
    | Some user_id -> UserService.find ctx ~user_id

  let authenticate_session ctx user =
    SessionService.set ctx ~key:"authn" ~value:(User.id user)

  let unauthenticate_session ctx = SessionService.unset ctx ~key:"authn"

  let start ctx = Lwt.return ctx

  let stop _ = Lwt.return ()

  let lifecycle =
    Core.Container.Lifecycle.make "authn" ~start ~stop
      ~dependencies:[ SessionService.lifecycle; UserService.lifecycle ]
end
OCaml

Innovation. Community. Security.