@webda/core 4.0.0-beta.3 → 4.0.0-beta.5

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.
Files changed (158) hide show
  1. package/lib/application/application.d.ts +31 -0
  2. package/lib/application/application.d.ts.map +1 -1
  3. package/lib/application/application.js +55 -2
  4. package/lib/application/application.js.map +1 -1
  5. package/lib/application/deployment.d.ts +93 -0
  6. package/lib/application/deployment.d.ts.map +1 -0
  7. package/lib/application/deployment.js +99 -0
  8. package/lib/application/deployment.js.map +1 -0
  9. package/lib/application/unpackedapplication.d.ts.map +1 -1
  10. package/lib/application/unpackedapplication.js +9 -1
  11. package/lib/application/unpackedapplication.js.map +1 -1
  12. package/lib/bin/cli.d.ts +36 -1
  13. package/lib/bin/cli.d.ts.map +1 -1
  14. package/lib/bin/cli.js +108 -2
  15. package/lib/bin/cli.js.map +1 -1
  16. package/lib/contexts/execution.js +1 -1
  17. package/lib/contexts/execution.js.map +1 -1
  18. package/lib/contexts/operationcontext.d.ts +3 -0
  19. package/lib/contexts/operationcontext.d.ts.map +1 -1
  20. package/lib/contexts/operationcontext.js +6 -3
  21. package/lib/contexts/operationcontext.js.map +1 -1
  22. package/lib/core/core.js +1 -1
  23. package/lib/core/core.js.map +1 -1
  24. package/lib/core/hooks.d.ts +22 -0
  25. package/lib/core/hooks.d.ts.map +1 -1
  26. package/lib/core/hooks.js +24 -0
  27. package/lib/core/hooks.js.map +1 -1
  28. package/lib/core/operations.d.ts.map +1 -1
  29. package/lib/core/operations.js +13 -11
  30. package/lib/core/operations.js.map +1 -1
  31. package/lib/deployers/deployer.d.ts +157 -0
  32. package/lib/deployers/deployer.d.ts.map +1 -0
  33. package/lib/deployers/deployer.js +81 -0
  34. package/lib/deployers/deployer.js.map +1 -0
  35. package/lib/deployers/git.d.ts +27 -0
  36. package/lib/deployers/git.d.ts.map +1 -0
  37. package/lib/deployers/git.js +66 -0
  38. package/lib/deployers/git.js.map +1 -0
  39. package/lib/deployers/packager.d.ts +85 -0
  40. package/lib/deployers/packager.d.ts.map +1 -0
  41. package/lib/deployers/packager.js +259 -0
  42. package/lib/deployers/packager.js.map +1 -0
  43. package/lib/index.d.ts +10 -4
  44. package/lib/index.d.ts.map +1 -1
  45. package/lib/index.js +10 -4
  46. package/lib/index.js.map +1 -1
  47. package/lib/models/aclmodel.d.ts +32 -5
  48. package/lib/models/aclmodel.d.ts.map +1 -1
  49. package/lib/models/aclmodel.js +34 -9
  50. package/lib/models/aclmodel.js.map +1 -1
  51. package/lib/models/coremodel.model.d.ts.map +1 -1
  52. package/lib/models/coremodel.model.js.map +1 -1
  53. package/lib/models/decorator.d.ts +4 -0
  54. package/lib/models/decorator.d.ts.map +1 -1
  55. package/lib/models/decorator.js +4 -0
  56. package/lib/models/decorator.js.map +1 -1
  57. package/lib/models/deployment.d.ts +2 -21
  58. package/lib/models/deployment.d.ts.map +1 -1
  59. package/lib/models/encrypted.model.d.ts +46 -0
  60. package/lib/models/encrypted.model.d.ts.map +1 -0
  61. package/lib/models/encrypted.model.js +87 -0
  62. package/lib/models/encrypted.model.js.map +1 -0
  63. package/lib/models/ident.model.d.ts +103 -64
  64. package/lib/models/ident.model.d.ts.map +1 -1
  65. package/lib/models/ident.model.js +168 -76
  66. package/lib/models/ident.model.js.map +1 -1
  67. package/lib/models/ownermodel.model.d.ts +25 -3
  68. package/lib/models/ownermodel.model.d.ts.map +1 -1
  69. package/lib/models/ownermodel.model.js +46 -10
  70. package/lib/models/ownermodel.model.js.map +1 -1
  71. package/lib/models/password.model.d.ts +78 -0
  72. package/lib/models/password.model.d.ts.map +1 -0
  73. package/lib/models/password.model.js +171 -0
  74. package/lib/models/password.model.js.map +1 -0
  75. package/lib/models/permissions.d.ts +236 -0
  76. package/lib/models/permissions.d.ts.map +1 -0
  77. package/lib/models/permissions.js +495 -0
  78. package/lib/models/permissions.js.map +1 -0
  79. package/lib/models/refreshtoken.model.d.ts +30 -0
  80. package/lib/models/refreshtoken.model.d.ts.map +1 -0
  81. package/lib/models/refreshtoken.model.js +29 -0
  82. package/lib/models/refreshtoken.model.js.map +1 -0
  83. package/lib/models/registry.model.d.ts.map +1 -1
  84. package/lib/models/registry.model.js.map +1 -1
  85. package/lib/models/rolemodel.model.d.ts.map +1 -1
  86. package/lib/models/rolemodel.model.js +1 -2
  87. package/lib/models/rolemodel.model.js.map +1 -1
  88. package/lib/models/simpleuser.model.d.ts.map +1 -1
  89. package/lib/models/simpleuser.model.js +2 -1
  90. package/lib/models/simpleuser.model.js.map +1 -1
  91. package/lib/models/user.model.d.ts +33 -21
  92. package/lib/models/user.model.d.ts.map +1 -1
  93. package/lib/models/user.model.js +81 -26
  94. package/lib/models/user.model.js.map +1 -1
  95. package/lib/rest/restoperationstransport.service.d.ts.map +1 -1
  96. package/lib/rest/restoperationstransport.service.js +7 -5
  97. package/lib/rest/restoperationstransport.service.js.map +1 -1
  98. package/lib/services/audit.model.d.ts +2 -2
  99. package/lib/services/audit.model.d.ts.map +1 -1
  100. package/lib/services/audit.model.js +16 -6
  101. package/lib/services/audit.model.js.map +1 -1
  102. package/lib/services/binary.service.d.ts +42 -4
  103. package/lib/services/binary.service.d.ts.map +1 -1
  104. package/lib/services/binary.service.js +33 -13
  105. package/lib/services/binary.service.js.map +1 -1
  106. package/lib/services/domainservice.service.d.ts +111 -1
  107. package/lib/services/domainservice.service.d.ts.map +1 -1
  108. package/lib/services/domainservice.service.js +303 -50
  109. package/lib/services/domainservice.service.js.map +1 -1
  110. package/lib/services/iauthentication.d.ts +196 -3
  111. package/lib/services/iauthentication.d.ts.map +1 -1
  112. package/lib/services/servicecommands.d.ts.map +1 -1
  113. package/lib/services/servicecommands.js +17 -11
  114. package/lib/services/servicecommands.js.map +1 -1
  115. package/lib/services/token.service.d.ts +95 -0
  116. package/lib/services/token.service.d.ts.map +1 -0
  117. package/lib/services/token.service.js +182 -0
  118. package/lib/services/token.service.js.map +1 -0
  119. package/lib/session/manager.model.d.ts +16 -0
  120. package/lib/session/manager.model.d.ts.map +1 -1
  121. package/lib/session/manager.model.js +58 -1
  122. package/lib/session/manager.model.js.map +1 -1
  123. package/lib/session/session.d.ts +44 -1
  124. package/lib/session/session.d.ts.map +1 -1
  125. package/lib/session/session.js +51 -2
  126. package/lib/session/session.js.map +1 -1
  127. package/lib/stores/memory.service.d.ts.map +1 -1
  128. package/lib/stores/memory.service.js +4 -3
  129. package/lib/stores/memory.service.js.map +1 -1
  130. package/lib/templates/templates.d.ts +8 -0
  131. package/lib/templates/templates.d.ts.map +1 -1
  132. package/lib/templates/templates.js +10 -1
  133. package/lib/templates/templates.js.map +1 -1
  134. package/lib/test/behavior-fixture.model.d.ts +30 -0
  135. package/lib/test/behavior-fixture.model.d.ts.map +1 -0
  136. package/lib/test/behavior-fixture.model.js +63 -0
  137. package/lib/test/behavior-fixture.model.js.map +1 -0
  138. package/lib/test/legacyident.fixture.model.d.ts +98 -0
  139. package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
  140. package/lib/test/legacyident.fixture.model.js +125 -0
  141. package/lib/test/legacyident.fixture.model.js.map +1 -0
  142. package/lib/test/objects.d.ts +2 -2
  143. package/lib/test/objects.d.ts.map +1 -1
  144. package/lib/test/objects.js +2 -2
  145. package/lib/test/objects.js.map +1 -1
  146. package/package.json +32 -11
  147. package/test/config-cached.json +2 -1
  148. package/test/config.json +3 -1
  149. package/test/my-cnf.json +1 -1
  150. package/webda.module.json +656 -390
  151. package/lib/services/authentication.service.d.ts +0 -442
  152. package/lib/services/authentication.service.d.ts.map +0 -1
  153. package/lib/services/authentication.service.js +0 -932
  154. package/lib/services/authentication.service.js.map +0 -1
  155. package/lib/services/oauth.d.ts +0 -250
  156. package/lib/services/oauth.d.ts.map +0 -1
  157. package/lib/services/oauth.js +0 -405
  158. package/lib/services/oauth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ident.model.js","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,wDAAwD;AACxD,MAAM,OAAO,WAAW;IACtB,OAAO,CAAS;IAChB,MAAM,CAAS;CAChB;AAED;;;;GAIG;AACH,MAAM,OAAO,KAAM,SAAQ,UAAU;IACnC;;OAEG;IACH,YAAY,IAAsB;QAChC,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IACD;;OAEG;IACH,KAAK,CAAS;IACd;;OAEG;IACH,GAAG,CAAS;IACZ;;OAEG;IACH,SAAS,CAAM;IACf;;OAEG;IACH,QAAQ,CAAc;IACtB;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;IACvD,CAAC;IACD,IAAI,SAAS,CAAC,KAA6B;QACzC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAA+B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/H,CAAC;IACD;;OAEG;IACH,YAAY,GAAW,CAAC,CAAC;IACzB;;OAEG;IACH,oBAAoB,GAAY,CAAC,CAAC;IAClC;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,WAAW,CAAC,KAA6B;QAC3C,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAA+B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjI,CAAC;IACD;;OAEG;IACH,KAAK,CAAU;IACf;;OAEG;IACH,QAAQ,CAAU;IAElB;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI;QACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAmB;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,gFAAgF;IAChF,MAAM;QACJ,MAAM,MAAM,GAAS,KAAK,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAG,IAAY,CAAC,aAAa,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"ident.model.js","sourceRoot":"","sources":["../../src/models/ident.model.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ import { IOperationContext } from "../contexts/icontext.js";
4
4
  /**
5
5
  * Abstract class to define an object with an owner
6
6
  *
7
- * The owner is the user that created the object
8
- * The owner can be changed by the owner
7
+ * The owner is the user that created the object, set from the caller on create.
8
+ * The owner is never taken from client input.
9
9
  */
10
10
  export declare abstract class AbstractOwnerModel<T extends User> extends UuidModel {
11
11
  /**
@@ -23,6 +23,17 @@ export declare abstract class AbstractOwnerModel<T extends User> extends UuidMod
23
23
  * @returns
24
24
  */
25
25
  abstract getOwnerModel(): ModelClass<T>;
26
+ /**
27
+ * Attributes never taken from client input by the DomainService (REST, gRPC, MCP) or GraphQL
28
+ * @returns the attribute names
29
+ */
30
+ static getProtectedAttributes(): string[];
31
+ /**
32
+ * Called by the DomainService (and GraphQL) on a new object built from client input, before the
33
+ * `canAct(context, "create")` check and the save: the caller becomes the owner
34
+ * @param context - the caller context
35
+ */
36
+ prepareCreate(context: IOperationContext): void;
26
37
  /**
27
38
  * Set object owner
28
39
  * @param uuid - the unique identifier
@@ -43,7 +54,18 @@ export declare abstract class AbstractOwnerModel<T extends User> extends UuidMod
43
54
  */
44
55
  canAct(context: IOperationContext, action: string): Promise<string | boolean>;
45
56
  /**
46
- * Return a query to filter OwnerModel
57
+ * Whether an action is a binary read (a behavior action of Binary/Binaries): `avatar.download`, `photos.get`...
58
+ * @param action - the action name
59
+ * @returns true for the read actions of binary attributes
60
+ */
61
+ static isBinaryRead(action: string): boolean;
62
+ /**
63
+ * Return a query to filter OwnerModel: the objects of the caller and the public ones
64
+ *
65
+ * The user id is bound as an escaped WebdaQL value, it can never change the query structure.
66
+ *
67
+ * Subclasses inherit this filter even when they override `canAct` (it fails closed: it can only hide rows). A
68
+ * subclass whose `canAct` is more permissive overrides this method (returning `null` disables the store filter).
47
69
  *
48
70
  * @param context - the execution context
49
71
  * @returns the result
@@ -1 +1 @@
1
- {"version":3,"file":"ownermodel.model.d.ts","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;GAKG;AACH,8BAAsB,kBAAkB,CAAC,CAAC,SAAS,IAAI,CAAE,SAAQ,SAAS;IACxE;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAExB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAU7D;IACD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAExC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAGtC;IAED;;;;;OAKG;IACH,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAEvB;IAED;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAalF;IAED;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAQjG;IAED,gFAAgF;IAChF,MAAM,IAAI,GAAG,CAOZ;CACF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,kBAAkB,CAAC,IAAI,CAAC;IACtD;;;OAGG;IACH,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,CAEhC;CACF"}
1
+ {"version":3,"file":"ownermodel.model.d.ts","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;;;;GAKG;AACH,8BAAsB,kBAAkB,CAAC,CAAC,SAAS,IAAI,CAAE,SAAQ,SAAS;IACxE;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAExB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAU7D;IACD;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAExC;;;OAGG;IACH,MAAM,CAAC,sBAAsB,IAAI,MAAM,EAAE,CAExC;IAED;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAQ9C;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAGtC;IAED;;;;;OAKG;IACH,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAEvB;IAED;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAWlF;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3C;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CASjG;IAED,gFAAgF;IAChF,MAAM,IAAI,GAAG,CAQZ;CACF;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,kBAAkB,CAAC,IAAI,CAAC;IACtD;;;OAGG;IACH,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,CAEhC;CACF"}
@@ -2,11 +2,12 @@ import { WEBDA_STORAGE } from "@webda/models";
2
2
  //import { UuidModel } from "./uuid.js";
3
3
  import { ModelLink, UuidModel } from "@webda/models";
4
4
  import { User } from "./user.model.js";
5
+ import { bind } from "@webda/ql";
5
6
  /**
6
7
  * Abstract class to define an object with an owner
7
8
  *
8
- * The owner is the user that created the object
9
- * The owner can be changed by the owner
9
+ * The owner is the user that created the object, set from the caller on create.
10
+ * The owner is never taken from client input.
10
11
  */
11
12
  export class AbstractOwnerModel extends UuidModel {
12
13
  /**
@@ -33,6 +34,28 @@ export class AbstractOwnerModel extends UuidModel {
33
34
  * @default false
34
35
  */
35
36
  public;
37
+ /**
38
+ * Attributes never taken from client input by the DomainService (REST, gRPC, MCP) or GraphQL
39
+ * @returns the attribute names
40
+ */
41
+ static getProtectedAttributes() {
42
+ return ["_user"];
43
+ }
44
+ /**
45
+ * Called by the DomainService (and GraphQL) on a new object built from client input, before the
46
+ * `canAct(context, "create")` check and the save: the caller becomes the owner
47
+ * @param context - the caller context
48
+ */
49
+ prepareCreate(context) {
50
+ const userId = context?.getCurrentUserId();
51
+ if (userId) {
52
+ this.setOwner(userId);
53
+ }
54
+ else {
55
+ // Never keep an owner the caller did not prove
56
+ this._user = undefined;
57
+ }
58
+ }
36
59
  /**
37
60
  * Set object owner
38
61
  * @param uuid - the unique identifier
@@ -57,8 +80,8 @@ export class AbstractOwnerModel extends UuidModel {
57
80
  * @returns the result
58
81
  */
59
82
  async canAct(context, action) {
60
- // Object is public
61
- if (this.public && (action === "get" || action === "get_binary")) {
83
+ // Object is public: readable, binaries included (`<attribute>.download`, `.downloadUrl`, `.get`, `.getUrl`)
84
+ if (this.public && (action === "get" || AbstractOwnerModel.isBinaryRead(action))) {
62
85
  return true;
63
86
  }
64
87
  else if (!context.getCurrentUserId()) {
@@ -67,13 +90,24 @@ export class AbstractOwnerModel extends UuidModel {
67
90
  else if (!this.getOwner() && action !== "create") {
68
91
  return "Object does not have an owner";
69
92
  }
70
- if (action === "create") {
71
- //this.setOwner(Uuid.parse(ctx.getCurrentUserId(), this.getOwnerModel()));
72
- }
93
+ // On create, the owner was set from the caller by prepareCreate: only the owner may create its objects
73
94
  return context.getCurrentUserId() === this.getOwner()?.toString();
74
95
  }
75
96
  /**
76
- * Return a query to filter OwnerModel
97
+ * Whether an action is a binary read (a behavior action of Binary/Binaries): `avatar.download`, `photos.get`...
98
+ * @param action - the action name
99
+ * @returns true for the read actions of binary attributes
100
+ */
101
+ static isBinaryRead(action) {
102
+ return /^[^.]+\.(download|downloadUrl|get|getUrl)$/.test(action);
103
+ }
104
+ /**
105
+ * Return a query to filter OwnerModel: the objects of the caller and the public ones
106
+ *
107
+ * The user id is bound as an escaped WebdaQL value, it can never change the query structure.
108
+ *
109
+ * Subclasses inherit this filter even when they override `canAct` (it fails closed: it can only hide rows). A
110
+ * subclass whose `canAct` is more permissive overrides this method (returning `null` disables the store filter).
77
111
  *
78
112
  * @param context - the execution context
79
113
  * @returns the result
@@ -82,14 +116,16 @@ export class AbstractOwnerModel extends UuidModel {
82
116
  if (!context) {
83
117
  return null;
84
118
  }
119
+ const userId = context.getCurrentUserId();
85
120
  return {
86
- query: `_user = '${context.getCurrentUserId()}' OR public = TRUE`,
121
+ query: userId ? bind("_user = ? OR public = TRUE", [userId]) : "public = TRUE",
87
122
  partial: false
88
123
  };
89
124
  }
90
125
  /** Generated by @webda/content-mapper: include values held in WEBDA_STORAGE. */
91
126
  toJSON() {
92
- const result = super.toJSON ? super.toJSON() : {};
127
+ const parent = super.toJSON ? super.toJSON() : {};
128
+ const result = parent === this ? {} : parent;
93
129
  for (const key of Object.keys(this)) {
94
130
  result[key] = this[key];
95
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ownermodel.model.js","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ownermodel.model.js","sourceRoot":"","sources":["../../src/models/ownermodel.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,wCAAwC;AACxC,OAAO,EAAmB,SAAS,EAAuB,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,OAAgB,kBAAmC,SAAQ,SAAS;IACxE;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,KAAoD;QAC5D,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAiB,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/E,IAAI,CAAC,GAAG,CAAC,KAAY,CAAC,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;IACH,CAAC;IACD;;;OAGG;IACH,MAAM,CAAW;IAQjB;;;OAGG;IACH,MAAM,CAAC,sBAAsB;QAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,OAA0B;QACtC,MAAM,MAAM,GAAG,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,MAAa,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAuB;QAC9B,IAAI,CAAC,KAAK,KAAK,IAAI,SAAS,CAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,OAA0B,EAAE,MAAc;QACrD,4GAA4G;QAC5G,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACvC,OAAO,gDAAgD,CAAC;QAC1D,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,+BAA+B,CAAC;QACzC,CAAC;QACD,uGAAuG;QACvG,OAAO,OAAO,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAc;QAChC,OAAO,4CAA4C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAA2B;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC1C,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;YAC9E,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,MAAM;QACJ,MAAM,MAAM,GAAS,KAAK,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAQ,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAG,IAAY,CAAC,aAAa,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,kBAAwB;IACtD;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,78 @@
1
+ import { WEBDA_STORAGE } from "@webda/models";
2
+ import * as WebdaError from "../errors/errors.js";
3
+ import type { User } from "./user.model.js";
4
+ /** Rule a candidate password must satisfy */
5
+ export interface PasswordPolicy {
6
+ /**
7
+ * @param password - candidate password
8
+ * @param user - user setting it, when known
9
+ * @returns true when acceptable
10
+ */
11
+ validate(password: string, user?: User): Promise<boolean>;
12
+ }
13
+ /**
14
+ * Replace the active password policy (undefined restores the default `.{8,}`)
15
+ * @param policy - the policy
16
+ */
17
+ export declare function registerPasswordPolicy(policy: PasswordPolicy | undefined): void;
18
+ /**
19
+ * Get the active password policy
20
+ * @returns the policy
21
+ */
22
+ export declare function usePasswordPolicy(): PasswordPolicy;
23
+ /** Raised when a password does not satisfy the active policy (400 PASSWORD_POLICY) */
24
+ export declare class PasswordPolicyError extends WebdaError.HttpError {
25
+ /** @param message - error message */
26
+ constructor(message?: string);
27
+ }
28
+ /**
29
+ * Non-enumerable flag set on a User whose data carried a v3 top-level `__password` mapped onto `password` at
30
+ * hydration: its stored record still has the v3 layout until it is saved again (`webda auth migrate`)
31
+ */
32
+ export declare const V3_PASSWORD_MAPPED: unique symbol;
33
+ /**
34
+ * Password credential of a user: bcrypt hash and change timestamp
35
+ * @WebdaBehavior Webda/Password
36
+ */
37
+ export declare class Password {
38
+ [WEBDA_STORAGE]: Record<string, any>;
39
+ /** bcrypt hash, never output */
40
+ __hash?: string;
41
+ /** Last change, ms since epoch */
42
+ changedAt?: number;
43
+ /**
44
+ * Owning user (set by behavior hydration)
45
+ * @returns the user or undefined when detached
46
+ */
47
+ protected getUser(): User | undefined;
48
+ /**
49
+ * @returns true when a password is set
50
+ */
51
+ hasPassword(): boolean;
52
+ /**
53
+ * Compare a candidate with the stored hash
54
+ * @param plain - candidate password
55
+ * @returns true when it matches
56
+ */
57
+ verify(plain: string): Promise<boolean>;
58
+ /**
59
+ * Validate against the policy and store a new hash (does not save the user)
60
+ * @param plain - new password
61
+ */
62
+ set(plain: string): Promise<void>;
63
+ /**
64
+ * Store an existing hash (migration)
65
+ * @param hash - bcrypt hash
66
+ * @param changedAt - change timestamp
67
+ */
68
+ setHash(hash: string, changedAt?: number): void;
69
+ /**
70
+ * Change the password of the owning user
71
+ * @param current - current password
72
+ * @param next - new password
73
+ */
74
+ change(current: string, next: string): Promise<void>;
75
+ get parent(): any;
76
+ toJSON(): Record<string, any>;
77
+ }
78
+ //# sourceMappingURL=password.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.model.d.ts","sourceRoot":"","sources":["../../src/models/password.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAGlD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAKD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CAE/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAED,sFAAsF;AACtF,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,SAAS;IAC3D,qCAAqC;IACrC,YAAY,OAAO,GAAE,MAA6C,EAGjE;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,eAA6B,CAAC;AAE7D;;;GAGG;AACH,qBAAa,QAAQ;IACnB,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAC1C,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI,GAAG,SAAS,CAEpC;IAED;;OAEG;IACH,WAAW,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5C;IAED;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtC;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAmB,GAAG,IAAI,CAG1D;IAED;;;;OAIG;IAEG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzD;IACD,IAAI,MAAM,QAAgD;IAC1D,MAAM,wBAcL;CACF"}
@@ -0,0 +1,171 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ import { WEBDA_STORAGE } from "@webda/models";
36
+ import bcrypt from "bcryptjs";
37
+ import * as WebdaError from "../errors/errors.js";
38
+ import { Action } from "./decorator.js";
39
+ import { useDynamicService } from "../core/hooks.js";
40
+ const DEFAULT_POLICY = { validate: async (p) => /.{8,}/.test(p) };
41
+ let currentPolicy = DEFAULT_POLICY;
42
+ /**
43
+ * Replace the active password policy (undefined restores the default `.{8,}`)
44
+ * @param policy - the policy
45
+ */
46
+ export function registerPasswordPolicy(policy) {
47
+ currentPolicy = policy ?? DEFAULT_POLICY;
48
+ }
49
+ /**
50
+ * Get the active password policy
51
+ * @returns the policy
52
+ */
53
+ export function usePasswordPolicy() {
54
+ return currentPolicy;
55
+ }
56
+ /** Raised when a password does not satisfy the active policy (400 PASSWORD_POLICY) */
57
+ export class PasswordPolicyError extends WebdaError.HttpError {
58
+ /** @param message - error message */
59
+ constructor(message = "Password does not match the policy") {
60
+ super(message, 400);
61
+ this.code = "PASSWORD_POLICY";
62
+ }
63
+ }
64
+ /**
65
+ * Non-enumerable flag set on a User whose data carried a v3 top-level `__password` mapped onto `password` at
66
+ * hydration: its stored record still has the v3 layout until it is saved again (`webda auth migrate`)
67
+ */
68
+ export const V3_PASSWORD_MAPPED = Symbol("v3PasswordMapped");
69
+ /**
70
+ * Password credential of a user: bcrypt hash and change timestamp
71
+ * @WebdaBehavior Webda/Password
72
+ */
73
+ let Password = (() => {
74
+ let _instanceExtraInitializers = [];
75
+ let _change_decorators;
76
+ return class Password {
77
+ static {
78
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
79
+ _change_decorators = [Action({ rest: { method: "PUT" } })];
80
+ __esDecorate(this, null, _change_decorators, { kind: "method", name: "change", static: false, private: false, access: { has: obj => "change" in obj, get: obj => obj.change }, metadata: _metadata }, null, _instanceExtraInitializers);
81
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
82
+ }
83
+ [WEBDA_STORAGE] = (__runInitializers(this, _instanceExtraInitializers), {});
84
+ /** bcrypt hash, never output */
85
+ __hash;
86
+ /** Last change, ms since epoch */
87
+ changedAt;
88
+ /**
89
+ * Owning user (set by behavior hydration)
90
+ * @returns the user or undefined when detached
91
+ */
92
+ getUser() {
93
+ return this.parent?.instance;
94
+ }
95
+ /**
96
+ * @returns true when a password is set
97
+ */
98
+ hasPassword() {
99
+ return typeof this.__hash === "string" && this.__hash.length > 0;
100
+ }
101
+ /**
102
+ * Compare a candidate with the stored hash
103
+ * @param plain - candidate password
104
+ * @returns true when it matches
105
+ */
106
+ async verify(plain) {
107
+ if (!this.hasPassword() || typeof plain !== "string") {
108
+ return false;
109
+ }
110
+ try {
111
+ return await bcrypt.compare(plain, this.__hash);
112
+ }
113
+ catch {
114
+ // Malformed stored hash
115
+ return false;
116
+ }
117
+ }
118
+ /**
119
+ * Validate against the policy and store a new hash (does not save the user)
120
+ * @param plain - new password
121
+ */
122
+ async set(plain) {
123
+ if (typeof plain !== "string" || !(await usePasswordPolicy().validate(plain, this.getUser()))) {
124
+ throw new PasswordPolicyError();
125
+ }
126
+ this.__hash = await bcrypt.hash(plain, 10);
127
+ this.changedAt = Date.now();
128
+ }
129
+ /**
130
+ * Store an existing hash (migration)
131
+ * @param hash - bcrypt hash
132
+ * @param changedAt - change timestamp
133
+ */
134
+ setHash(hash, changedAt = Date.now()) {
135
+ this.__hash = hash;
136
+ this.changedAt = changedAt;
137
+ }
138
+ /**
139
+ * Change the password of the owning user
140
+ * @param current - current password
141
+ * @param next - new password
142
+ */
143
+ async change(current, next) {
144
+ if (!(await this.verify(current))) {
145
+ throw new WebdaError.Forbidden("Invalid password");
146
+ }
147
+ await this.set(next);
148
+ const user = this.getUser();
149
+ await user?.save();
150
+ await useDynamicService("TokenService")?.revokeUser?.(user?.getUUID());
151
+ }
152
+ get parent() { return this[WEBDA_STORAGE]["__parent__"]; }
153
+ toJSON() {
154
+ const result = {};
155
+ for (const key of Object.keys(this)) {
156
+ result[key] = this[key];
157
+ }
158
+ const storage = this[WEBDA_STORAGE];
159
+ if (storage) {
160
+ for (const key of Object.keys(storage)) {
161
+ if (key !== "__parent__") {
162
+ result[key] = storage[key];
163
+ }
164
+ }
165
+ }
166
+ return result;
167
+ }
168
+ };
169
+ })();
170
+ export { Password };
171
+ //# sourceMappingURL=password.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.model.js","sourceRoot":"","sources":["../../src/models/password.model.ts"],"names":[],"mappings":"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"}