forked from jouke/loopback-auditz
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathauditz.js.map
1 lines (1 loc) · 39.8 KB
/
auditz.js.map
1
{"version":3,"sources":["auditz.js"],"names":["assert","require","debug","warn","options","rest","silenceWarnings","Object","compare","obj1","obj2","p","console","log","hasOwnProperty","toString","Model","bootOptions","modelName","app","createdAt","updatedAt","deletedAt","createdBy","updatedBy","deletedBy","softDelete","unknownUser","remoteCtx","scrub","required","validateUpsert","revisions","name","idType","dataSource","autoUpdate","revisionsModelName","properties","definition","idName","scrubbed","propertiesToScrub","Array","isArray","filter","prop","reduce","obj","settings","pluralModelName","defineProperty","type","Date","defaultFn","String","observe","ctx","next","currentUser","accessToken","userId","getApp","err","a","ipForwarded","ip","req","headers","connection","remoteAddress","groups","saveGroups","count","delete","forEach","group","createOrUpdateRevision","length","isNewInstance","models","create","action","table_name","row_id","instance","id","old","new","user","ip_forwarded","oldInstance","oldInstances","entries","map","inst","updatedIds","newInst","query","where","inq","find","error","newInstances","data","cloneKey","key","from","to","parts","split","toObject","fromObject","index","cb","rec","recNew","JSON","parse","recOld","getOldInstance","args","findById","deleted","result","skipUpdatedAt","keyAt","keyBy","destroyAll","softDestroyAll","callback","updateAll","then","catch","reject","remove","deleteAll","destroyById","softDestroyById","opt","undefined","newOpt","removeById","deleteById","prototype","destroy","softDestroy","updateAttributes","queryNonDeleted","_findOrCreate","findOrCreate","findOrCreateDeleted","and","call","_find","findDeleted","_count","countDeleted","whereNotDeleted","_update","update","updateDeleted","_setupRevisionsModel","opts","dsName","rowIdType","_createModel","revisionsDef","s","plural","revisionsModel","dataSources","createModel","model","autoupdate"],"mappings":"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","file":"auditz.js","sourcesContent":["import _debug from './debug';\nconst assert = require('assert');\n\nconst debug = _debug();\nconst warn = (options, ...rest) => {\n if (!options.silenceWarnings) {\n console.warn(...rest);\n }\n};\n\nObject.compare = function (obj1, obj2) {\n\t//Loop through properties in object 1\n\tfor (var p in obj1) {\n console.log(\"PROPERTY\", p);\n\t\t//Check property exists on both objects\n\t\tif (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) return false;\n\n console.log('value 1', obj1[p]);\n console.log('value 2', obj2[p]);\n \n\t\tswitch (typeof (obj1[p])) {\n\t\t\t//Deep compare objects\n\t\t\tcase 'object':\n console.log('OBJECT');\n\t\t\t\tif (!Object.compare(obj1[p], obj2[p])) return false;\n\t\t\t\tbreak;\n\t\t\t//Compare function code\n\t\t\tcase 'function':\n console.log('FUNCTION');\n\t\t\t\tif (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString())) return false;\n\t\t\t\tbreak;\n\t\t\t//Compare values\n\t\t\tdefault:\n\t\t\t\tif (obj1[p] != obj2[p]) return false;\n\t\t}\n\t}\n \n\t//Check object 2 for any extra properties\n\tfor (var p in obj2) {\n console.log(\"2 PROPERTY\", p);\n console.log(\"2 VALUE\", obj1[p]);\n\t\tif (typeof (obj1[p]) == 'undefined') return false;\n\t}\n\treturn true;\n};\n\nexport default (Model, bootOptions = {}) => {\n debug('Auditz mixin for Model %s', Model.modelName);\n let app;\n\n const options = Object.assign({\n createdAt: 'createdAt',\n updatedAt: 'updatedAt',\n deletedAt: 'deletedAt',\n createdBy: 'createdBy',\n updatedBy: 'updatedBy',\n deletedBy: 'deletedBy',\n softDelete: true,\n unknownUser: '0',\n remoteCtx: 'remoteCtx',\n scrub: false,\n required: true,\n validateUpsert: false, // default to turning validation off\n silenceWarnings: false,\n revisions: {\n name: 'revisions',\n idType: 'Number',\n dataSource: 'db',\n autoUpdate: true,\n },\n }, bootOptions);\n\n options.revisionsModelName = (typeof options.revisions === 'object' && options.revisions.name) ?\n options.revisions.name : null;\n debug('options', options);\n\n const properties = Model.definition.properties;\n const idName = Model.dataSource.idName(Model.modelName);\n\n let scrubbed = {};\n if (options.softDelete) {\n if (options.scrub !== false) {\n let propertiesToScrub = options.scrub;\n if (!Array.isArray(propertiesToScrub)) {\n propertiesToScrub = Object.keys(properties)\n .filter(prop => !properties[prop][idName] && prop !== options.deletedAt && prop !== options.deletedBy);\n }\n scrubbed = propertiesToScrub.reduce((obj, prop) => ({ ...obj, [prop]: null }), {});\n }\n }\n\n if (!options.validateUpsert && Model.settings.validateUpsert) {\n Model.settings.validateUpsert = false;\n warn(options, `${Model.pluralModelName} settings.validateUpsert was overridden to false`);\n }\n\n if (Model.settings.validateUpsert && options.required) {\n warn(options, `Upserts for ${Model.pluralModelName} will fail when\n validation is turned on and time stamps are required`);\n }\n\n Model.settings.validateUpsert = options.validateUpsert;\n\n if (options.createdAt !== false) {\n if (typeof(properties[options.createdAt]) === 'undefined') {\n Model.defineProperty(options.createdAt, {type: Date, required: options.required, defaultFn: 'now'});\n }\n }\n\n if (options.updatedAt !== false) {\n if (typeof(properties[options.updatedAt]) === 'undefined') {\n Model.defineProperty(options.updatedAt, {type: Date, required: options.required});\n }\n }\n\n if (options.createdBy !== false) {\n if (typeof(properties[options.createdBy]) === 'undefined') {\n Model.defineProperty(options.createdBy, {type: String, required: false});\n }\n }\n\n if (options.updatedBy !== false) {\n if (typeof(properties[options.updatedBy]) === 'undefined') {\n Model.defineProperty(options.updatedBy, {type: String, required: false});\n }\n }\n\n if (options.softDelete) {\n if (typeof(properties[options.deletedAt]) === 'undefined') {\n Model.defineProperty(options.deletedAt, {type: Date, required: false});\n }\n if (typeof(properties[options.deletedBy]) === 'undefined') {\n Model.defineProperty(options.deletedBy, {type: String, required: false});\n }\n }\n\n Model.observe('after save', (ctx, next) => {\n if (!options.revisions) {\n return next();\n }\n debug('ctx.options', ctx.options);\n\n // determine the currently logged in user. Default to options.unknownUser\n let currentUser = options.unknownUser;\n\n\n if (ctx.options.accessToken) {\n currentUser = ctx.options.accessToken.userId;\n }\n\n Model.getApp((err, a) => {\n if (err) { return next(err); }\n app = a;\n let ipForwarded = '';\n let ip = '127.0.0.1';\n if (ctx.options.remoteCtx) {\n ipForwarded = ctx.options.remoteCtx.req.headers['x-forwarded-for'];\n ip = ctx.options.remoteCtx.req.connection.remoteAddress;\n }\n let groups = options.revisions.groups;\n\n let saveGroups = function (err) {\n if (err) {\n next(err);\n return;\n }\n if (groups && Array.isArray(groups)) {\n let count = 0;\n if (!(ctx.options && ctx.options.delete)) {\n groups.forEach(function (group) {\n createOrUpdateRevision(ctx, group, currentUser, ipForwarded, ip, function () {\n count += 1;\n if (count === groups.length) {\n next();\n }\n });\n });\n return;\n }\n }\n next();\n };\n\n // If it's a new instance, set the createdBy to currentUser\n if (ctx.isNewInstance) {\n app.models[options.revisionsModelName].create({\n action: 'create',\n table_name: Model.modelName,\n row_id: ctx.instance.id,\n old: null,\n new: ctx.instance,\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n }, saveGroups);\n } else {\n if (ctx.options && ctx.options.delete) {\n if (ctx.options.oldInstance) {\n app.models[options.revisionsModelName].create({\n action: 'delete',\n table_name: Model.modelName,\n row_id: ctx.options.oldInstance.id,\n old: ctx.options.oldInstance,\n new: null,\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n }, saveGroups);\n } else if (ctx.options.oldInstances) {\n const entries = ctx.options.oldInstances.map(inst => {\n return {\n action: 'delete',\n table_name: Model.modelName,\n row_id: inst.id,\n old: inst,\n new: null,\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n };\n });\n app.models[options.revisionsModelName].create(entries, saveGroups);\n } else {\n debug('Cannot register delete without old instance! Options: %j', ctx.options);\n return saveGroups();\n }\n } else {\n if (ctx.options.oldInstance && ctx.instance) {\n const inst = ctx.instance;\n app.models[options.revisionsModelName].create({\n action: 'update',\n table_name: Model.modelName,\n row_id: inst.id,\n old: ctx.options.oldInstance,\n new: inst,\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n }, saveGroups);\n } else if (ctx.options.oldInstances) {\n const updatedIds = ctx.options.oldInstances.map(inst => { return inst.id; });\n let newInst = {};\n const query = {where: {[ idName ]: {inq: updatedIds}}};\n app.models[Model.modelName].find(query, (error, newInstances) => {\n if (error) { return next(error); }\n newInstances.forEach(inst => {\n newInst[ inst[ idName ] ] = inst;\n });\n const entries = ctx.options.oldInstances.map(inst => {\n return {\n action: 'update',\n table_name: Model.modelName,\n row_id: inst.id,\n old: inst,\n new: newInst[inst.id],\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n };\n });\n app.models[options.revisionsModelName].create(entries, saveGroups);\n });\n } else {\n debug('Cannot register update without old and new instance. Options: %j', ctx.options);\n debug('instance: %j', ctx.instance);\n debug('data: %j', ctx.data);\n return saveGroups();\n }\n }\n }\n });\n });\n\n function cloneKey(key, from, to) {\n let parts = key.split('.');\n\n let toObject = to;\n let fromObject = from;\n\n parts.forEach(function (key, index) {\n if(index === parts.length - 1) {\n toObject[key] = fromObject && fromObject[key];\n }else {\n if (!toObject[key]) {\n toObject[key] = {}; \n }\n }\n\n fromObject = fromObject && fromObject[key];\n toObject = toObject[key];\n });\n }\n\n function createOrUpdateRevision(ctx, group, currentUser, ipForwarded, ip, cb) {\n let data = {};\n group.properties.forEach(function (key) {\n cloneKey(key, ctx.instance, data);\n });\n debug(data);\n\n let rec = {\n table_name: Model.modelName,\n row_id: ctx.instance.id,\n new: data,\n user: currentUser,\n ip: ip,\n ip_forwarded: ipForwarded,\n };\n\n if (ctx.isNewInstance) {\n rec.action = 'create';\n rec.old = null;\n app.models[group.name].create(rec, cb);\n } else {\n rec.action = 'update';\n rec.old = ctx.options.oldInstance || null;\n if (rec.old) {\n let old = {};\n //make sure the object is pure\n group.properties.forEach(function (key) {\n cloneKey(key, rec.old, old);\n });\n rec.old = old;\n }\n \n //get away from undefined properties so compare can work\n let recNew = JSON.parse(JSON.stringify(rec.new));\n let recOld = rec.old && JSON.parse(JSON.stringify(rec.old));\n\n if (rec.old && Object.compare(recNew, recOld)) {\n console.log('equal '+ group.name);\n return cb();\n }\n app.models[group.name].create(rec, cb);\n }\n }\n\n function getOldInstance(ctx, cb) {\n if (options.revisions) {\n if (typeof ctx.isNewInstance === 'undefined' || !ctx.isNewInstance) {\n let id = ctx.instance ? ctx.instance.id : null;\n if (!id) {\n id = ctx.data ? ctx.data.id : null;\n }\n if (!id && ctx.where) {\n id = ctx.where.id;\n }\n if (!id && ctx.options.remoteCtx) {\n id = ctx.options.remoteCtx.req && ctx.options.remoteCtx.req.args ?\n ctx.options.remoteCtx.req.args.id : null;\n }\n if (id) {\n Model.findById(id, {deleted: true}, (err, oldInstance) => {\n if (err) { cb(err); } else { cb(null, oldInstance); }\n });\n } else {\n const query = {where: ctx.where} || {};\n Model.find(query, (err, oldInstances) => {\n if (err) {\n cb(err);\n } else {\n if (oldInstances.length > 1) {\n return cb(null, oldInstances);\n } else if (oldInstances.length === 0) {\n return cb();\n }\n cb(null, oldInstances[0]);\n }\n });\n }\n } else {\n cb();\n }\n } else {\n cb();\n }\n }\n\n Model.observe('before save', (ctx, next) => {\n const softDelete = ctx.options.delete;\n\n getOldInstance(ctx, (err, result) => {\n if (err) {\n console.error(err);\n return next(err);\n }\n\n if (Array.isArray(result)) {\n ctx.options.oldInstances = result;\n } else {\n ctx.options.oldInstance = result;\n }\n // determine the currently logged in user. Default to options.unknownUser\n let currentUser = options.unknownUser;\n\n if (ctx.options.accessToken) {\n currentUser = ctx.options.accessToken.userId;\n }\n\n // If it's a new instance, set the createdBy to currentUser\n if (ctx.isNewInstance) {\n debug('Setting %s.%s to %s', ctx.Model.modelName, options.createdBy, currentUser);\n ctx.instance[options.createdBy] = currentUser;\n } else {\n // if the createdBy and createdAt are sent along in the data to save, remove the keys\n // as we don't want to let the user overwrite it\n if (ctx.instance) {\n delete ctx.instance[options.createdBy];\n delete ctx.instance[options.createdAt];\n } else {\n delete ctx.data[options.createdBy];\n delete ctx.data[options.createdAt];\n }\n }\n\n if (ctx.options && ctx.options.skipUpdatedAt) { return next(); }\n let keyAt = options.updatedAt;\n let keyBy = options.updatedBy;\n if (options.softDelete) {\n // Since soft deletes replace the actual delete by an update, we set the option\n // 'delete' in the overridden delete functions that perform updates.\n // We now have to determine if we need to set updatedAt/updatedBy or\n // deletedAt/deletedBy\n if (softDelete) {\n keyAt = options.deletedAt;\n keyBy = options.deletedBy;\n }\n }\n\n let obj;\n if (ctx.instance) {\n obj = ctx.instance;\n } else {\n obj = ctx.data;\n }\n\n if (keyAt !== false) {\n obj[keyAt] = new Date();\n }\n if (keyBy !== false) {\n obj[keyBy] = currentUser;\n }\n\n return next();\n });\n });\n\n if (options.softDelete) {\n Model.destroyAll = function softDestroyAll(where, cb) {\n let query = where || {};\n let callback = cb;\n if (typeof where === 'function') {\n callback = where;\n query = {};\n }\n return Model.updateAll(query, { ...scrubbed }, {delete: true})\n .then(result => (typeof callback === 'function') ? callback(null, result) : result)\n .catch(error => (typeof callback === 'function') ? callback(error) : Promise.reject(error));\n };\n\n Model.remove = Model.destroyAll;\n Model.deleteAll = Model.destroyAll;\n\n Model.destroyById = function softDestroyById(id, opt, cb) {\n const callback = (cb === undefined && typeof opt === 'function') ? opt : cb;\n let newOpt = {delete: true};\n if (typeof opt === 'object') {\n newOpt.remoteCtx = opt.remoteCtx;\n }\n\n return Model.updateAll({ [idName]: id }, { ...scrubbed}, newOpt)\n .then(result => (typeof callback === 'function') ? callback(null, result) : result)\n .catch(error => (typeof callback === 'function') ? callback(error) : Promise.reject(error));\n };\n\n Model.removeById = Model.destroyById;\n Model.deleteById = Model.destroyById;\n\n Model.prototype.destroy = function softDestroy(opt, cb) {\n const callback = (cb === undefined && typeof opt === 'function') ? opt : cb;\n\n return this.updateAttributes({ ...scrubbed }, {delete: true})\n .then(result => (typeof cb === 'function') ? callback(null, result) : result)\n .catch(error => (typeof cb === 'function') ? callback(error) : Promise.reject(error));\n };\n\n Model.prototype.remove = Model.prototype.destroy;\n Model.prototype.delete = Model.prototype.destroy;\n\n // Emulate default scope but with more flexibility.\n const queryNonDeleted = {[options.deletedAt]: null};\n\n const _findOrCreate = Model.findOrCreate;\n Model.findOrCreate = function findOrCreateDeleted(query = {}, ...rest) {\n if (!query.deleted) {\n if (!query.where || Object.keys(query.where).length === 0) {\n query.where = queryNonDeleted;\n } else {\n query.where = { and: [ query.where, queryNonDeleted ] };\n }\n }\n\n return _findOrCreate.call(Model, query, ...rest);\n };\n\n const _find = Model.find;\n Model.find = function findDeleted(query = {}, ...rest) {\n if (!query.deleted) {\n if (!query.where || Object.keys(query.where).length === 0) {\n query.where = queryNonDeleted;\n } else {\n query.where = { and: [ query.where, queryNonDeleted ] };\n }\n }\n\n return _find.call(Model, query, ...rest);\n };\n\n const _count = Model.count;\n Model.count = function countDeleted(where = {}, ...rest) {\n // Because count only receives a 'where', there's nowhere to ask for the deleted entities.\n let whereNotDeleted;\n if (!where || Object.keys(where).length === 0) {\n whereNotDeleted = queryNonDeleted;\n } else {\n whereNotDeleted = { and: [ where, queryNonDeleted ] };\n }\n return _count.call(Model, whereNotDeleted, ...rest);\n };\n\n const _update = Model.update;\n Model.update = Model.updateAll = function updateDeleted(where = {}, ...rest) {\n // Because update/updateAll only receives a 'where', there's nowhere to ask for the deleted entities.\n let whereNotDeleted;\n if (!where || Object.keys(where).length === 0) {\n whereNotDeleted = queryNonDeleted;\n } else {\n whereNotDeleted = { and: [ where, queryNonDeleted ] };\n }\n return _update.call(Model, whereNotDeleted, ...rest);\n };\n }\n\n function _setupRevisionsModel(app, opts) {\n const autoUpdate = (opts.revisions === true || (typeof opts.revisions === 'object' && opts.revisions.autoUpdate));\n const dsName = (typeof opts.revisions === 'object' && opts.revisions.dataSource) ?\n opts.revisions.dataSource : 'db';\n const rowIdType = (typeof opts.revisions === 'object' && opts.revisions.idType) ?\n opts.revisions.idType : 'Number';\n\n if (options.revisionsModelName) {\n _createModel(opts, dsName, autoUpdate, rowIdType, {name: options.revisionsModelName});\n }\n if(opts.revisions && typeof opts.revisions === 'object' && \n opts.revisions.groups && opts.revisions.groups.length) {\n opts.revisions.groups.forEach(function (group) {\n if (!app.models[group.name]) {\n _createModel(opts, dsName, autoUpdate, rowIdType, group);\n }\n });\n }\n }\n\n function _createModel(opts, dsName, autoUpdate, rowIdType, group) {\n const revisionsDef = require('./models/revision.json');\n let settings = {};\n for (let s in revisionsDef) {\n if (s !== 'name' && s !== 'properties') {\n settings[s] = revisionsDef[s];\n }\n }\n\n settings['plural'] = group.plural;\n\n revisionsDef.properties.row_id.type = rowIdType;\n\n const revisionsModel = app.dataSources[dsName].createModel(\n group.name,\n revisionsDef.properties,\n settings\n );\n const revisions = require('./models/revision')(revisionsModel, opts);\n\n app.model(revisions);\n\n\n if (autoUpdate) {\n // create or update the revisions table\n app.dataSources[dsName].autoupdate([group.name], (error) => {\n if (error) {console.error(error);}\n });\n }\n }\n\n if (options.revisions) {\n Model.getApp((err, a) => {\n if (err) { return console.error(err);}\n app = a;\n if (!app.models[options.revisionsModelName]) {\n _setupRevisionsModel(app, options);\n }\n });\n }\n};\n"],"sourceRoot":"/Users/kalin/Sites/cip/loopback-auditz/src"}