UNPKG

@lucidcms/core

Version:

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

2 lines 3.26 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"../security-audit/log-security-audit.mjs";import s from"../user-tokens/get-single.mjs";const c=async(c,l)=>{let u=new i(c.db.client,c.config.db),d=new r(c.db.client,c.config.db),f=new n(c.db.client,c.config.db),p=await s(c,{token:l.token,tokenType:t.userTokens.emailChangeConfirm});if(p.error)return p;let m=await f.selectByConfirmTokenId({tokenId:p.data.id,validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}});if(m.error)return m;if(m.data.status!==t.emailChangeRequestStatuses.pending||m.data.user_id!==p.data.user_id)return{error:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)},data:void 0};let h=await u.selectSingle({select:[`id`,`email`],where:[{key:`id`,operator:`=`,value:m.data.user_id}],validation:{enabled:!0,defaultError:{status:404,message:e(`server:core.user.not.found.message`)}}});if(h.error)return h;if(h.data.email!==m.data.old_email)return{error:{type:`basic`,status:409,message:e(`server:core.email.change.request.stale.message`)},data:void 0};let[g,_]=await Promise.all([u.selectSingle({select:[`id`],where:[{key:`email`,operator:`=`,value:m.data.new_email},{key:`id`,operator:`!=`,value:m.data.user_id}]}),f.selectReservedByEmail({email:m.data.new_email,excludeUserId:m.data.user_id})]);if(g.error)return g;if(_.error)return _;if(g.data!==void 0||_.data!==void 0)return{error:{type:`basic`,status:409,message:e(`server:core.email.change.email.unavailable.message`)},data:void 0};let v=new Date().toISOString(),y=await f.updateSingle({data:{status:t.emailChangeRequestStatuses.confirmed,confirmed_at:v,updated_at:v},where:[{key:`id`,operator:`=`,value:m.data.id},{key:`status`,operator:`=`,value:t.emailChangeRequestStatuses.pending},{key:`expires_at`,operator:`>`,value:v}],returning:[`id`],validation:{enabled:!0,defaultError:{type:`basic`,status:404,message:e(`server:core.tokens.not.found.message`)}}});if(y.error)return y;let[b,x,S]=await Promise.all([u.updateSingle({data:{email:m.data.new_email,updated_at:v},where:[{key:`id`,operator:`=`,value:m.data.user_id}],returning:[`id`],validation:{enabled:!0,defaultError:{status:400}}}),d.updateSingle({data:{consumed_at:v,revoked_at:v,revoke_reason:t.userTokenRevokeReasons.emailChangeConfirmed,expiry_date:v},where:[{key:`id`,operator:`=`,value:p.data.id},{key:`token_type`,operator:`=`,value:t.userTokens.emailChangeConfirm},{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`)}}}),o(c,{userId:m.data.user_id,action:t.securityAudit.actions.emailChange,performedBy:m.data.user_id,previousValue:m.data.old_email,newValue:m.data.new_email})]);return await a(c),b.error?b:x.error?x:S.error?S:{error:void 0,data:void 0}};export{c as default}; //# sourceMappingURL=confirm-email-change.mjs.map