UNPKG

@lucidcms/core

Version:

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

2 lines 2.71 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"../../utils/helpers/generate-secret.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"../security-audit/log-security-audit.mjs";import c from"../user-tokens/get-single.mjs";import{scrypt as l}from"@noble/hashes/scrypt.js";const u=async(u,d)=>{if(u.config.auth.password.enabled===!1)return{error:{type:`basic`,status:400,message:e(`server:core.auth.password.authentication.disabled.message`)},data:void 0};let f=new i(u.db.client,u.config.db),p=new a(u.db.client,u.config.db),m=await c(u,{token:d.token,tokenType:t.userTokens.passwordReset});if(m.error)return m;if(m.data.user_id===null)return{error:{type:`basic`,message:e(`server:core.tokens.not.found.message`),status:404},data:void 0};let h=await p.selectSingle({select:[`id`],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;let g=new Date().toISOString(),_=await f.updateSingle({data:{consumed_at:g,revoked_at:g,revoke_reason:t.userTokenRevokeReasons.passwordResetUsed,expiry_date:g},where:[{key:`id`,operator:`=`,value:m.data.id},{key:`token_type`,operator:`=`,value:t.userTokens.passwordReset},{key:`expiry_date`,operator:`>`,value:g},{key:`revoked_at`,operator:`is`,value:null},{key:`consumed_at`,operator:`is`,value:null}],returning:[`id`]});if(_.error)return _;if(!_.data)return{error:{type:`basic`,message:e(`server:core.tokens.not.found.message`),status:404},data:void 0};let{secret:v,encryptSecret:y}=r(u.config.secrets.encryption),b=Buffer.from(l(d.password,v,t.scrypt)).toString(`base64`),[x,S]=await Promise.all([p.updateSingle({data:{password:b,secret:y,updated_at:new Date().toISOString()},where:[{key:`id`,operator:`=`,value:m.data.user_id}],returning:[`id`,`first_name`,`last_name`,`email`],validation:{enabled:!0,defaultError:{status:400}}}),s(u,{userId:m.data.user_id,action:t.securityAudit.actions.passwordChange,performedBy:m.data.user_id,previousValue:t.securityAudit.redactedValue,newValue:t.securityAudit.redactedValue})]);if(x.error)return x;if(S.error)return S;let C=await o(u,{template:t.email.templates.passwordResetSuccess.key,type:`internal`,to:x.data.email,subject:e=>n(u.translate(`server:core.auth.password.reset.success.subject`),e.context.brand.name),data:{firstName:x.data.first_name,lastName:x.data.last_name}});return C.error?C:{error:void 0,data:void 0}};export{u as default}; //# sourceMappingURL=reset-password.mjs.map