UNPKG

@lucidcms/core

Version:

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

1 lines 4.33 kB
{"version":3,"file":"validate-invitation.mjs","names":["constants","formatter"],"sources":["../../../../src/services/auth/invitation/validate-invitation.ts"],"sourcesContent":["import constants from \"../../../constants/constants.js\";\nimport formatter from \"../../../libs/formatters/index.js\";\nimport logger from \"../../../libs/logger/index.js\";\nimport {\n\tUsersRepository,\n\tUserTokensRepository,\n} from \"../../../libs/repositories/index.js\";\nimport type { ValidateInvitation } from \"../../../types.js\";\nimport hashUserToken from \"../../../utils/helpers/hash-user-token.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\n\n/**\n * Validates a invitation token and returns the user information if valid.\n */\nconst validateInvitation: ServiceFn<\n\t[\n\t\t{\n\t\t\ttoken: string;\n\t\t},\n\t],\n\tValidateInvitation\n> = async (context, data) => {\n\tconst UserTokens = new UserTokensRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\tconst Users = new UsersRepository(context.db.client, context.config.db);\n\tconst hashedToken = hashUserToken(data.token);\n\n\tconst userTokenRes = await UserTokens.selectSingle({\n\t\tselect: [\"id\", \"user_id\"],\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"token\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: hashedToken,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"token_type\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: constants.userTokens.invitation,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"expiry_date\",\n\t\t\t\toperator: \">\",\n\t\t\t\tvalue: new Date().toISOString(),\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"revoked_at\",\n\t\t\t\toperator: \"is\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"consumed_at\",\n\t\t\t\toperator: \"is\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t],\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (userTokenRes.error) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tvalid: false,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst userRes = await Users.selectSingle({\n\t\tselect: [\n\t\t\t\"id\",\n\t\t\t\"email\",\n\t\t\t\"username\",\n\t\t\t\"first_name\",\n\t\t\t\"last_name\",\n\t\t\t\"invitation_accepted\",\n\t\t],\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"id\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: userTokenRes.data.user_id,\n\t\t\t},\n\t\t],\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (userRes.error) {\n\t\tlogger.error({\n\t\t\tmessage: \"Invitation user was not found\",\n\t\t});\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tvalid: false,\n\t\t\t},\n\t\t};\n\t}\n\n\tif (formatter.formatBoolean(userRes.data?.invitation_accepted)) {\n\t\tlogger.error({\n\t\t\tmessage: \"Invitation has already been accepted\",\n\t\t});\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tvalid: false,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: {\n\t\t\tvalid: true,\n\t\t\tuser: {\n\t\t\t\tid: userRes.data.id,\n\t\t\t\temail: userRes.data.email,\n\t\t\t\tusername: userRes.data.username,\n\t\t\t\tfirstName: userRes.data.first_name,\n\t\t\t\tlastName: userRes.data.last_name,\n\t\t\t},\n\t\t},\n\t};\n};\n\nexport default validateInvitation;\n"],"mappings":"wTAcA,MAAM,EAOF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAa,IAAI,EACtB,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EACM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAc,EAAc,EAAK,KAAK,EAEtC,EAAe,MAAM,EAAW,aAAa,CAClD,OAAQ,CAAC,KAAM,SAAS,EACxB,MAAO,CACN,CACC,IAAK,QACL,SAAU,IACV,MAAO,CACR,EACA,CACC,IAAK,aACL,SAAU,IACV,MAAOA,EAAU,WAAW,UAC7B,EACA,CACC,IAAK,cACL,SAAU,IACV,MAAO,IAAI,KAAK,CAAA,CAAE,YAAY,CAC/B,EACA,CACC,IAAK,aACL,SAAU,KACV,MAAO,IACR,EACA,CACC,IAAK,cACL,SAAU,KACV,MAAO,IACR,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,EACD,GAAI,EAAa,MAChB,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CACL,MAAO,EACR,CACD,EAGD,IAAM,EAAU,MAAM,EAAM,aAAa,CACxC,OAAQ,CACP,KACA,QACA,WACA,aACA,YACA,qBACD,EACA,MAAO,CACN,CACC,IAAK,KACL,SAAU,IACV,MAAO,EAAa,KAAK,OAC1B,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,EAyBD,OAxBI,EAAQ,OACX,EAAO,MAAM,CACZ,QAAS,+BACV,CAAC,EACM,CACN,MAAO,IAAA,GACP,KAAM,CACL,MAAO,EACR,CACD,GAGGC,EAAU,cAAc,EAAQ,MAAM,mBAAmB,GAC5D,EAAO,MAAM,CACZ,QAAS,sCACV,CAAC,EACM,CACN,MAAO,IAAA,GACP,KAAM,CACL,MAAO,EACR,CACD,GAGM,CACN,MAAO,IAAA,GACP,KAAM,CACL,MAAO,GACP,KAAM,CACL,GAAI,EAAQ,KAAK,GACjB,MAAO,EAAQ,KAAK,MACpB,SAAU,EAAQ,KAAK,SACvB,UAAW,EAAQ,KAAK,WACxB,SAAU,EAAQ,KAAK,SACxB,CACD,CACD,CACD"}