1234567891011121314151617181920212223242526272829303132openLwt.SyntaxmoduleSig=Authn_service_sigexceptionExceptionofstringmoduleMake(Log:Log.Service.Sig.SERVICE)(SessionService:Session.Service.Sig.SERVICE)(UserService:User.Service.Sig.SERVICE):Sig.SERVICE=structletlifecycle=Core.Container.Lifecycle.make"authn"~dependencies:[SessionService.lifecycle;UserService.lifecycle](functx->Lwt.returnctx)(fun_->Lwt.return())letfind_user_in_session_optctx=let*user_id=SessionService.getctx~key:"authn"inmatchuser_idwith|None->Lwt.returnNone|Someuser_id->UserService.find_optctx~user_idletfind_user_in_sessionctx=let*user_id=SessionService.getctx~key:"authn"inmatchuser_idwith|None->raise@@Exception"No user found in current session"|Someuser_id->UserService.findctx~user_idletauthenticate_sessionctxuser=SessionService.setctx~key:"authn"~value:(User.iduser)letunauthenticate_sessionctx=SessionService.unsetctx~key:"authn"end