Files
synapse-app-mas/mas/share/assets/password.recovery.index-BypsELRF.js
2025-12-01 08:14:13 -06:00

38 lines
4.3 KiB
JavaScript

import{aa as S,o as T,q as I,p as b,j as e,l as w,k as i,u as p,a2 as C,b as l,d as h,L as y,P as f,R as D,M as m,h as x,I as E,B as A}from"./main-CiAhdYQG.js";import{t as N,I as q,P as L}from"./password_changes-DaEmI9Wm.js";import{S as U}from"./Submit-DW2aiKTW.js";import{B as _}from"./ButtonLink-kWcKQZoZ.js";import"./_commonjsHelpers-DaWZu8wl.js";/* empty css */const M=i(`
mutation RecoverPassword($ticket: String!, $newPassword: String!) {
setPasswordByRecovery(
input: { ticket: $ticket, newPassword: $newPassword }
) {
status
}
}
`),O=i(`
mutation ResendRecoveryEmail($ticket: String!) {
resendRecoveryEmail(input: { ticket: $ticket }) {
status
progressUrl
}
}
`),k=i(`
fragment RecoverPassword_userRecoveryTicket on UserRecoveryTicket {
username
email
}
`),F=i(`
fragment RecoverPassword_siteConfig on SiteConfig {
...PasswordCreationDoubleInput_siteConfig
}
`),$=i(`
query PasswordRecovery($ticket: String!) {
siteConfig {
...RecoverPassword_siteConfig
}
userRecoveryTicket(ticket: $ticket) {
status
...RecoverPassword_userRecoveryTicket
}
}
`),B=t=>I({queryKey:["passwordRecovery",t],queryFn:({signal:s})=>w({query:$,signal:s,variables:{ticket:t}})}),W=()=>{const{t}=p();return e.jsxs(y,{children:[e.jsx(f,{Icon:E,title:t("frontend.password_reset.consumed.title"),subtitle:t("frontend.password_reset.consumed.subtitle"),invalid:!0}),e.jsx(_,{kind:"secondary",to:"/",reloadDocument:!0,children:t("action.start_over")})]})},G=t=>{const{t:s}=p(),n=l(k,t.userRecoveryTicket),o=h({mutationFn:async({ticket:r})=>{const a=await w({query:O,variables:{ticket:r}});if(a.resendRecoveryEmail.status==="SENT"){if(!a.resendRecoveryEmail.progressUrl)throw new Error("Unexpected response, missing progress URL");window.location.href=a.resendRecoveryEmail.progressUrl,await new Promise(()=>{})}return a.resendRecoveryEmail}}),u=r=>{r.preventDefault(),o.mutate({ticket:t.ticket})};return e.jsxs(y,{children:[e.jsx(f,{Icon:E,title:s("frontend.password_reset.expired.title"),subtitle:s("frontend.password_reset.expired.subtitle",{email:n.email}),invalid:!0}),o.data?.status==="RATE_LIMITED"&&e.jsx(m,{type:"critical",title:s("frontend.errors.rate_limit_exceeded")}),e.jsxs(A,{kind:"primary",disabled:o.isPending,onClick:u,children:[!!o.isPending&&e.jsx(x,{inline:!0}),s("frontend.password_reset.expired.resend_email")]}),e.jsx(_,{kind:"secondary",to:"/",reloadDocument:!0,children:s("action.start_over")})]})},V=t=>{const{t:s}=p(),n=C(),o=l(F,t.siteConfig),u=l(k,t.userRecoveryTicket),r=h({mutationFn:async({ticket:c,form:d})=>{const R=d.get("new_password"),j=d.get("new_password_again");if(R!==j)throw new Error("passwords mismatch; this should be checked by the form");const g=await w({query:M,variables:{ticket:c,newPassword:R}});return g.setPasswordByRecovery.status==="ALLOWED"&&await n({to:"/",reloadDocument:!0}),g.setPasswordByRecovery}}),a=async c=>{c.preventDefault();const d=new FormData(c.currentTarget);r.mutate({ticket:t.ticket,form:d})},P=r.error!==null,v=N(s,r.data?.status);return e.jsx(y,{children:e.jsxs("div",{className:"flex flex-col gap-10",children:[e.jsx(f,{Icon:q,title:s("frontend.password_reset.title"),subtitle:s("frontend.password_reset.subtitle")}),e.jsxs(D,{onSubmit:a,method:"POST",children:[P&&e.jsx(m,{type:"critical",title:s("frontend.password_change.failure.title"),children:s("frontend.password_change.failure.description.unspecified")}),v!==void 0&&e.jsx(m,{type:"critical",title:s("frontend.password_change.failure.title"),children:v}),e.jsx("input",{type:"hidden",name:"username",autoComplete:"username",value:u.username}),e.jsx(L,{siteConfig:o,forceShowNewPasswordInvalid:r.data?.status==="INVALID_NEW_PASSWORD"||!1}),e.jsxs(U,{kind:"primary",disabled:r.isPending,children:[!!r.isPending&&e.jsx(x,{inline:!0}),s("action.save_and_continue")]})]})]})})};function J(){const{ticket:t}=S({from:"/password/recovery/"}),{data:{siteConfig:s,userRecoveryTicket:n}}=T(B(t));if(!n)throw b();switch(n.status){case"EXPIRED":return e.jsx(G,{ticket:t,userRecoveryTicket:n});case"CONSUMED":return e.jsx(W,{});case"VALID":return e.jsx(V,{ticket:t,siteConfig:s,userRecoveryTicket:n});default:{const o=n.status;throw new Error(`Unhandled case: ${o}`)}}}export{J as component};
//# sourceMappingURL=password.recovery.index-BypsELRF.js.map