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.06 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/email-change-requests.mjs";import a from"../../libs/repositories/user-roles.mjs";import o from"../../libs/repositories/user-tenants.mjs";import s from"../../libs/repositories/users.mjs";import{normalizeEmailInput as c}from"../../utils/helpers/normalize-input.mjs";import l from"../email/send-email.mjs";import u from"../user-tokens/create-single.mjs";import d from"./checks/check-roles-exist.mjs";import f from"./helpers/validate-user-tenant-memberships.mjs";import{add as p}from"date-fns";const m=async(m,h)=>{let g=new s(m.db.client,m.config.db),_=new i(m.db.client,m.config.db),v=c(h.email),[y,b,x]=await Promise.all([g.selectSingleByEmailUsername({select:[`id`,`username`,`email`],where:{username:h.username,email:v}}),_.selectReservedByEmail({email:v}),d(m,{roleIds:h.roleIds,tenantKey:h.authSuperAdmin?void 0:m.request.tenantKey})]);if(y.error)return y;if(b.error)return b;if(x.error)return x;if(y.data!==void 0||b.data!==void 0)return{error:{type:`basic`,status:500,errors:{email:y.data?.email===v||b.data!==void 0?{code:`invalid`,message:e(`server:core.database.duplicates.entry`)}:void 0,username:y.data?.username===h.username?{code:`invalid`,message:e(`server:core.database.duplicates.entry`)}:void 0}},data:void 0};let S=h.authSuperAdmin&&h.superAdmin===!0,C=Array.from(new Set(h.authSuperAdmin?h.tenantKeys??[]:m.request.tenantKey?[m.request.tenantKey]:[])),w=f({config:m.config,tenantKeys:C,targetSuperAdmin:S});if(w!==void 0)return{error:w,data:void 0};let{encryptSecret:T}=r(m.config.secrets.encryption),E=await g.createSingle({data:{email:v,username:h.username,first_name:h.firstName,last_name:h.lastName,super_admin:S,triggered_password_reset:!1,secret:T,invitation_accepted:!1,is_locked:!1},returning:[`id`],validation:{enabled:!0,defaultError:{status:500}}});if(E.error)return E;if(C.length>0){let e=await new o(m.db.client,m.config.db).createMultiple({data:C.map(e=>({user_id:E.data.id,tenant_key:e}))});if(e.error)return e}let D=p(new Date,{minutes:t.userInviteTokenExpirationMinutes}).toISOString(),O=await u(m,{userId:E.data.id,tokenType:t.userTokens.invitation,expiryDate:D});if(O.error)return O;let k=await l(m,{type:`internal`,to:v,subject:e=>n(m.translate(`server:core.email.invitations.email.subject`),e.context.brand.name),template:t.email.templates.userInvite.key,data:{firstName:h.firstName,lastName:h.lastName,email:v,inviteLink:`${t.email.locations.acceptInvitation}?token=${O.data.token}`},storage:t.email.templates.userInvite.storage,tenantKeys:C});if(k.error)return k;if(h.roleIds===void 0||h.roleIds.length===0)return{error:void 0,data:E.data.id};let A=await new a(m.db.client,m.config.db).createMultiple({data:h.roleIds.map(e=>({user_id:E.data.id,role_id:e}))});return A.error?A:{error:void 0,data:E.data.id}};export{m as default}; //# sourceMappingURL=invite-single.mjs.map