@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 2.79 kB
Source Map (JSON)
{"version":3,"file":"log-security-audit.mjs","names":["formatter"],"sources":["../../../src/services/security-audit/log-security-audit.ts"],"sourcesContent":["import formatter from \"../../libs/formatters/index.js\";\nimport {\n\tSecurityAuditLogsRepository,\n\tUsersRepository,\n} from \"../../libs/repositories/index.js\";\nimport type { SecurityAuditAction } from \"../../types/security-audit.js\";\nimport { sortRoleSnapshot } from \"../../utils/security-audit/sort-role-snapshot.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\n\nconst logSecurityAudit: ServiceFn<\n\t[\n\t\t{\n\t\t\tuserId: number;\n\t\t\taction: SecurityAuditAction;\n\t\t\tperformedBy: number;\n\t\t\tpreviousValue: string;\n\t\t\tnewValue: string;\n\t\t},\n\t],\n\tnumber\n> = async (context, data) => {\n\tconst Users = new UsersRepository(context.db.client, context.config.db);\n\tconst SecurityAuditLogs = new SecurityAuditLogsRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\n\tconst actorRes = await Users.selectAuditActorById({\n\t\tid: data.performedBy,\n\t\tdefaultLocale: context.config.localization.defaultLocale,\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (actorRes.error) return actorRes;\n\n\tconst createRes = await SecurityAuditLogs.createSingle({\n\t\tdata: {\n\t\t\tuser_id: data.userId,\n\t\t\taction: data.action,\n\t\t\tperformed_by: data.performedBy,\n\t\t\tperformed_by_roles: sortRoleSnapshot(\n\t\t\t\tactorRes.data.roles?.map((role) => ({\n\t\t\t\t\tid: role.id,\n\t\t\t\t\tname: role.name ?? \"\",\n\t\t\t\t})) ?? [],\n\t\t\t),\n\t\t\tperformed_by_super_admin: formatter.formatBoolean(\n\t\t\t\tactorRes.data.super_admin,\n\t\t\t),\n\t\t\tip_address: context.request.ipAddress ?? \"unknown\",\n\t\t\tprevious_value: data.previousValue,\n\t\t\tnew_value: data.newValue,\n\t\t},\n\t\treturning: [\"id\"],\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (createRes.error) return createRes;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: createRes.data.id,\n\t};\n};\n\nexport default logSecurityAudit;\n"],"mappings":"gOASA,MAAM,EAWF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAoB,IAAI,EAC7B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EAEM,EAAW,MAAM,EAAM,qBAAqB,CACjD,GAAI,EAAK,YACT,cAAe,EAAQ,OAAO,aAAa,cAC3C,WAAY,CACX,QAAS,EACV,CACD,CAAC,EACD,GAAI,EAAS,MAAO,OAAO,EAE3B,IAAM,EAAY,MAAM,EAAkB,aAAa,CACtD,KAAM,CACL,QAAS,EAAK,OACd,OAAQ,EAAK,OACb,aAAc,EAAK,YACnB,mBAAoB,EACnB,EAAS,KAAK,OAAO,IAAK,IAAU,CACnC,GAAI,EAAK,GACT,KAAM,EAAK,MAAQ,EACpB,EAAE,GAAK,CAAC,CACT,EACA,yBAA0BA,EAAU,cACnC,EAAS,KAAK,WACf,EACA,WAAY,EAAQ,QAAQ,WAAa,UACzC,eAAgB,EAAK,cACrB,UAAW,EAAK,QACjB,EACA,UAAW,CAAC,IAAI,EAChB,WAAY,CACX,QAAS,EACV,CACD,CAAC,EAGD,OAFI,EAAU,MAAc,EAErB,CACN,MAAO,IAAA,GACP,KAAM,EAAU,KAAK,EACtB,CACD"}