@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 4.48 kB
JavaScript
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/email-change-requests.mjs";import a from"../../libs/repositories/users.mjs";import{multiTenancyEnabled as o}from"../../utils/helpers/tenants.mjs";import{invalidateAuthCache as s}from"../auth/helpers/auth-cache.mjs";import{normalizeEmailInput as c}from"../../utils/helpers/normalize-input.mjs";import l from"../email/send-email.mjs";import u from"../security-audit/log-security-audit.mjs";import d from"./helpers/validate-user-tenant-memberships.mjs";import f from"./update-multiple-roles.mjs";import p from"./update-multiple-tenants.mjs";import m from"./helpers/prepare-update-single-audit-logs.mjs";import h from"../../libs/formatters/index.mjs";import{scrypt as g}from"@noble/hashes/scrypt.js";const _=async(_,v)=>{let y=new a(_.db.client,_.config.db),b=new i(_.db.client,_.config.db),x=v.email===void 0?void 0:c(v.email);if(v.auth.id===v.userId)return{error:{type:`basic`,message:e(`server:core.users.self.update.denied`),status:400},data:void 0};let S=await y.selectSinglePreset({tenantKey:_.request.tenantKey,where:[{key:`id`,operator:`=`,value:v.userId},{key:`is_deleted`,operator:`=`,value:_.config.db.getDefault(`boolean`,`false`)}],validation:{enabled:!0,defaultError:{message:e(`server:core.user.not.found.message`),status:404}}});if(S.error)return S;let C=h.formatBoolean(S.data.super_admin??!1),w=o(_.config)?S.data.tenants.map(e=>e.tenant_key):[],T=v.auth.superAdmin&&v.superAdmin!==void 0?v.superAdmin:C,E=v.auth.superAdmin&&v.tenantKeys!==void 0?Array.from(new Set(v.tenantKeys)):w,D=d({config:_.config,tenantKeys:E,targetSuperAdmin:T});if(D!==void 0)return{error:D,data:void 0};let[O,k,A]=await Promise.all([x!==void 0&&x!==S.data.email?y.selectSingle({select:[`email`],where:[{key:`email`,operator:`=`,value:x},{key:`id`,operator:`!=`,value:v.userId}]}):void 0,x!==void 0&&x!==S.data.email?b.selectReservedByEmail({email:x}):void 0,v.username?y.selectSingle({select:[`username`],where:[{key:`username`,operator:`=`,value:v.username}]}):void 0]);if(O?.error)return O;if(k?.error)return k;if(A?.error)return A;if(x!==void 0&&x!==S.data.email&&(O?.data!==void 0||k?.data!==void 0))return{error:{type:`basic`,status:400,errors:{email:{code:`invalid`,message:e(`server:core.users.email.duplicate`)}}},data:void 0};if(v.username!==void 0&&A?.data!==void 0)return{error:{type:`basic`,status:400,errors:{username:{code:`invalid`,message:e(`server:core.users.username.duplicate`)}}},data:void 0};let j,M;if(v.password){let e=r(_.config.secrets.encryption);j=Buffer.from(g(v.password,e.secret,t.scrypt)).toString(`base64`),M=e.encryptSecret}let N=await m(_,{userId:v.userId,performedBy:v.auth.id,currentUser:{email:S.data.email,superAdmin:S.data.super_admin,roles:S.data.roles?.map(e=>({id:e.id,name:e.translations?.find(e=>e.locale_code===_.config.localization.defaultLocale)?.name??e.translations?.find(e=>e.name!==null)?.name??``}))??[]},normalizedEmail:x,passwordChanged:j!==void 0,roleIds:v.roleIds,superAdmin:v.superAdmin,canUpdateSuperAdmin:v.auth.superAdmin});if(N.error)return N;let[P,F,I]=await Promise.all([y.updateSingle({data:{first_name:v.firstName,last_name:v.lastName,username:v.username,email:x,password:j,secret:M,super_admin:v.auth.superAdmin?v.superAdmin:void 0,updated_at:new Date().toISOString(),triggered_password_reset:v.triggerPasswordReset,is_deleted:v.isDeleted,is_locked:v.isLocked},where:[{key:`id`,operator:`=`,value:v.userId}],returning:[`id`,`first_name`,`last_name`,`email`],validation:{enabled:!0,defaultError:{status:500}}}),f(_,{userId:v.userId,roleIds:v.roleIds,tenantKey:_.request.tenantKey}),p(_,{userId:v.userId,tenantKeys:v.auth.superAdmin&&v.tenantKeys!==void 0?E:void 0})]);if(await s(_),F.error)return F;if(P.error)return P;if(I.error)return I;let L=await Promise.all(N.data.logs.map(e=>u(_,e)));for(let e of L)if(e.error)return e;if(N.data.emailChange){let e=v.auth.superAdmin&&v.tenantKeys!==void 0?E:w,r=await l(_,{template:t.email.templates.emailChanged.key,type:`internal`,to:N.data.emailChange.newValue,subject:e=>n(_.translate(`server:core.email.update.success.subject`),e.context.brand.name),data:{firstName:v.firstName||S.data.first_name},tenantKeys:e});if(r.error)return r}return{error:void 0,data:S.data.id}};export{_ as default};
//# sourceMappingURL=update-single.mjs.map