@bunnarin/plugin-audit-log 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.js +1 -1
- package/dist/server/collections/auditConfig.js +43 -8
- package/dist/server/hooks/afterCreate.d.ts +1 -1
- package/dist/server/hooks/afterDestroy.d.ts +1 -1
- package/dist/server/hooks/afterUpdate.d.ts +1 -1
- package/dist/server/hooks/afterUpdate.js +5 -8
- package/dist/server/index.js +7 -9
- package/package.json +1 -1
package/dist/client/index.js
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("@nocobase/client"),require("antd")):"function"==typeof define&&define.amd?define("@bunnarin/plugin-audit-log",["react","@nocobase/client","antd"],t):"object"==typeof exports?exports["@bunnarin/plugin-audit-log"]=t(require("react"),require("@nocobase/client"),require("antd")):e["@bunnarin/plugin-audit-log"]=t(e.react,e["@nocobase/client"],e.antd)}(self,function(e,t,n){return function(){"use strict";var r={772:function(e){e.exports=t},721:function(e){e.exports=n},156:function(t){t.exports=e}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return!function(){i.r(a),i.d(a,{default:function(){return k}});var e=i(772),t={},n=i(156),r=i.n(n),o=i(721);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function c(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){l(i,r,o,a,u,"next",e)}function u(e){l(i,r,o,a,u,"throw",e)}a(void 0)})}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){s(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var b=function(){var t,i,a=(0,e.useCollectionManager)().getCollections(),u=(0,e.useAPIClient)(),l=d((0,n.useState)({}),2),b=l[0],h=l[1],v=d((0,n.useState)(!0),2),g=v[0],m=v[1],w=(t=c(function(){var e,t,n;return y(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,3,4]),m(!0),[4,u.resource("__auditConfig").list({paginate:!1})];case 1:return t=r.sent().data,n={},null==t||null==(e=t.data)||e.forEach(function(e){n[e.collectionName]=e}),h(n),[3,4];case 2:return console.error(r.sent()),o.message.error("Failed to fetch audit configs"),[3,4];case 3:return m(!1),[7];case 4:return[2]}})}),function(){return t.apply(this,arguments)});(0,n.useEffect)(function(){w()},[]);var O=(i=c(function(e,t){var n,r;return y(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),r=f({},n=b[e]||{},t),h(function(t){return p(f({},t),s({},e,r))}),n.collectionName)return[3,2];return[4,u.resource("__auditConfig").create({values:f({collectionName:e},t)}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 1:return i.sent(),[3,4];case 2:return[4,u.resource("__auditConfig").update({filter:{collectionName:e},values:t}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 3:i.sent(),i.label=4;case 4:return o.message.success("Config saved"),[3,6];case 5:return console.error(i.sent()),o.message.error("Failed to save config"),w(),[3,6];case 6:return[2]}})}),function(e,t){return i.apply(this,arguments)}),k=(0,n.useMemo)(function(){return a.filter(function(e){return!e.name.startsWith("__audit")&&"__ipAddress"!==e.name})},[a]),x=[{title:"Collection",dataIndex:"name",key:"name",render:function(e,t){return r().createElement("div",null,r().createElement(o.Typography.Text,{strong:!0},t.title||e),r().createElement("br",null),r().createElement(o.Typography.Text,{type:"secondary"},e))}},{title:"Skip IP",dataIndex:"skipIP",key:"skipIP",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipIP)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipIP:e})}})}},{title:"Skip Create",dataIndex:"skipCreate",key:"skipCreate",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipCreate)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipCreate:e})}})}},{title:"Skip Delete",dataIndex:"skipDelete",key:"skipDelete",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipDelete)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipDelete:e})}})}},{title:"Update Listen Logic",dataIndex:"updateListenLogic",key:"updateListenLogic",render:function(e,t){var n,i,a=(null==(n=b[t.name])?void 0:n.updateListenLogic)||{},u=a.blacklist?"include":a.whitelist?"exclude":"none",l="include"===u?a.blacklist:"exclude"===u?a.whitelist:[],c=(null==(i=t.fields)?void 0:i.filter(function(e){return!["hasOne","hasMany","belongsTo","belongsToMany"].includes(e.type)}))||[];return r().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px",minWidth:"250px"}},r().createElement(o.Select,{value:u,onChange:function(e){"none"===e?O(t.name,{updateListenLogic:null}):O(t.name,{updateListenLogic:s({},"include"===e?"blacklist":"whitelist",[])})},options:[{label:"Log nothing (Default)",value:"none"},{label:"blacklist",value:"include"},{label:"whitelist",value:"exclude"}]}),"none"!==u&&r().createElement(o.Select,{mode:"multiple",allowClear:!0,placeholder:"Select fields",value:l,onChange:function(e){O(t.name,{updateListenLogic:s({},"include"===u?"blacklist":"whitelist",e)})},options:c.map(function(e){return{label:e.title||e.name,value:e.name}})}))}}];return g&&0===Object.keys(b).length?r().createElement(o.Spin,{style:{margin:"20px"}}):r().createElement("div",{style:{padding:"24px"}},r().createElement("h2",null,"Audit Log Configuration"),r().createElement(o.Table,{dataSource:k,columns:x,rowKey:"name",pagination:!1,bordered:!0}))};function h(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function v(e,t,n){return(v=O()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&m(o,n.prototype),o}).apply(null,arguments)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function w(e){var t="function"==typeof Map?new Map:void 0;return(w=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return v(e,arguments,g(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),m(n,e)})(e)}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}var k=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=g(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,O()?Reflect.construct(e,t||[],g(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&m(r,e),n=[{key:"load",value:function(){var e,n=this;return(e=function(){var e,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(o){return null==(r=n.flowEngine)||null==(e=r.registerModels)||e.call(r,t),n.app.pluginSettingsManager.add("audit-log",{title:"Audit Log Settings",icon:"SettingOutlined",Component:b}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){h(i,r,o,a,u,"next",e)}function u(e){h(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(r.prototype,n),r}(w(e.Plugin))}(),a}()});
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("@nocobase/client"),require("antd")):"function"==typeof define&&define.amd?define("@bunnarin/plugin-audit-log",["react","@nocobase/client","antd"],t):"object"==typeof exports?exports["@bunnarin/plugin-audit-log"]=t(require("react"),require("@nocobase/client"),require("antd")):e["@bunnarin/plugin-audit-log"]=t(e.react,e["@nocobase/client"],e.antd)}(self,function(e,t,n){return function(){"use strict";var r={772:function(e){e.exports=t},721:function(e){e.exports=n},156:function(t){t.exports=e}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return!function(){i.r(a),i.d(a,{default:function(){return k}});var e=i(772),t={},n=i(156),r=i.n(n),o=i(721);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function l(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function c(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){l(i,r,o,a,u,"next",e)}function u(e){l(i,r,o,a,u,"throw",e)}a(void 0)})}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){s(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var b=function(){var t,i,a=(0,e.useCollectionManager)().getCollections(),u=(0,e.useAPIClient)(),l=d((0,n.useState)({}),2),b=l[0],h=l[1],v=d((0,n.useState)(!0),2),g=v[0],m=v[1],w=(t=c(function(){var e,t,n;return y(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,3,4]),m(!0),[4,u.resource("__auditConfig").list({paginate:!1})];case 1:return t=r.sent().data,n={},null==t||null==(e=t.data)||e.forEach(function(e){n[e.collection]=e}),h(n),[3,4];case 2:return console.error(r.sent()),o.message.error("Failed to fetch audit configs"),[3,4];case 3:return m(!1),[7];case 4:return[2]}})}),function(){return t.apply(this,arguments)});(0,n.useEffect)(function(){w()},[]);var O=(i=c(function(e,t){var n,r;return y(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),r=f({},n=b[e]||{},t),h(function(t){return p(f({},t),s({},e,r))}),n.collection)return[3,2];return[4,u.resource("__auditConfig").create({values:f({collection:e},t)}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 1:return i.sent(),[3,4];case 2:return[4,u.resource("__auditConfig").update({filter:{collection:e},values:t}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 3:i.sent(),i.label=4;case 4:return o.message.success("Config saved"),[3,6];case 5:return console.error(i.sent()),o.message.error("Failed to save config"),w(),[3,6];case 6:return[2]}})}),function(e,t){return i.apply(this,arguments)}),k=(0,n.useMemo)(function(){return a.filter(function(e){return!e.name.startsWith("__audit")&&"__ipAddress"!==e.name})},[a]),x=[{title:"Collection",dataIndex:"name",key:"name",render:function(e,t){return r().createElement("div",null,r().createElement(o.Typography.Text,{strong:!0},t.title||e),r().createElement("br",null),r().createElement(o.Typography.Text,{type:"secondary"},e))}},{title:"Skip IP",dataIndex:"skipIP",key:"skipIP",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipIP)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipIP:e})}})}},{title:"Skip Create",dataIndex:"skipCreate",key:"skipCreate",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipCreate)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipCreate:e})}})}},{title:"Skip Delete",dataIndex:"skipDelete",key:"skipDelete",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipDelete)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipDelete:e})}})}},{title:"Update Listen Logic",dataIndex:"updateListenLogic",key:"updateListenLogic",render:function(e,t){var n,i,a=(null==(n=b[t.name])?void 0:n.updateListenLogic)||{},u=a.blacklist?"include":a.whitelist?"exclude":"none",l="include"===u?a.blacklist:"exclude"===u?a.whitelist:[],c=(null==(i=t.fields)?void 0:i.filter(function(e){return!["hasOne","hasMany","belongsTo","belongsToMany"].includes(e.type)}))||[];return r().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px",minWidth:"250px"}},r().createElement(o.Select,{value:u,onChange:function(e){"none"===e?O(t.name,{updateListenLogic:null}):O(t.name,{updateListenLogic:s({},"include"===e?"blacklist":"whitelist",[])})},options:[{label:"Log nothing (Default)",value:"none"},{label:"blacklist",value:"include"},{label:"whitelist",value:"exclude"}]}),"none"!==u&&r().createElement(o.Select,{mode:"multiple",allowClear:!0,placeholder:"Select fields",value:l,onChange:function(e){O(t.name,{updateListenLogic:s({},"include"===u?"blacklist":"whitelist",e)})},options:c.map(function(e){return{label:e.title||e.name,value:e.name}})}))}}];return g&&0===Object.keys(b).length?r().createElement(o.Spin,{style:{margin:"20px"}}):r().createElement("div",{style:{padding:"24px"}},r().createElement("h2",null,"Audit Log Configuration"),r().createElement(o.Table,{dataSource:k,columns:x,rowKey:"name",pagination:!1,bordered:!0}))};function h(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function v(e,t,n){return(v=O()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&m(o,n.prototype),o}).apply(null,arguments)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function w(e){var t="function"==typeof Map?new Map:void 0;return(w=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return v(e,arguments,g(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),m(n,e)})(e)}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}var k=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=g(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,O()?Reflect.construct(e,t||[],g(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&m(r,e),n=[{key:"load",value:function(){var e,n=this;return(e=function(){var e,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(o){return null==(r=n.flowEngine)||null==(e=r.registerModels)||e.call(r,t),n.app.pluginSettingsManager.add("audit-log-config",{title:"Audit Log Config",icon:"SettingOutlined",Component:b}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){h(i,r,o,a,u,"next",e)}function u(e){h(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(r.prototype,n),r}(w(e.Plugin))}(),a}()});
|
|
@@ -33,12 +33,23 @@ var import_database = require("@nocobase/database");
|
|
|
33
33
|
var auditConfig_default = (0, import_database.defineCollection)({
|
|
34
34
|
name: "__auditConfig",
|
|
35
35
|
title: "audit config",
|
|
36
|
-
filterTargetKey: "
|
|
36
|
+
filterTargetKey: "collection",
|
|
37
37
|
fields: [
|
|
38
38
|
{
|
|
39
39
|
type: "string",
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
interface: "collection",
|
|
41
|
+
name: "collection",
|
|
42
|
+
primaryKey: true,
|
|
43
|
+
unique: true,
|
|
44
|
+
uiSchema: {
|
|
45
|
+
title: "collection",
|
|
46
|
+
type: "string",
|
|
47
|
+
"x-component": "CollectionSelect",
|
|
48
|
+
"x-component-props": {
|
|
49
|
+
multiple: false
|
|
50
|
+
},
|
|
51
|
+
required: true
|
|
52
|
+
}
|
|
42
53
|
},
|
|
43
54
|
{
|
|
44
55
|
type: "belongsTo",
|
|
@@ -46,25 +57,49 @@ var auditConfig_default = (0, import_database.defineCollection)({
|
|
|
46
57
|
target: "collections",
|
|
47
58
|
targetKey: "name",
|
|
48
59
|
sourceKey: "id",
|
|
49
|
-
foreignKey: "
|
|
60
|
+
foreignKey: "collection",
|
|
50
61
|
constraints: false
|
|
51
62
|
},
|
|
52
63
|
{
|
|
53
64
|
type: "boolean",
|
|
54
|
-
name: "skipIP"
|
|
65
|
+
name: "skipIP",
|
|
66
|
+
interface: "checkbox",
|
|
67
|
+
uiSchema: {
|
|
68
|
+
title: "skip ip",
|
|
69
|
+
type: "boolean",
|
|
70
|
+
"x-component": "Checkbox"
|
|
71
|
+
}
|
|
55
72
|
},
|
|
56
73
|
{
|
|
57
74
|
type: "boolean",
|
|
58
|
-
name: "skipCreate"
|
|
75
|
+
name: "skipCreate",
|
|
76
|
+
interface: "checkbox",
|
|
77
|
+
uiSchema: {
|
|
78
|
+
title: "skip create",
|
|
79
|
+
type: "boolean",
|
|
80
|
+
"x-component": "Checkbox"
|
|
81
|
+
}
|
|
59
82
|
},
|
|
60
83
|
{
|
|
61
84
|
type: "boolean",
|
|
62
|
-
name: "skipDelete"
|
|
85
|
+
name: "skipDelete",
|
|
86
|
+
interface: "checkbox",
|
|
87
|
+
uiSchema: {
|
|
88
|
+
title: "skip delete",
|
|
89
|
+
type: "boolean",
|
|
90
|
+
"x-component": "Checkbox"
|
|
91
|
+
}
|
|
63
92
|
},
|
|
64
93
|
// key will be either include all except or whitelist and value will be array of field names
|
|
65
94
|
{
|
|
66
95
|
type: "json",
|
|
67
|
-
name: "updateListenLogic"
|
|
96
|
+
name: "updateListenLogic",
|
|
97
|
+
interface: "json",
|
|
98
|
+
uiSchema: {
|
|
99
|
+
title: "update listen logic",
|
|
100
|
+
type: "object",
|
|
101
|
+
"x-component": "JSONEditor"
|
|
102
|
+
}
|
|
68
103
|
}
|
|
69
104
|
]
|
|
70
105
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function afterCreate(model: any, options: any, ipAddressId:
|
|
1
|
+
export declare function afterCreate(model: any, options: any, ipAddressId: number | null): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function afterDestroy(model: any, options: any, ipAddressId:
|
|
1
|
+
export declare function afterDestroy(model: any, options: any, ipAddressId: number | null): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function afterUpdate(model: any, options: any, ipAddressId:
|
|
1
|
+
export declare function afterUpdate(model: any, options: any, ipAddressId: number | null, auditConfig: any): Promise<void>;
|
|
@@ -30,31 +30,28 @@ __export(afterUpdate_exports, {
|
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(afterUpdate_exports);
|
|
32
32
|
async function afterUpdate(model, options, ipAddressId, auditConfig) {
|
|
33
|
-
var _a, _b
|
|
33
|
+
var _a, _b;
|
|
34
34
|
const { collection, database } = model.constructor;
|
|
35
35
|
const changedFields = model.changed();
|
|
36
36
|
if (!changedFields) return;
|
|
37
37
|
const listenLogic = auditConfig.get("updateListenLogic");
|
|
38
38
|
let allowedFields = [];
|
|
39
|
-
if ((
|
|
39
|
+
if (Array.isArray(listenLogic == null ? void 0 : listenLogic.blacklist))
|
|
40
40
|
allowedFields = changedFields.filter((f) => !listenLogic.blacklist.includes(f));
|
|
41
|
-
else if ((
|
|
41
|
+
else if (Array.isArray(listenLogic == null ? void 0 : listenLogic.whitelist))
|
|
42
42
|
allowedFields = changedFields.filter((f) => listenLogic.whitelist.includes(f));
|
|
43
|
-
else
|
|
44
|
-
allowedFields = changedFields;
|
|
45
43
|
if (allowedFields.length == 0) return;
|
|
46
44
|
const changes = [];
|
|
47
45
|
allowedFields.forEach((key) => {
|
|
48
46
|
const field = collection.findField((field2) => {
|
|
49
47
|
return field2.name === key || field2.options.field === key;
|
|
50
48
|
});
|
|
51
|
-
if (field && !field.options.hidden)
|
|
49
|
+
if (field && !field.options.hidden)
|
|
52
50
|
changes.push({
|
|
53
51
|
fieldName: key,
|
|
54
52
|
before: stringifyValue(model.previous(key)),
|
|
55
53
|
after: stringifyValue(model.get(key))
|
|
56
54
|
});
|
|
57
|
-
}
|
|
58
55
|
});
|
|
59
56
|
const transaction = options.transaction;
|
|
60
57
|
const auditLog = await database.getRepository("__auditLog").create({
|
|
@@ -63,7 +60,7 @@ async function afterUpdate(model, options, ipAddressId, auditConfig) {
|
|
|
63
60
|
isUpdate: true,
|
|
64
61
|
collection: collection.name,
|
|
65
62
|
ipAddressId,
|
|
66
|
-
createdBy: (
|
|
63
|
+
createdBy: (_b = (_a = options == null ? void 0 : options.context) == null ? void 0 : _a.state) == null ? void 0 : _b.currentUser
|
|
67
64
|
},
|
|
68
65
|
transaction
|
|
69
66
|
});
|
package/dist/server/index.js
CHANGED
|
@@ -41,21 +41,19 @@ class PluginAuditLogServer extends import_server.Plugin {
|
|
|
41
41
|
this.db.on("afterDestroy", (model, options) => this.afterWrite(model, options, "delete"));
|
|
42
42
|
}
|
|
43
43
|
async afterWrite(model, options, type) {
|
|
44
|
-
var _a, _b, _c, _d, _e
|
|
44
|
+
var _a, _b, _c, _d, _e;
|
|
45
45
|
const { collection } = model.constructor;
|
|
46
46
|
if (!collection) return;
|
|
47
|
-
console.log("filterTargetKey: ", collection.filterTargetKey);
|
|
48
|
-
console.log("primaryKeyAttribute: ", (_a = collection.model) == null ? void 0 : _a.primaryKeyAttribute);
|
|
49
47
|
const config = await this.db.getRepository("__auditConfig").findOne({
|
|
50
48
|
filter: {
|
|
51
|
-
|
|
49
|
+
collection: collection.name
|
|
52
50
|
}
|
|
53
51
|
});
|
|
54
52
|
if (!config) return;
|
|
55
53
|
if (type === "create" && config.get("skipCreate")) return;
|
|
56
54
|
if (type === "delete" && config.get("skipDelete")) return;
|
|
57
|
-
const ip = (
|
|
58
|
-
let ipRecord;
|
|
55
|
+
const ip = (_e = (_d = (_c = (_b = (_a = options.context) == null ? void 0 : _a.request) == null ? void 0 : _b.headers) == null ? void 0 : _c["x-forwarded-for"]) == null ? void 0 : _d.split(", ")) == null ? void 0 : _e[0];
|
|
56
|
+
let ipRecord = null;
|
|
59
57
|
if (ip && !config.get("skipIP"))
|
|
60
58
|
ipRecord = await this.db.getRepository("__ipAddress").firstOrCreate({
|
|
61
59
|
filterKeys: ["ip"],
|
|
@@ -64,11 +62,11 @@ class PluginAuditLogServer extends import_server.Plugin {
|
|
|
64
62
|
}
|
|
65
63
|
});
|
|
66
64
|
if (type === "create")
|
|
67
|
-
await (0, import_afterCreate.afterCreate)(model, options, ipRecord.get("id"));
|
|
65
|
+
await (0, import_afterCreate.afterCreate)(model, options, ip ? ipRecord.get("id") : null);
|
|
68
66
|
else if (type === "update")
|
|
69
|
-
await (0, import_afterUpdate.afterUpdate)(model, options, ipRecord.get("id"), config);
|
|
67
|
+
await (0, import_afterUpdate.afterUpdate)(model, options, ip ? ipRecord.get("id") : null, config);
|
|
70
68
|
else if (type === "delete")
|
|
71
|
-
await (0, import_afterDestroy.afterDestroy)(model, options, ipRecord.get("id"));
|
|
69
|
+
await (0, import_afterDestroy.afterDestroy)(model, options, ip ? ipRecord.get("id") : null);
|
|
72
70
|
}
|
|
73
71
|
}
|
|
74
72
|
var server_default = PluginAuditLogServer;
|