123456789101112131415161718192021222324252627282930313233343536373839404142434445openLwt.SyntaxmoduleCore=Sihl_coremoduleSession=Sihl_sessionmoduleUser=Sihl_userexceptionExceptionofstringletlog_src=Logs.Src.create~doc:"authn""sihl.service.authn"moduleLogs=(valLogs.src_loglog_src:Logs.LOG)moduleMake(SessionService:Session.Sig.SERVICE)(UserService:User.Sig.SERVICE):Sig.SERVICE=structletfind_user_in_session_optsession=let*user_id=SessionService.getsession~key:"authn"inmatchuser_idwith|None->Lwt.returnNone|Someuser_id->UserService.find_opt~user_id;;letfind_user_in_sessionsession=let*user_id=SessionService.getsession~key:"authn"inmatchuser_idwith|None->raise@@Exception"No user found in current session"|Someuser_id->UserService.find~user_id;;letauthenticate_sessionusersession=SessionService.setsession~key:"authn"~value:(User.iduser);;letunauthenticate_sessionsession=SessionService.unsetsession~key:"authn"letstart()=Lwt.return()letstop_=Lwt.return()letlifecycle=Core.Container.Lifecycle.create"authn"~start~stop~dependencies:[SessionService.lifecycle;UserService.lifecycle];;letregister()=Core.Container.Service.createlifecycleend