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.55 kB
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../../utils/helpers/format-email-subject.mjs";import r from"../../libs/repositories/email-change-requests.mjs";import i from"../../libs/repositories/user-tokens.mjs";import a from"../../libs/repositories/users.mjs";import o from"../email/send-email.mjs";import s from"../user-tokens/create-single.mjs";import{add as c}from"date-fns";const l=async(l,u)=>{let d=new a(l.db.client,l.config.db),f=new i(l.db.client,l.config.db),p=new r(l.db.client,l.config.db),m=new Date().toISOString(),[h,g]=await Promise.all([d.selectSingle({select:[`id`],where:[{key:`email`,operator:`=`,value:u.newEmail},{key:`id`,operator:`!=`,value:u.auth.id}]}),p.selectReservedByEmail({email:u.newEmail,excludeUserId:u.auth.id})]);if(h.error)return h;if(g.error)return g;if(h.data!==void 0||g.data!==void 0)return{error:{type:`basic`,status:400,errors:{email:{code:`invalid`,message:e(`server:core.users.email.duplicate`)}}},data:void 0};let[_,v]=await Promise.all([p.selectMultiple({select:[`id`,`confirm_token_id`,`revert_token_id`],where:[{key:`user_id`,operator:`=`,value:u.auth.id},{key:`status`,operator:`=`,value:t.emailChangeRequestStatuses.pending},{key:`expires_at`,operator:`>`,value:m}]}),p.selectMultiple({select:[`id`,`revert_token_id`],where:[{key:`user_id`,operator:`=`,value:u.auth.id},{key:`status`,operator:`=`,value:t.emailChangeRequestStatuses.confirmed},{key:`expires_at`,operator:`>`,value:m}]})]);if(_.error)return _;if(v.error)return v;let y=_.data??[],b=v.data??[],x=[...y.map(e=>e.id),...b.map(e=>e.id)],S=[...y.flatMap(e=>[e.confirm_token_id,e.revert_token_id]),...b.map(e=>e.revert_token_id)];if(x.length>0){let[e,n]=await Promise.all([p.updateMultiple({data:{status:t.emailChangeRequestStatuses.superseded,updated_at:m},where:[{key:`id`,operator:`in`,value:x}]}),S.length>0?f.updateMultiple({data:{revoked_at:m,revoke_reason:t.userTokenRevokeReasons.emailChangeSuperseded,expiry_date:m},where:[{key:`id`,operator:`in`,value:S}]}):void 0]);if(e.error)return e;if(n?.error)return n}let C=c(new Date,{minutes:t.emailChangeTokenExpirationMinutes}).toISOString(),[w,T]=await Promise.all([s(l,{userId:u.auth.id,tokenType:t.userTokens.emailChangeConfirm,expiryDate:C}),s(l,{userId:u.auth.id,tokenType:t.userTokens.emailChangeRevert,expiryDate:C})]);if(w.error)return w;if(T.error)return T;let E=await p.createSingle({data:{user_id:u.auth.id,old_email:u.oldEmail,new_email:u.newEmail,confirm_token_id:w.data.tokenId,revert_token_id:T.data.tokenId,status:t.emailChangeRequestStatuses.pending,expires_at:C},returning:[`id`],validation:{enabled:!0}});if(E.error)return E;let D={firstName:u.firstName,lastName:u.lastName,oldEmail:u.oldEmail,newEmail:u.newEmail},O=await o(l,{type:`internal`,to:u.newEmail,subject:e=>n(l.translate(`server:core.email.change.confirm.subject`),e.context.brand.name),template:t.email.templates.emailChangeConfirm.key,data:{...D,confirmLink:`${t.email.locations.emailChangeConfirm}?token=${w.data.token}`},storage:t.email.templates.emailChangeConfirm.storage});if(O.error)return O;let k=await o(l,{type:`internal`,to:u.oldEmail,subject:e=>n(l.translate(`server:core.email.change.revert.subject`),e.context.brand.name),template:t.email.templates.emailChangeRevert.key,data:{...D,revertLink:`${t.email.locations.emailChangeRevert}?token=${T.data.token}`},storage:t.email.templates.emailChangeRevert.storage});return k.error?k:{error:void 0,data:void 0}};export{l as default}; //# sourceMappingURL=request-email-change.mjs.map