not-node 6.3.47 → 6.3.49

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "not-node",
3
- "version": "6.3.47",
3
+ "version": "6.3.49",
4
4
  "description": "node complimentary part for client side notFramework.",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/src/auth/const.js CHANGED
@@ -19,6 +19,13 @@ const ACTION_SIGNATURES = {
19
19
  ANY: ACTION_SIGNATURE_ANY,
20
20
  };
21
21
 
22
+ const METHOD_SIGNAURES = {
23
+ GET: ACTION_SIGNATURES.READ,
24
+ PUT: ACTION_SIGNATURES.CREATE,
25
+ POST: ACTION_SIGNATURES.UPDATE,
26
+ DELETE: ACTION_SIGNATURES.DELETE,
27
+ };
28
+
22
29
  const OBJECT_STRING = "[object String]";
23
30
 
24
31
  const DOCUMENT_OWNER_FIELD_NAME = "owner";
@@ -32,4 +39,5 @@ module.exports = {
32
39
  DEFAULT_USER_ROLE_FOR_ADMIN,
33
40
  DOCUMENT_OWNER_FIELD_NAME,
34
41
  ACTION_SIGNATURES,
42
+ METHOD_SIGNAURES,
35
43
  };
package/src/form/form.js CHANGED
@@ -1,8 +1,10 @@
1
1
  const validator = require("validator");
2
2
  const notPath = require("not-path");
3
3
  const FormFabric = require("./fabric");
4
+ const Auth = require("../auth");
4
5
  const { createSchemaFromFields } = require("../fields");
