1234567891011121314151617181920212223242526272829303132333435363738394041openLwt.SyntaxexceptionExceptionofstringmoduleMake(SessionService:Session.Sig.SERVICE)(UserService:User.Sig.SERVICE):Sig.SERVICE=structletfind_user_in_session_optctx=let*user_id=SessionService.getctx~key:"authn"inmatchuser_idwith|None->Lwt.returnNone|Someuser_id->UserService.find_optctx~user_id;;letfind_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_id;;letauthenticate_sessionctxuser=SessionService.setctx~key:"authn"~value:(User.iduser);;letunauthenticate_sessionctx=SessionService.unsetctx~key:"authn"letstartctx=Lwt.returnctxletstop_=Lwt.return()letlifecycle=Core.Container.Lifecycle.create"authn"~start~stop~dependencies:[SessionService.lifecycle;UserService.lifecycle];;letconfigureconfiguration=letconfiguration=Core.Configuration.makeconfigurationinCore.Container.Service.create~configurationlifecycle;;end