@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 3.96 kB
Source Map (JSON)
{"version":3,"file":"login.mjs","names":["formatter","constants"],"sources":["../../../src/services/auth/login.ts"],"sourcesContent":["import { scrypt } from \"@noble/hashes/scrypt.js\";\nimport constants from \"../../constants/constants.js\";\nimport formatter from \"../../libs/formatters/index.js\";\nimport { copy } from \"../../libs/i18n/index.js\";\nimport { UsersRepository } from \"../../libs/repositories/index.js\";\nimport { decrypt } from \"../../utils/helpers/encrypt-decrypt.js\";\nimport { trimStringInput } from \"../../utils/helpers/normalize-input.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\n\nconst login: ServiceFn<\n\t[\n\t\t{\n\t\t\tusernameOrEmail: string;\n\t\t\tpassword: string;\n\t\t},\n\t],\n\t{\n\t\tid: number;\n\t}\n> = async (context, data) => {\n\tif (context.config.auth.password.enabled === false) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 400,\n\t\t\t\tmessage: copy(\n\t\t\t\t\t\"server:core.auth.password.authentication.disabled.message\",\n\t\t\t\t),\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst Users = new UsersRepository(context.db.client, context.config.db);\n\tconst usernameOrEmail = trimStringInput(data.usernameOrEmail);\n\n\tconst userRes = await Users.selectSingleByEmailUsername({\n\t\tselect: [\"id\", \"password\", \"is_deleted\", \"is_locked\", \"secret\"],\n\t\twhere: {\n\t\t\tusername: usernameOrEmail,\n\t\t\temail: usernameOrEmail.toLowerCase(),\n\t\t},\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t\tdefaultError: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tmessage: copy(\"server:core.auth.login.error.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t},\n\t});\n\tif (userRes.error) return userRes;\n\n\tif (formatter.formatBoolean(userRes.data.is_deleted)) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tmessage: copy(\"server:core.auth.login.suspended.error.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tif (formatter.formatBoolean(userRes.data.is_locked)) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tmessage: copy(\"server:core.auth.login.locked.error.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst decryptedSecret = decrypt(\n\t\tuserRes.data.secret,\n\t\tcontext.config.secrets.encryption,\n\t);\n\tconst inputPasswordHash = Buffer.from(\n\t\tscrypt(data.password, decryptedSecret, constants.scrypt),\n\t).toString(\"base64\");\n\n\tconst valid = inputPasswordHash === userRes.data.password;\n\n\tif (!valid)\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"authorisation\",\n\t\t\t\tmessage: copy(\"server:core.auth.login.error.message\"),\n\t\t\t\tstatus: 401,\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: {\n\t\t\tid: userRes.data.id,\n\t\t},\n\t};\n};\n\nexport default login;\n"],"mappings":"0XASA,MAAM,EAUF,MAAO,EAAS,IAAS,CAC5B,GAAI,EAAQ,OAAO,KAAK,SAAS,UAAY,GAC5C,MAAO,CACN,MAAO,CACN,KAAM,QACN,OAAQ,IACR,QAAS,EACR,2DACD,CACD,EACA,KAAM,IAAA,EACP,EAGD,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAkB,EAAgB,EAAK,eAAe,EAEtD,EAAU,MAAM,EAAM,4BAA4B,CACvD,OAAQ,CAAC,KAAM,WAAY,aAAc,YAAa,QAAQ,EAC9D,MAAO,CACN,SAAU,EACV,MAAO,EAAgB,YAAY,CACpC,EACA,WAAY,CACX,QAAS,GACT,aAAc,CACb,KAAM,gBACN,QAAS,EAAK,sCAAsC,EACpD,OAAQ,GACT,CACD,CACD,CAAC,EACD,GAAI,EAAQ,MAAO,OAAO,EAE1B,GAAIA,EAAU,cAAc,EAAQ,KAAK,UAAU,EAClD,MAAO,CACN,MAAO,CACN,KAAM,gBACN,QAAS,EAAK,gDAAgD,EAC9D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAGD,GAAIA,EAAU,cAAc,EAAQ,KAAK,SAAS,EACjD,MAAO,CACN,MAAO,CACN,KAAM,gBACN,QAAS,EAAK,6CAA6C,EAC3D,OAAQ,GACT,EACA,KAAM,IAAA,EACP,EAGD,IAAM,EAAkB,EACvB,EAAQ,KAAK,OACb,EAAQ,OAAO,QAAQ,UACxB,EAiBA,OAhB0B,OAAO,KAChC,EAAO,EAAK,SAAU,EAAiBC,EAAU,MAAM,CACxD,CAAC,CAAC,SAAS,QAEmB,IAAM,EAAQ,KAAK,SAY1C,CACN,MAAO,IAAA,GACP,KAAM,CACL,GAAI,EAAQ,KAAK,EAClB,CACD,EAdQ,CACN,MAAO,CACN,KAAM,gBACN,QAAS,EAAK,sCAAsC,EACpD,OAAQ,GACT,EACA,KAAM,IAAA,EACP,CAQF"}