5
-
6
+ const notFieldsFilter = require("../fields/filter.js");
7
+ const getApp = require("../getApp.js");
6
8
  const {
7
9
  objHas,
8
10
  isFunc,
@@ -27,6 +29,7 @@ const {
27
29
  const DEFAULT_EXTRACTORS = require("./extractors");
28
30
  const DEFAULT_ID_EXTRACTORS = require("./env_extractors");
29
31
  const DEFAULT_TRANSFORMERS = require("./transformers");
32
+ const notAppIdentity = require("../identity/index.js");
30
33
 
31
34
  /**
32
35
  * Generic form validation class
@@ -41,6 +44,7 @@ class Form {
41
44
  form: [],
42
45
  forms: {},
43
46
  };
47
+ #MODEL_SCHEMA;
44
48
  /**
45
49
  * @prop {string} name of form
46
50
  **/
@@ -521,7 +525,7 @@ class Form {
521
525
  /**
522
526
  *
523
527
  * @param {import('../types').notNodeExpressRequest} req Express Request
524
- * @returns {Array<string>|Array<Array<string>>}
528
+ * @returns {Array<string>}
525
529
  */
526
530
  extractActionFieldsFromRequest(req) {
527
531
  if (
@@ -539,6 +543,51 @@ class Form {
539
543
  return [];
540
544
  }
541
545
 
546
+ /**
547
+ *
548
+ * @param {import('../types.js').notActionData} actionData
549
+ * @returns
550
+ */
551
+ getActionSignature(actionData) {
552
+ if (actionData.actionSignature) {
553
+ return actionData.actionSignature;
554
+ } else if (actionData.method && typeof actionData.method === "string") {
555
+ const METHOD = actionData.method.toUpperCase();
556
+ if (objHas(Auth.METHOD_SIGNAURES, METHOD)) {
557
+ return Auth.METHOD_SIGNAURES[METHOD];
558
+ }
559
+ }
560
+ return Auth.ACTION_SIGNATURES.ANY;
561
+ }
562
+
563
+ /**
564
+ *
565
+ * @param {import('../types.js').notNodeExpressRequest} req
566
+ * @returns {import('../fields/filter.js').FieldsFilteringModificators}
567
+ */
568
+ extractActionMods(req) {
569
+ const authData = notAppIdentity.extractAuthData(req);
570
+ /**
571
+ * @type {import('../types.js').notRouteData}
572
+ */
573
+ const routeData = req.notRouteData;
574
+ let action = this.getActionSignature(req.notRouteData.actionData);
575
+ if (
576
+ action === Auth.ACTION_SIGNATURES.ANY &&
577
+ routeData.actionName &&
578
+ routeData.actionName.length
579
+ ) {
580
+ action = routeData.actionName;
581
+ }
582
+ return {
583
+ auth: authData.auth,
584
+ roles: authData.role,
585
+ root: authData.root,
586
+ modelName: routeData.modelName,
587
+ action,
588
+ };
589
+ }
590
+
542
591
  /**
543
592
  *
544
593
  * @param {import('../types.js').notNodeExpressRequest} req
@@ -553,7 +602,15 @@ class Form {
553
602
  ) {
554
603
  const result = {};
555
604
  const fields = this.extractActionFieldsFromRequest(req);
556
- fields.forEach((fieldName) => {
605
+ const schema = getApp().getModelSchema(
606
+ `${this.getModuleName()}//${this.getModelName(req)}`
607
+ );
608
+ const filteredFields = notFieldsFilter.filter(
609
+ fields,
610
+ schema,
611
+ this.extractActionMods(req)
612
+ );
613
+ filteredFields.forEach((fieldName) => {
557
614
  if (objHas(exceptions, fieldName)) {
558
615
  result[fieldName] = exceptions[fieldName];
559
616
  } else {
@@ -194,7 +194,7 @@ module.exports = class notManifestFilter {
194
194
  * @param {Array<string>} mods.role
195
195
  * @param {string} mods.modelName
196
196
  * @param {string} mods.moduleName
197
- * @param {string|undefined} mods.actionSignature create/read/update/delete
197
+ * @param {string|undefined} mods.actionSignature create/read/update/delete
198
198
  * @return {object} clean action data
199
199
  **/
200
200
  static clearActionFromRules(
package/src/types.js CHANGED
@@ -49,24 +49,24 @@
49
49
 
50
50
  /**
51
51
  * @typedef {object} notActionData
52
- * @property {string} [method]
53
- * @property {string} [actionSignature]
54
- * @property {string} [postFix]
55
- * @property {Array<notRouteRule>} rules
56
- * @property {boolean} [ws]
57
- * @property {Array<string & Array<string>>} [fields]
58
- * @property {Array<string>} [return]
59
- * @property {boolean} [isArray]
60
- * @property {Array<string>} [data]
61
- * @property {string} [title]
52
+ * @property {string} [method] HTTP method name GET,PUT,POST,DELETE
53
+ * @property {string} [actionSignature] one of create,read,update,delete,any
54
+ * @property {string} [postFix] uri rule
55
+ * @property {Array<notRouteRule>} rules access rules
56
+ * @property {boolean} [ws] use WS routers for this actions
57
+ * @property {Array<string & Array<string>>} [fields] array of fields names or fields set aliases, used in form generators, validators
58
+ * @property {Array<string>} [return] rule to filter results, used to exclude from response sensetive data
59
+ * @property {boolean} [isArray] obsolete
60
+ * @property {Array<string>} [data] list consisting of sources (pager,sorter,search,record) for request generation on client side
61
+ * @property {string} [title] used in form generators
62
62
  */
63
63
 
64
64
  /**
65
- * @typedef {Object} notRouteData
66
- * @property {string} actionName
67
- * @property {string} modelName
68
- * @property {notRouteRule} rule
69
- * @property {notActionData} actionData
65
+ * @typedef {Object} notRouteData
66
+ * @property {string} actionName name of action
67
+ * @property {string} modelName first letter should not be not capital
68
+ * @property {notRouteRule} rule current rule
69
+ * @property {notActionData} actionData action details
70
70
  */
71
71
 
72
72
  /**
@@ -132,4 +132,41 @@
132
132
  * @property {function} [idGetter]
133
133
  * @property {string} [client]
134
134
  */
135
+
136
+ /**
137
+ * @typedef {object} notFieldSafety
138
+ * @property {Array<string>} create
139
+ * @property {Array<string>} update
140
+ * @property {Array<string>} read
141
+ */
142
+
143
+ /**
144
+ * @typedef {Number|String|Array|Object|Date|import('mongoose').Types.ObjectId|import('mongoose').Schema.Types.Mixed} notFieldModelType
145
+ */
146
+
147
+ /**
148
+ * @typedef {object} notFieldModel
149
+ * @property {notFieldModelType} type
150
+ * @property {any} default default value
151
+ * @property {boolean} [sortable] if field is sortable
152
+ * @property {boolean} [required] if required to be defined
153
+ * @property {notFieldSafety} [safe] safety requirements
154
+ * @property {string} [ref] mongoose model name, if type is ObjectId
155
+ * @property {string} [refPath] path to field with name of mongoose model this field value of ObjectId type reference to
156
+ */
157
+
158
+ /**
159
+ * @typedef {object} notFieldUI
160
+ * @property {string} component name of component to render
161
+ * @property {string} [label] field label text or locale string
162
+ * @property {string} [placeholder] field placeholder text or locale string
163
+ * @property {boolean} [readonly] if component readonly or not
164
+ */
165
+
166
+ /**
167
+ * @typedef {object} notField
168
+ * @property {notFieldUI} [ui]
169
+ * @property {notFieldModel} [model]
170
+ */
171
+
135
172
  module.exports = {};