UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 4.79 kB
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../../libs/repositories/email-change-requests.mjs";import r from"../../libs/repositories/user-tokens.mjs";import i from"../../libs/repositories/users.mjs";import{invalidateAuthCache as a}from"../auth/helpers/auth-cache.mjs";import o from"../auth/refresh-token/revoke-user-tokens.mjs";import s from"../security-audit/log-security-audit.mjs";import c from"../user-tokens/get-single.mjs";const l=async(l,u)=>{let d=new i(l.db.client,l.config.db),f=new r(l.db.client,l.config.db),p=new n(l.db.client,l.config.db),m=await c(l,{token:u.token,tokenType:t.userTokens.emailChangeRevert});if(m.error)return m;let h=await p.selectByRevertTokenId({tokenId:m.data.id,validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}});if(h.error)return h;if(!(h.data.status===t.emailChangeRequestStatuses.pending||h.data.status===t.emailChangeRequestStatuses.confirmed)||h.data.user_id!==m.data.user_id)return{error:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)},data:void 0};let g=new Date().toISOString();if(h.data.status===t.emailChangeRequestStatuses.pending){let n=await p.updateSingle({data:{status:t.emailChangeRequestStatuses.cancelled,cancelled_at:g,updated_at:g},where:[{key:`id`,operator:`=`,value:h.data.id},{key:`status`,operator:`=`,value:t.emailChangeRequestStatuses.pending},{key:`expires_at`,operator:`>`,value:g}],returning:[`id`],validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}});if(n.error)return n;let[r,i]=await Promise.all([f.updateSingle({data:{consumed_at:g,revoked_at:g,revoke_reason:t.userTokenRevokeReasons.emailChangeCancelled,expiry_date:g},where:[{key:`id`,operator:`=`,value:h.data.revert_token_id},{key:`token_type`,operator:`=`,value:t.userTokens.emailChangeRevert},{key:`revoked_at`,operator:`is`,value:null},{key:`consumed_at`,operator:`is`,value:null}],returning:[`id`],validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}}),f.updateSingle({data:{revoked_at:g,revoke_reason:t.userTokenRevokeReasons.emailChangeCancelled,expiry_date:g},where:[{key:`id`,operator:`=`,value:h.data.confirm_token_id},{key:`token_type`,operator:`=`,value:t.userTokens.emailChangeConfirm}],returning:[`id`]})]);return r.error?r:i.error?i:{error:void 0,data:void 0}}let _=await d.selectSingle({select:[`id`,`email`],where:[{key:`id`,operator:`=`,value:h.data.user_id}],validation:{enabled:!0,defaultError:{status:404,message:e(`server:core.user.not.found.message`)}}});if(_.error)return _;if(_.data.email!==h.data.new_email)return{error:{type:`basic`,status:409,message:e(`server:core.email.change.request.stale.message`)},data:void 0};let[v,y]=await Promise.all([d.selectSingle({select:[`id`],where:[{key:`email`,operator:`=`,value:h.data.old_email},{key:`id`,operator:`!=`,value:h.data.user_id}]}),p.selectReservedByEmail({email:h.data.old_email,excludeUserId:h.data.user_id})]);if(v.error)return v;if(y.error)return y;if(v.data!==void 0||y.data!==void 0)return{error:{type:`basic`,status:409,message:e(`server:core.email.change.email.unavailable.message`)},data:void 0};let b=await p.updateSingle({data:{status:t.emailChangeRequestStatuses.reverted,reverted_at:g,updated_at:g},where:[{key:`id`,operator:`=`,value:h.data.id},{key:`status`,operator:`=`,value:t.emailChangeRequestStatuses.confirmed},{key:`expires_at`,operator:`>`,value:g}],returning:[`id`],validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}});if(b.error)return b;let[x,S,C,w]=await Promise.all([d.updateSingle({data:{email:h.data.old_email,updated_at:g},where:[{key:`id`,operator:`=`,value:h.data.user_id}],returning:[`id`],validation:{enabled:!0,defaultError:{status:400}}}),f.updateSingle({data:{consumed_at:g,revoked_at:g,revoke_reason:t.userTokenRevokeReasons.emailChangeReverted,expiry_date:g},where:[{key:`id`,operator:`=`,value:h.data.revert_token_id},{key:`token_type`,operator:`=`,value:t.userTokens.emailChangeRevert},{key:`revoked_at`,operator:`is`,value:null},{key:`consumed_at`,operator:`is`,value:null}],returning:[`id`],validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}}),s(l,{userId:h.data.user_id,action:t.securityAudit.actions.emailChange,performedBy:h.data.user_id,previousValue:h.data.new_email,newValue:h.data.old_email}),o(l,{userId:h.data.user_id,revokeReason:t.refreshTokenRevokeReasons.emailChangeReverted})]);return await a(l),x.error?x:S.error?S:C.error?C:w.error?w:{error:void 0,data:void 0}};export{l as default}; //# sourceMappingURL=revert-email-change.mjs.map