PageSourceSearch

https://maieutic.ca/assets/AuthCallbackRoute-CWO3dE5b.js

js maieutic.ca collected 2026-10-01 15:02:54 UTC 12,668 bytes, 1 lines download raw bytes

1import{s as A,u as Ae,a as Ee,r,j as s}from"./index-DbENjIaX.js";import{V as ue}from"./ValidatedField-81MeoKhW.js";import{r as Pe,h as je}from"./persistence-8XTugFYy.js";import{P as Re}from"./PolicyDocument-DzfHWr-I.js";import{c as Ie,i as de,r as me,a as ze}from"./mfaGate-DzXR46g5.js";import"./law25PolicyKit-D3--mkX-.js";import"./mfa-DdrLGB6N.js";const Le="candidate-career",Te="candidate-verification",Ue="msign",Ve="/career",R="/m-sign",pe=t=>t.startsWith("/")&&!t.startsWith("//"),fe=t=>t===Le||t===Te,he=t=>t===Ue,xe=(t,e=Ve)=>{if(!t)return e;const n=t.trim();if(!n)return e;if(typeof window<"u")try{const a=new URL(n,window.location.origin);if(a.origin===window.location.origin){const d=`${a.pathname}${a.search}${a.hash}`;return pe(d)?d:e}}catch{}return pe(n)?n:e},qe=t=>{const e=xe(t,R);return e===R||e.startsWith(`${R}/`)||e.startsWith(`${R}?`)?e:R},Fe=(t,e)=>fe(t)?xe(e):he(t)?qe(e):"/tableau",Me=Ie,$e=(t,e)=>{const n=new URLSearchParams(t.startsWith("?")?t.slice(1):t),a=new URLSearchParams(e.startsWith("#")?e.slice(1):e),d=n.get("code"),C=a.get("access_token")??n.get("access_token"),v=a.get("refresh_token")??n.get("refresh_token"),I=a.get("type")??n.get("type"),z=a.get("error")??n.get("error"),E=a.get("error_code")??n.get("error_code"),S=a.get("error_description")??n.get("error_description");return{queryParams:n,hasHash:e.length>0,code:d,accessToken:C,refreshToken:v,type:I,errorParam:z,errorCode:E,errorDescription:S,hasTokens:!!(C||v),hasIncomingCredentials:!!(d||C||v),hasAuthContext:!!(d||C||v||z||E||I)}},De=async t=>{if(t.code)try{const{data:e,error:n}=await A.auth.exchangeCodeForSession(t.code);return n||!(e!=null&&e.session)?{session:null,failure:"invalid_link"}:{session:e.session,failure:null}}catch{return{session:null,failure:"invalid_link"}}if(t.accessToken)try{const{data:e,error:n}=await A.auth.setSession({access_token:t.accessToken,refresh_token:t.refreshToken||""});return n||!(e!=null&&e.session)?{session:null,failure:"invalid_link"}:{session:e.session,failure:null}}catch{return{session:null,failure:"invalid_link"}}return t.hasIncomingCredentials?{session:null,failure:"incomplete_link"}:t.errorParam||t.errorCode?{session:null,failure:"invalid_link"}:{session:null,failure:null}},Oe=(t,e)=>{const n=new URLSearchParams(t.toString());["code","access_token","refresh_token","expires_in","token_type","type","error","error_code","error_description","email","flow"].forEach(d=>n.delete(d)),e&&n.set("flow","recovery");const a=n.toString();window.history.replaceState({},"",a?`${window.location.pathname}?${a}`:window.location.pathname)},He=()=>{const t=new URLSearchParams(window.location.search);t.delete("flow");const e=t.toString();window.history.replaceState({},"",e?`${window.location.pathname}?${e}`:window.location.pathname)},Ye=()=>{const[t]=Ae(),e=Ee(),n=t.get("email"),a=t.get("flow"),d=t.get("audience"),C=t.get("next"),[v,I]=r.useState(null),[z,E]=r.useState(null),[S,ve]=r.useState(null),[L,we]=r.useState(""),[K,ge]=r.useState(""),[Q,P]=r.useState(null),[T,o]=r.useState(null),[U,V]=r.useState(!1),[k,j]=r.useState(!1),[q,be]=r.useState(!1),[Y,ye]=r.useState(!1),[Ce,Z]=r.useState(!1),[ee,Se]=r.useState(!1),te=r.useRef(null),O=r.useRef(null),se=r.useRef(!1),ne=r.useRef(!1),H=r.useRef(!1),y=r.useRef(null),W=r.useRef(null),f=v==="recovery"||a==="recovery",re=v==="email_change",p=fe(d),l=he(d),B=p&&v==="invite",G=l&&v==="invite",X=z==="credentials_required"||B||G,F=l?"msign":"maieutic",_=l?"M‑Sign":"Maieutic",ke=l?"votre espace M‑Sign":"votre espace Maieutic",h=Fe(d,C);r.useEffect(()=>{if(ne.current)return;ne.current=!0,(async()=>{const w=$e(window.location.search,window.location.hash),{queryParams:x,hasHash:u,type:m,hasAuthContext:ie}=w,g=m==="recovery"||a==="recovery";I(m||(g?"recovery":null));const J=m==="email_change",b=()=>{if(!se.current&&ie){se.current=!0;try{Oe(x,g)}catch{}}},ae=async c=>{var oe,le,ce;if(y.current=((oe=c==null?void 0:c.user)==null?void 0:oe.id)||null,W.current=((le=c==null?void 0:c.user)==null?void 0:le.email)||null,ve(((ce=c==null?void 0:c.user)==null?void 0:ce.email)||null),P(null),p||l||J){j(!0),b(),!g&&m!=="invite"&&!l&&e(h,{replace:!0});return}try{if(!g&&await me(c)){b(),j(!0),e("/tableau",{replace:!0});return}}catch{b(),P("Impossible de vérifier votre authentification multifacteur. Veuillez réessayer plus tard.");return}let D;try{const N=await ze(y.current||void 0,!g);if(N.decision==="unavailable")throw new Error("Access unavailable");if(N.decision==="existing_access"||N.decision==="mfa_required"){b(),j(!0),g||e(h,{replace:!0});return}D=N.decision==="continue"?N.continuation.status.state:N.status.state,E(D)}catch{b(),g?(o("Impossible de vérifier la suite de votre accès pour le moment. Votre réinitialisation de mot de passe reste disponible."),j(!0)):P("Impossible de vérifier la suite de votre accès pour le moment. Veuillez réessayer plus tard.");return}if(b(),j(!0),!g&&D!=="credentials_required"){if(D==="policies_required"){e("/policies",{replace:!0});return}e(h,{replace:!0})}},M=await De(w);if(M.failure){P(M.failure==="incomplete_link"?"Le lien de connexion est incomplet ou invalide.":J?"Lien de changement d’email invalide ou expiré. Veuillez relancer la demande depuis votre profil.":"Lien invalide ou expiré. Veuillez demander un nouveau lien."),b();return}if(M.session){await ae(M.session);return}let $=null;try{const{data:c}=await A.auth.getSession();$=(c==null?void 0:c.session)??null}catch{$=null}if($){await ae($);return}(!u||!m)&&(P(J?"Lien de changement d’email invalide ou expiré. Veuillez relancer la demande depuis votre profil.":"Lien d’invitation invali
1de ou expiré. Veuillez demander une nouvelle invitation."),b())})()},[h,a,p,l,e]),r.useEffect(()=>{const i=O.current;if(i)try{i.scrollHeight<=i.clientHeight+1&&Z(!0)}catch{}},[k,X,Y]),r.useEffect(()=>{(async()=>{if(!(!k||p||!l))try{const{data:w}=await A.auth.getSession(),x=(w==null?void 0:w.session)??null,u=(x==null?void 0:x.user)||null,m=(u==null?void 0:u.email)||n;if(!u||!m)return;await je(m,(u==null?void 0:u.user_metadata)||{},{audience:F})&&be(!0)}catch{return}})()},[k,X,l,p,F,n]),r.useEffect(()=>{k&&l&&!f&&q&&(window.location.href=h)},[q,h,l,f,k]);const _e=async()=>{var w;o(null);const i=(w=te.current)==null?void 0:w.validate();if(i){o(i);return}if(L!==K){o("Les mots de passe ne correspondent pas.");return}if(L.length<8){o("Le mot de passe doit contenir au moins 8 caractères.");return}V(!0);try{if(!H.current){if(!y.current||!await de(y.current,W.current)){o("La session active ne correspond plus au compte affiché. Rechargez le lien avant de continuer.");return}const{error:m}=await A.auth.updateUser({password:L});if(m){m.status===401||m.status===403?o("Votre session a expiré. Veuillez vous reconnecter pour terminer cette étape."):o("Impossible d’enregistrer le mot de passe.");return}H.current=!0}if(!y.current||!await de(y.current,W.current)){o("La session active ne correspond plus au compte affiché. Rechargez le lien avant de continuer.");return}if(f&&He(),G&&!q){ye(!0);return}if(B||l){window.location.href=h;return}const{data:x}=await A.auth.getSession();if(x!=null&&x.session&&await me(x.session)){e("/tableau",{replace:!0});return}const u=await Me({expectedUserId:y.current||void 0});E(u.status.state),u.status.state==="credentials_required"?o("Le mot de passe n’a pas encore été confirmé. Veuillez réessayer."):u.status.state==="policies_required"?e("/policies",{replace:!0}):window.location.href=h}catch{o(H.current?"Le mot de passe est enregistré, mais nous n’avons pas pu vérifier la suite de votre accès. Réessayez plus tard.":"Impossible d’enregistrer le mot de passe. Veuillez réessayer.")}finally{V(!1)}};if(Q)return s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-slate-50 px-4",children:s.jsxs("div",{className:"w-full max-w-md rounded-2xl bg-white p-8 shadow-lg border border-slate-200",children:[s.jsx("h1",{className:"text-xl font-semibold text-slate-900",children:re?"Changement d’email":f?"Réinitialisation du mot de passe":p?"Accès candidat":"Lien d’invitation"}),s.jsx("p",{className:"mt-2 text-sm text-red-600",children:Q}),s.jsx("button",{type:"button",onClick:()=>e(p?h:"/?forceLogin=1"),className:"mt-4 inline-flex items-center justify-center rounded-md bg-blue-600 px-4 py-2 text-sm font-semibold text-white shadow hover:bg-blue-700",children:p?"Retourner au mandat":"Retourner à la connexion"})]})});if(!k)return s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-slate-50 px-4",children:s.jsxs("div",{className:"w-full max-w-md rounded-2xl bg-white p-8 shadow-lg border border-slate-200",children:[s.jsx("h1",{className:"text-lg font-semibold text-slate-900",children:re?"Validation de votre changement d’email…":f?"Validation de votre réinitialisation…":p?"Préparation de votre accès candidat…":l?"Préparation de votre espace M‑Sign…":"Validation de votre invitation…"}),s.jsxs("p",{className:"mt-2 text-sm text-slate-600",children:["Veuillez patienter pendant que nous validons votre lien et préparons",ke,"."]})]})});const Ne=async()=>{window.location.href=h};return l&&!f&&!q&&!p?s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-slate-50 px-4",children:s.jsxs("div",{className:"w-full max-w-md rounded-2xl bg-white p-8 shadow-lg border border-slate-200 space-y-4",children:[s.jsx("h1",{className:"text-xl font-semibold text-slate-900",children:"Avant de continuer"}),s.jsxs("p",{className:"text-sm text-slate-600",children:["Pour créer votre compte ",_,", veuillez confirmer que vous avez pris connaissance des politiques suivantes :"]}),s.jsx("div",{ref:O,className:"max-h-[60vh] overflow-y-auto rounded-lg border border-slate-200 bg-slate-50/80 px-4 py-3",tabIndex:0,onScroll:()=>{const i=O.current;if(i)try{i.scrollTop+i.clientHeight>=i.scrollHeight-4&&Z(!0)}catch{}},children:s.jsx(Re,{audience:F})}),s.jsxs("p",{className:"text-xs text-slate-500",children:["Les versions complètes peuvent également être consultées depuis les paramètres de ",_,"."]}),s.jsxs("label",{className:"flex items-start gap-2 text-sm text-slate-700",children:[s.jsx("input",{type:"checkbox",className:"mt-1 h-4 w-4 roun
1ded border-slate-300 text-blue-600 focus:ring-blue-500",checked:ee,onChange:i=>Se(i.target.checked)}),s.jsxs("span",{children:["Je confirme avoir pris connaissance de ces politiques et je consens à utiliser ",_," conformément à celles-ci."]})]}),s.jsx("button",{type:"button",disabled:U||!ee||!Ce,onClick:async()=>{o(null),V(!0);try{const i=await Pe({audience:F});i.metadataOk||i.remoteOk||i.localOk?await Ne():o("Impossible d’enregistrer votre acceptation pour le moment. Veuillez réessayer dans un instant.")}catch(i){o((i==null?void 0:i.message)||"Impossible d’enregistrer votre acceptation pour le moment. Veuillez réessayer dans un instant.")}finally{V(!1)}},className:"mt-2 w-full rounded-md bg-blue-600 px-4 py-2 text-sm font-semibold text-white shadow hover:bg-blue-700 disabled:bg-blue-300",children:U?"Activation...":`Continuer vers ${_}`}),T&&s.jsx("p",{className:"text-sm text-red-600",children:T})]})}):X&&!Y||B||G||f?s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-slate-50 px-4",children:s.jsxs("div",{className:"w-full max-w-md rounded-2xl bg-white p-8 shadow-lg border border-slate-200",children:[s.jsx("h1",{className:"text-xl font-semibold text-slate-900",children:f?"Réinitialiser votre mot de passe":"Créer votre mot de passe"}),s.jsx("p",{className:"mt-2 text-sm text-slate-600",children:p?S||n?`Définissez maintenant votre mot de passe candidat pour le compte ${S||n}.`:"Définissez maintenant votre mot de passe candidat pour continuer.":S||n?`Bienvenue sur ${_}. ${f?"Réinitialisez":"Créez"} le mot de passe du compte ${S||n}.`:`Bienvenue sur ${_}. Créez votre mot de passe pour continuer.`}),s.jsxs("div",{className:"mt-6 space-y-4",children:[s.jsx(ue,{ref:te,id:"invitePassword",label:"Mot de passe",type:"password",value:L,onChange:we,required:!0,helperText:"Minimum 8 caractères.",pattern:/^[\s\S]{8,}$/,patternMessage:"Le mot de passe doit contenir au moins 8 caractères."}),s.jsx(ue,{id:"invitePasswordConfirm",label:"Confirmer le mot de passe",type:"password",value:K,onChange:ge,required:!0,helperText:""}),T&&s.jsx("p",{className:"text-sm text-red-600",children:T}),s.jsx("button",{type:"button",onClick:_e,disabled:U,className:"mt-2 w-full rounded-md bg-blue-600 px-4 py-2 text-sm font-semibold text-white shadow hover:bg-blue-700 disabled:bg-blue-300",children:U?"Enregistrement…":f?"Réinitialiser le mot de passe":"Définir le mot de passe"})]})]})}):null};export{Ye as AuthCallbackRoute};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.