1234567891011121314151617181920212223242526272829303132333435363738394041424344openLwt.SyntaxmoduleCore=Sihl_coremoduleSession=Sihl_type.SessionmoduleUser=Sihl_type.Userletlog_src=Logs.Src.create~doc:"authn""sihl.service.authn"moduleLogs=(valLogs.src_loglog_src:Logs.LOG)moduleMake(SessionService:Sihl_contract.Session.Sig)(UserService:Sihl_contract.User.Sig):Sihl_contract.Authn.Sig=structletfind_user_in_session_optsession=let*user_id=SessionService.find_valuesession"authn"inmatchuser_idwith|None->Lwt.returnNone|Someuser_id->UserService.find_opt~user_id;;letfind_user_in_sessionsession=let*user_id=SessionService.find_valuesession"authn"inmatchuser_idwith|None->raise@@Sihl_contract.Authn.Exception"No user found in current session"|Someuser_id->UserService.find~user_id;;letauthenticate_sessionusersession=SessionService.set_valuesession~k:"authn"~v:(Some(User.iduser));;letunauthenticate_sessionsession=SessionService.set_valuesession~k:"authn"~v:Noneletstart()=Lwt.return()letstop_=Lwt.return()letlifecycle=Core.Container.Lifecycle.create"authn"~start~stop~dependencies:[SessionService.lifecycle;UserService.lifecycle];;letregister()=Core.Container.Service.createlifecycleend