| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | const error            = require('../lib/error');const auditLogModel    = require('../models/audit-log');const {castJsonIfNeed} = require('../lib/helpers');const internalAuditLog = {	/**	 * All logs	 *	 * @param   {Access}  access	 * @param   {Array}   [expand]	 * @param   {String}  [search_query]	 * @returns {Promise}	 */	getAll: (access, expand, search_query) => {		return access.can('auditlog:list')			.then(() => {				let query = auditLogModel					.query()					.orderBy('created_on', 'DESC')					.orderBy('id', 'DESC')					.limit(100)					.allowGraph('[user]');				// Query is used for searching				if (typeof search_query === 'string' && search_query.length > 0) {					query.where(function () {						this.where(castJsonIfNeed('meta'), 'like', '%' + search_query + '%');					});				}				if (typeof expand !== 'undefined' && expand !== null) {					query.withGraphFetched('[' + expand.join(', ') + ']');				}				return query;			});	},	/**	 * This method should not be publicly used, it doesn't check certain things. It will be assumed	 * that permission to add to audit log is already considered, however the access token is used for	 * default user id determination.	 *	 * @param   {Access}   access	 * @param   {Object}   data	 * @param   {String}   data.action	 * @param   {Number}   [data.user_id]	 * @param   {Number}   [data.object_id]	 * @param   {Number}   [data.object_type]	 * @param   {Object}   [data.meta]	 * @returns {Promise}	 */	add: (access, data) => {		return new Promise((resolve, reject) => {			// Default the user id			if (typeof data.user_id === 'undefined' || !data.user_id) {				data.user_id = access.token.getUserId(1);			}			if (typeof data.action === 'undefined' || !data.action) {				reject(new error.InternalValidationError('Audit log entry must contain an Action'));			} else {				// Make sure at least 1 of the IDs are set and action				resolve(auditLogModel					.query()					.insert({						user_id:     data.user_id,						action:      data.action,						object_type: data.object_type || '',						object_id:   data.object_id || 0,						meta:        data.meta || {}					}));			}		});	}};module.exports = internalAuditLog;
 |