@things-factory/auth-base 6.2.170 → 6.2.178

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 (197) hide show
  1. package/dist-client/auth.js.map +1 -1
  2. package/dist-client/directive/privileged.d.ts +4 -4
  3. package/dist-client/directive/privileged.js.map +1 -1
  4. package/dist-client/profiled.js.map +1 -1
  5. package/dist-client/reducers/auth.js.map +1 -1
  6. package/dist-client/tsconfig.tsbuildinfo +1 -1
  7. package/dist-server/controllers/change-pwd.js +1 -2
  8. package/dist-server/controllers/change-pwd.js.map +1 -1
  9. package/dist-server/controllers/checkin.js +1 -2
  10. package/dist-server/controllers/checkin.js.map +1 -1
  11. package/dist-server/controllers/delete-user.js +2 -3
  12. package/dist-server/controllers/delete-user.js.map +1 -1
  13. package/dist-server/controllers/invitation.js +7 -7
  14. package/dist-server/controllers/invitation.js.map +1 -1
  15. package/dist-server/controllers/profile.js +1 -2
  16. package/dist-server/controllers/profile.js.map +1 -1
  17. package/dist-server/controllers/reset-password.js +5 -5
  18. package/dist-server/controllers/reset-password.js.map +1 -1
  19. package/dist-server/controllers/signin.js +1 -2
  20. package/dist-server/controllers/signin.js.map +1 -1
  21. package/dist-server/controllers/signup.js +1 -2
  22. package/dist-server/controllers/signup.js.map +1 -1
  23. package/dist-server/controllers/unlock-user.js +5 -5
  24. package/dist-server/controllers/unlock-user.js.map +1 -1
  25. package/dist-server/controllers/utils/make-invitation-token.js +1 -2
  26. package/dist-server/controllers/utils/make-invitation-token.js.map +1 -1
  27. package/dist-server/controllers/utils/make-verification-token.js +1 -2
  28. package/dist-server/controllers/utils/make-verification-token.js.map +1 -1
  29. package/dist-server/controllers/utils/password-rule.js +10 -10
  30. package/dist-server/controllers/utils/password-rule.js.map +1 -1
  31. package/dist-server/controllers/utils/save-invitation-token.js +1 -2
  32. package/dist-server/controllers/utils/save-invitation-token.js.map +1 -1
  33. package/dist-server/controllers/utils/save-verification-token.js +1 -2
  34. package/dist-server/controllers/utils/save-verification-token.js.map +1 -1
  35. package/dist-server/controllers/verification.js +6 -6
  36. package/dist-server/controllers/verification.js.map +1 -1
  37. package/dist-server/index.js.map +1 -1
  38. package/dist-server/middlewares/authenticate-401-middleware.js +1 -2
  39. package/dist-server/middlewares/authenticate-401-middleware.js.map +1 -1
  40. package/dist-server/middlewares/domain-authenticate-middleware.js +1 -2
  41. package/dist-server/middlewares/domain-authenticate-middleware.js.map +1 -1
  42. package/dist-server/middlewares/graphql-authenticate-middleware.js +1 -2
  43. package/dist-server/middlewares/graphql-authenticate-middleware.js.map +1 -1
  44. package/dist-server/middlewares/index.js +1 -2
  45. package/dist-server/middlewares/index.js.map +1 -1
  46. package/dist-server/middlewares/jwt-authenticate-middleware.js +1 -2
  47. package/dist-server/middlewares/jwt-authenticate-middleware.js.map +1 -1
  48. package/dist-server/middlewares/signin-middleware.js +1 -2
  49. package/dist-server/middlewares/signin-middleware.js.map +1 -1
  50. package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
  51. package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +1 -1
  52. package/dist-server/router/auth-checkin-router.js.map +1 -1
  53. package/dist-server/router/auth-private-process-router.js.map +1 -1
  54. package/dist-server/router/auth-public-process-router.js.map +1 -1
  55. package/dist-server/router/auth-signin-router.js.map +1 -1
  56. package/dist-server/router/auth-signup-router.js.map +1 -1
  57. package/dist-server/router/oauth2/oauth2-authorize-router.js.map +1 -1
  58. package/dist-server/router/oauth2/oauth2-router.js.map +1 -1
  59. package/dist-server/router/oauth2/oauth2-server.js.map +1 -1
  60. package/dist-server/router/oauth2/passport-oauth2-client-password.js +1 -2
  61. package/dist-server/router/oauth2/passport-oauth2-client-password.js.map +1 -1
  62. package/dist-server/router/oauth2/passport-refresh-token.js +1 -2
  63. package/dist-server/router/oauth2/passport-refresh-token.js.map +1 -1
  64. package/dist-server/router/site-root-router.js.map +1 -1
  65. package/dist-server/routes.js.map +1 -1
  66. package/dist-server/service/app-binding/app-binding-mutation.js +2 -2
  67. package/dist-server/service/app-binding/app-binding-mutation.js.map +1 -1
  68. package/dist-server/service/app-binding/app-binding-query.js +2 -2
  69. package/dist-server/service/app-binding/app-binding-query.js.map +1 -1
  70. package/dist-server/service/app-binding/app-binding-types.js +2 -2
  71. package/dist-server/service/app-binding/app-binding-types.js.map +1 -1
  72. package/dist-server/service/app-binding/app-binding.js +2 -2
  73. package/dist-server/service/app-binding/app-binding.js.map +1 -1
  74. package/dist-server/service/appliance/appliance-mutation.js +2 -2
  75. package/dist-server/service/appliance/appliance-mutation.js.map +1 -1
  76. package/dist-server/service/appliance/appliance-query.js +2 -2
  77. package/dist-server/service/appliance/appliance-query.js.map +1 -1
  78. package/dist-server/service/appliance/appliance-types.js +6 -6
  79. package/dist-server/service/appliance/appliance-types.js.map +1 -1
  80. package/dist-server/service/appliance/appliance.js +2 -2
  81. package/dist-server/service/appliance/appliance.js.map +1 -1
  82. package/dist-server/service/application/application-mutation.js +2 -2
  83. package/dist-server/service/application/application-mutation.js.map +1 -1
  84. package/dist-server/service/application/application-query.js +2 -2
  85. package/dist-server/service/application/application-query.js.map +1 -1
  86. package/dist-server/service/application/application-types.js +8 -8
  87. package/dist-server/service/application/application-types.js.map +1 -1
  88. package/dist-server/service/application/application.js +4 -4
  89. package/dist-server/service/application/application.js.map +1 -1
  90. package/dist-server/service/auth-provider/auth-provider-mutation.js +2 -2
  91. package/dist-server/service/auth-provider/auth-provider-mutation.js.map +1 -1
  92. package/dist-server/service/auth-provider/auth-provider-parameter-spec.js +2 -2
  93. package/dist-server/service/auth-provider/auth-provider-parameter-spec.js.map +1 -1
  94. package/dist-server/service/auth-provider/auth-provider-query.js +2 -2
  95. package/dist-server/service/auth-provider/auth-provider-query.js.map +1 -1
  96. package/dist-server/service/auth-provider/auth-provider-type.js +6 -6
  97. package/dist-server/service/auth-provider/auth-provider-type.js.map +1 -1
  98. package/dist-server/service/auth-provider/auth-provider.js +7 -7
  99. package/dist-server/service/auth-provider/auth-provider.js.map +1 -1
  100. package/dist-server/service/domain-generator/domain-generator-mutation.js +2 -2
  101. package/dist-server/service/domain-generator/domain-generator-mutation.js.map +1 -1
  102. package/dist-server/service/domain-generator/domain-generator-types.js +6 -6
  103. package/dist-server/service/domain-generator/domain-generator-types.js.map +1 -1
  104. package/dist-server/service/granted-role/granted-role-mutation.js +6 -6
  105. package/dist-server/service/granted-role/granted-role-mutation.js.map +1 -1
  106. package/dist-server/service/granted-role/granted-role-query.js +2 -2
  107. package/dist-server/service/granted-role/granted-role-query.js.map +1 -1
  108. package/dist-server/service/granted-role/granted-role.js +2 -2
  109. package/dist-server/service/granted-role/granted-role.js.map +1 -1
  110. package/dist-server/service/invitation/invitation-mutation.js +2 -2
  111. package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
  112. package/dist-server/service/invitation/invitation-query.js +2 -2
  113. package/dist-server/service/invitation/invitation-query.js.map +1 -1
  114. package/dist-server/service/invitation/invitation-types.js +2 -2
  115. package/dist-server/service/invitation/invitation-types.js.map +1 -1
  116. package/dist-server/service/invitation/invitation.js +2 -2
  117. package/dist-server/service/invitation/invitation.js.map +1 -1
  118. package/dist-server/service/login-history/login-history-query.js +2 -2
  119. package/dist-server/service/login-history/login-history-query.js.map +1 -1
  120. package/dist-server/service/login-history/login-history-type.js +2 -2
  121. package/dist-server/service/login-history/login-history-type.js.map +1 -1
  122. package/dist-server/service/login-history/login-history.js +2 -2
  123. package/dist-server/service/login-history/login-history.js.map +1 -1
  124. package/dist-server/service/partner/partner-mutation.js +2 -2
  125. package/dist-server/service/partner/partner-mutation.js.map +1 -1
  126. package/dist-server/service/partner/partner-query.js +2 -2
  127. package/dist-server/service/partner/partner-query.js.map +1 -1
  128. package/dist-server/service/partner/partner-types.js +2 -2
  129. package/dist-server/service/partner/partner-types.js.map +1 -1
  130. package/dist-server/service/partner/partner.js +2 -2
  131. package/dist-server/service/partner/partner.js.map +1 -1
  132. package/dist-server/service/password-history/password-history.js +2 -2
  133. package/dist-server/service/password-history/password-history.js.map +1 -1
  134. package/dist-server/service/privilege/privilege-directive.js.map +1 -1
  135. package/dist-server/service/privilege/privilege-mutation.js +2 -2
  136. package/dist-server/service/privilege/privilege-mutation.js.map +1 -1
  137. package/dist-server/service/privilege/privilege-query.js +2 -2
  138. package/dist-server/service/privilege/privilege-query.js.map +1 -1
  139. package/dist-server/service/privilege/privilege-types.js +8 -8
  140. package/dist-server/service/privilege/privilege-types.js.map +1 -1
  141. package/dist-server/service/privilege/privilege.js +6 -6
  142. package/dist-server/service/privilege/privilege.js.map +1 -1
  143. package/dist-server/service/role/role-mutation.js +2 -2
  144. package/dist-server/service/role/role-mutation.js.map +1 -1
  145. package/dist-server/service/role/role-query.js +2 -2
  146. package/dist-server/service/role/role-query.js.map +1 -1
  147. package/dist-server/service/role/role-types.js +10 -10
  148. package/dist-server/service/role/role-types.js.map +1 -1
  149. package/dist-server/service/role/role.js +2 -2
  150. package/dist-server/service/role/role.js.map +1 -1
  151. package/dist-server/service/user/domain-query.js +2 -2
  152. package/dist-server/service/user/domain-query.js.map +1 -1
  153. package/dist-server/service/user/user-mutation.js +35 -19
  154. package/dist-server/service/user/user-mutation.js.map +1 -1
  155. package/dist-server/service/user/user-query.js +2 -2
  156. package/dist-server/service/user/user-query.js.map +1 -1
  157. package/dist-server/service/user/user-types.js +6 -6
  158. package/dist-server/service/user/user-types.js.map +1 -1
  159. package/dist-server/service/user/user.js +5 -5
  160. package/dist-server/service/user/user.js.map +1 -1
  161. package/dist-server/service/users-auth-providers/users-auth-providers.js +2 -2
  162. package/dist-server/service/users-auth-providers/users-auth-providers.js.map +1 -1
  163. package/dist-server/service/verification-token/verification-token.js +3 -3
  164. package/dist-server/service/verification-token/verification-token.js.map +1 -1
  165. package/dist-server/templates/account-unlock-email.js +1 -2
  166. package/dist-server/templates/account-unlock-email.js.map +1 -1
  167. package/dist-server/templates/invitation-email.js +1 -2
  168. package/dist-server/templates/invitation-email.js.map +1 -1
  169. package/dist-server/templates/reset-password-email.js +1 -2
  170. package/dist-server/templates/reset-password-email.js.map +1 -1
  171. package/dist-server/templates/verification-email.js +1 -2
  172. package/dist-server/templates/verification-email.js.map +1 -1
  173. package/dist-server/tsconfig.tsbuildinfo +1 -1
  174. package/dist-server/utils/accepts.js +1 -2
  175. package/dist-server/utils/accepts.js.map +1 -1
  176. package/dist-server/utils/access-token-cookie.js +3 -4
  177. package/dist-server/utils/access-token-cookie.js.map +1 -1
  178. package/dist-server/utils/check-permission.js +1 -2
  179. package/dist-server/utils/check-permission.js.map +1 -1
  180. package/dist-server/utils/check-user-belongs-domain.js +1 -2
  181. package/dist-server/utils/check-user-belongs-domain.js.map +1 -1
  182. package/dist-server/utils/encrypt-state.js +2 -3
  183. package/dist-server/utils/encrypt-state.js.map +1 -1
  184. package/dist-server/utils/get-aes-256-key.js.map +1 -1
  185. package/dist-server/utils/get-domain-from-hostname.js +1 -2
  186. package/dist-server/utils/get-domain-from-hostname.js.map +1 -1
  187. package/dist-server/utils/get-domain-users.js +2 -3
  188. package/dist-server/utils/get-domain-users.js.map +1 -1
  189. package/dist-server/utils/get-secret.js.map +1 -1
  190. package/dist-server/utils/get-user-domains.js +4 -5
  191. package/dist-server/utils/get-user-domains.js.map +1 -1
  192. package/package.json +5 -5
  193. package/server/controllers/invitation.ts +2 -1
  194. package/server/controllers/reset-password.ts +2 -1
  195. package/server/controllers/unlock-user.ts +2 -1
  196. package/server/controllers/verification.ts +2 -1
  197. package/server/service/user/user-mutation.ts +44 -36
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.accepts = void 0;
3
+ exports.accepts = accepts;
4
4
  function accepts(header, accepts) {
5
5
  accepts = accepts || ['text/html', '*/*'];
6
6
  for (let i = 0; i < accepts.length; i++) {
@@ -10,5 +10,4 @@ function accepts(header, accepts) {
10
10
  }
11
11
  return false;
12
12
  }
13
- exports.accepts = accepts;
14
13
  //# sourceMappingURL=accepts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../server/utils/accepts.ts"],"names":[],"mappings":";;;AAAA,SAAgB,OAAO,CAAC,MAAW,EAAE,OAAQ;IAC3C,OAAO,GAAG,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7C,OAAO,IAAI,CAAA;SACZ;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAVD,0BAUC","sourcesContent":["export function accepts(header: any, accepts?) {\n accepts = accepts || ['text/html', '*/*']\n \n for (let i = 0; i < accepts.length; i++) {\n if ((header || '').indexOf(accepts[i]) !== -1) {\n return true\n }\n }\n\n return false\n}\n"]}
1
+ {"version":3,"file":"accepts.js","sourceRoot":"","sources":["../../server/utils/accepts.ts"],"names":[],"mappings":";;AAAA,0BAUC;AAVD,SAAgB,OAAO,CAAC,MAAW,EAAE,OAAQ;IAC3C,OAAO,GAAG,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["export function accepts(header: any, accepts?) {\n accepts = accepts || ['text/html', '*/*']\n \n for (let i = 0; i < accepts.length; i++) {\n if ((header || '').indexOf(accepts[i]) !== -1) {\n return true\n }\n }\n\n return false\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clearAccessTokenCookie = exports.setAccessTokenCookie = exports.getAccessTokenCookie = void 0;
3
+ exports.getAccessTokenCookie = getAccessTokenCookie;
4
+ exports.setAccessTokenCookie = setAccessTokenCookie;
5
+ exports.clearAccessTokenCookie = clearAccessTokenCookie;
4
6
  const shell_1 = require("@things-factory/shell");
5
7
  const env_1 = require("@things-factory/env");
6
8
  const max_age_1 = require("../constants/max-age");
@@ -9,7 +11,6 @@ function getAccessTokenCookie(context) {
9
11
  var _a;
10
12
  return (_a = context === null || context === void 0 ? void 0 : context.cookies) === null || _a === void 0 ? void 0 : _a.get(accessTokenCookieKey);
11
13
  }
12
- exports.getAccessTokenCookie = getAccessTokenCookie;
13
14
  function setAccessTokenCookie(context, token) {
14
15
  const { secure } = context;
15
16
  var cookie = {
@@ -24,7 +25,6 @@ function setAccessTokenCookie(context, token) {
24
25
  }
25
26
  context.cookies.set(accessTokenCookieKey, token, cookie);
26
27
  }
27
- exports.setAccessTokenCookie = setAccessTokenCookie;
28
28
  function clearAccessTokenCookie(context) {
29
29
  const { secure } = context;
30
30
  var cookie = {
@@ -43,5 +43,4 @@ function clearAccessTokenCookie(context) {
43
43
  */
44
44
  context.cookies.set('i18next', '', cookie);
45
45
  }
46
- exports.clearAccessTokenCookie = clearAccessTokenCookie;
47
46
  //# sourceMappingURL=access-token-cookie.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"access-token-cookie.js","sourceRoot":"","sources":["../../server/utils/access-token-cookie.ts"],"names":[],"mappings":";;;AAAA,iDAAmE;AACnE,6CAA4C;AAC5C,kDAA8C;AAE9C,MAAM,oBAAoB,GAAG,YAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAA;AAE/E,SAAgB,oBAAoB,CAAC,OAAO;;IAC1C,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACpD,CAAC;AAFD,oDAEC;AAED,SAAgB,oBAAoB,CAAC,OAAO,EAAE,KAAK;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,iBAAO;QACf,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;KAChC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC1D,CAAC;AAhBD,oDAgBC;AAED,SAAgB,sBAAsB,CAAC,OAAO;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;KAChC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IACrD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC;AApBD,wDAoBC","sourcesContent":["import { getCookieDomainFromHostname } from '@things-factory/shell'\nimport { config } from '@things-factory/env'\nimport { MAX_AGE } from '../constants/max-age'\n\nconst accessTokenCookieKey = config.get('accessTokenCookieKey', 'access_token')\n\nexport function getAccessTokenCookie(context) {\n return context?.cookies?.get(accessTokenCookieKey)\n}\n\nexport function setAccessTokenCookie(context, token) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n maxAge: MAX_AGE,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, token, cookie)\n}\n\nexport function clearAccessTokenCookie(context) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, '', cookie)\n /*\n * TODO clear i18next cookie as well - need to support domain\n * https://github.com/hatiolab/things-factory/issues/70\n */\n context.cookies.set('i18next', '', cookie)\n}\n"]}
1
+ {"version":3,"file":"access-token-cookie.js","sourceRoot":"","sources":["../../server/utils/access-token-cookie.ts"],"names":[],"mappings":";;AAMA,oDAEC;AAED,oDAgBC;AAED,wDAoBC;AAhDD,iDAAmE;AACnE,6CAA4C;AAC5C,kDAA8C;AAE9C,MAAM,oBAAoB,GAAG,YAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAA;AAE/E,SAAgB,oBAAoB,CAAC,OAAO;;IAC1C,OAAO,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,GAAG,CAAC,oBAAoB,CAAC,CAAA;AACpD,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAO,EAAE,KAAK;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,iBAAO;QACf,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAC1D,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAO;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,IAAI,MAAM,GAAG;QACX,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAA;IAED,MAAM,YAAY,GAAG,IAAA,mCAA2B,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;IACjC,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IACrD;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC","sourcesContent":["import { getCookieDomainFromHostname } from '@things-factory/shell'\nimport { config } from '@things-factory/env'\nimport { MAX_AGE } from '../constants/max-age'\n\nconst accessTokenCookieKey = config.get('accessTokenCookieKey', 'access_token')\n\nexport function getAccessTokenCookie(context) {\n return context?.cookies?.get(accessTokenCookieKey)\n}\n\nexport function setAccessTokenCookie(context, token) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n maxAge: MAX_AGE,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, token, cookie)\n}\n\nexport function clearAccessTokenCookie(context) {\n const { secure } = context\n\n var cookie = {\n secure,\n httpOnly: true,\n sameSite: 'Lax'\n }\n\n const cookieDomain = getCookieDomainFromHostname(context.hostname)\n if (cookieDomain) {\n cookie['domain'] = cookieDomain\n }\n\n context.cookies.set(accessTokenCookieKey, '', cookie)\n /*\n * TODO clear i18next cookie as well - need to support domain\n * https://github.com/hatiolab/things-factory/issues/70\n */\n context.cookies.set('i18next', '', cookie)\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkPermission = void 0;
3
+ exports.checkPermission = checkPermission;
4
4
  const user_1 = require("../service/user/user");
5
5
  async function checkPermission(privilegeObject, user, domain, unsafeIP, prohibitedPrivileges) {
6
6
  if (!privilegeObject) {
@@ -34,5 +34,4 @@ async function checkPermission(privilegeObject, user, domain, unsafeIP, prohibit
34
34
  return await user_1.User.hasPrivilege(privilege, category, domain, user);
35
35
  }
36
36
  }
37
- exports.checkPermission = checkPermission;
38
37
  //# sourceMappingURL=check-permission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-permission.js","sourceRoot":"","sources":["../../server/utils/check-permission.ts"],"names":[],"mappings":";;;AAEA,+CAA2C;AAEpC,KAAK,UAAU,eAAe,CACnC,eAAgC,EAChC,IAAU,EACV,MAAc,EACd,QAAkB,EAClB,oBAAgE;IAEhE,IAAI,CAAC,eAAe,EAAE;QACpB,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,eAAe,CAAA;IAEnG,IAAI,QAAQ,EAAE;QACZ,IAAI,SAAS,IAAI,QAAQ,EAAE;YACzB,8CAA8C;YAC9C,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE;gBACjG,OAAO,KAAK,CAAA;aACb;YAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;SAClE;QAED,wEAAwE;QACxE,OAAO,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAA;KAChD;SAAM;QACL,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;YAC3B,8DAA8D;YAC9D,OAAO,CACL,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CACrE,CAAA;SACF;QAED,IACE,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACpE;YACA,OAAO,IAAI,CAAA;SACZ;QAED,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE;YACjG,OAAO,KAAK,CAAA;SACb;QAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;KAClE;AACH,CAAC;AA/CD,0CA+CC","sourcesContent":["import { Domain } from '@things-factory/shell'\nimport { PrivilegeObject } from '../service/privilege/privilege'\nimport { User } from '../service/user/user'\n\nexport async function checkPermission(\n privilegeObject: PrivilegeObject,\n user: User,\n domain: Domain,\n unsafeIP?: boolean,\n prohibitedPrivileges?: { category: string; privilege: string }[]\n): Promise<boolean> {\n if (!privilegeObject) {\n return true\n }\n\n const { owner: domainOwnerGranted, super: superUserGranted, category, privilege } = privilegeObject\n\n if (unsafeIP) {\n if (privilege && category) {\n // unsafeIP 상황에서는 ownership granted는 적용되지 않는다.\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n\n // privilege, category가 설정되지 않은 경우에는 ownership granted가 설정되었다면 허가하지 않는다.\n return !domainOwnerGranted && !superUserGranted\n } else {\n if (!privilege || !category) {\n // privilege, category가 설정되지 않은 경우에는 ownership granted만을 적용한다.\n return (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n )\n }\n\n if (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n ) {\n return true\n }\n\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n}\n"]}
1
+ {"version":3,"file":"check-permission.js","sourceRoot":"","sources":["../../server/utils/check-permission.ts"],"names":[],"mappings":";;AAIA,0CA+CC;AAjDD,+CAA2C;AAEpC,KAAK,UAAU,eAAe,CACnC,eAAgC,EAChC,IAAU,EACV,MAAc,EACd,QAAkB,EAClB,oBAAgE;IAEhE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,eAAe,CAAA;IAEnG,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;gBAClG,OAAO,KAAK,CAAA;YACd,CAAC;YAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QACnE,CAAC;QAED,wEAAwE;QACxE,OAAO,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,8DAA8D;YAC9D,OAAO,CACL,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CACrE,CAAA;QACH,CAAC;QAED,IACE,CAAC,kBAAkB,IAAI,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACxE,CAAC,gBAAgB,IAAI,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EACpE,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,CAAC;YAClG,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,MAAM,WAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACnE,CAAC;AACH,CAAC","sourcesContent":["import { Domain } from '@things-factory/shell'\nimport { PrivilegeObject } from '../service/privilege/privilege'\nimport { User } from '../service/user/user'\n\nexport async function checkPermission(\n privilegeObject: PrivilegeObject,\n user: User,\n domain: Domain,\n unsafeIP?: boolean,\n prohibitedPrivileges?: { category: string; privilege: string }[]\n): Promise<boolean> {\n if (!privilegeObject) {\n return true\n }\n\n const { owner: domainOwnerGranted, super: superUserGranted, category, privilege } = privilegeObject\n\n if (unsafeIP) {\n if (privilege && category) {\n // unsafeIP 상황에서는 ownership granted는 적용되지 않는다.\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n\n // privilege, category가 설정되지 않은 경우에는 ownership granted가 설정되었다면 허가하지 않는다.\n return !domainOwnerGranted && !superUserGranted\n } else {\n if (!privilege || !category) {\n // privilege, category가 설정되지 않은 경우에는 ownership granted만을 적용한다.\n return (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n )\n }\n\n if (\n (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||\n (superUserGranted && (await process.superUserGranted(domain, user)))\n ) {\n return true\n }\n\n if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {\n return false\n }\n\n return await User.hasPrivilege(privilege, category, domain, user)\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkUserBelongsDomain = void 0;
3
+ exports.checkUserBelongsDomain = checkUserBelongsDomain;
4
4
  const shell_1 = require("@things-factory/shell");
5
5
  const user_1 = require("../service/user/user");
6
6
  /**
@@ -18,5 +18,4 @@ async function checkUserBelongsDomain(domain, user) {
18
18
  const { domains: userDomains } = user;
19
19
  return Boolean(userDomains.find((userDomain) => userDomain.id === domain.id));
20
20
  }
21
- exports.checkUserBelongsDomain = checkUserBelongsDomain;
22
21
  //# sourceMappingURL=check-user-belongs-domain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-user-belongs-domain.js","sourceRoot":"","sources":["../../server/utils/check-user-belongs-domain.ts"],"names":[],"mappings":";;;AAAA,iDAA6D;AAE7D,+CAA2C;AAE3C;;;;;;GAMG;AACI,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAU;;IACrE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE;QACzB,IAAI,GAAG,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;KAC7F;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAS,IAAI,CAAA;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AACvF,CAAC;AAPD,wDAOC","sourcesContent":["import { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\n/**\n * @description Based on domain and user information,\n * Find out whether the user belongs domain or user has partnership with domain\n *\n * @param domain\n * @param user\n */\nexport async function checkUserBelongsDomain(domain: Domain, user: User): Promise<Boolean> {\n if (!user.domains?.length) {\n user = await getRepository(User).findOne({ where: { id: user.id }, relations: ['domains'] })\n }\n\n const { domains: userDomains }: User = user\n return Boolean(userDomains.find((userDomain: Domain) => userDomain.id === domain.id))\n}\n"]}
1
+ {"version":3,"file":"check-user-belongs-domain.js","sourceRoot":"","sources":["../../server/utils/check-user-belongs-domain.ts"],"names":[],"mappings":";;AAWA,wDAOC;AAlBD,iDAA6D;AAE7D,+CAA2C;AAE3C;;;;;;GAMG;AACI,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAU;;IACrE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC1B,IAAI,GAAG,MAAM,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAS,IAAI,CAAA;IAC3C,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;AACvF,CAAC","sourcesContent":["import { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\n/**\n * @description Based on domain and user information,\n * Find out whether the user belongs domain or user has partnership with domain\n *\n * @param domain\n * @param user\n */\nexport async function checkUserBelongsDomain(domain: Domain, user: User): Promise<Boolean> {\n if (!user.domains?.length) {\n user = await getRepository(User).findOne({ where: { id: user.id }, relations: ['domains'] })\n }\n\n const { domains: userDomains }: User = user\n return Boolean(userDomains.find((userDomain: Domain) => userDomain.id === domain.id))\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decryptState = exports.encryptState = void 0;
3
+ exports.encryptState = encryptState;
4
+ exports.decryptState = decryptState;
4
5
  const tslib_1 = require("tslib");
5
6
  const crypto_1 = tslib_1.__importDefault(require("crypto"));
6
7
  /* only for short-term life state encryption */
@@ -11,7 +12,6 @@ function encryptState(text) {
11
12
  const encrypted = cipher.update(text);
12
13
  return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex');
13
14
  }
14
- exports.encryptState = encryptState;
15
15
  function decryptState(text) {
16
16
  const textParts = text.split(':');
17
17
  const iv = Buffer.from(textParts.shift(), 'hex');
@@ -20,5 +20,4 @@ function decryptState(text) {
20
20
  const decrypted = decipher.update(encryptedText);
21
21
  return Buffer.concat([decrypted, decipher.final()]).toString();
22
22
  }
23
- exports.decryptState = decryptState;
24
23
  //# sourceMappingURL=encrypt-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"encrypt-state.js","sourceRoot":"","sources":["../../server/utils/encrypt-state.ts"],"names":[],"mappings":";;;;AAAA,4DAA2B;AAE3B,+CAA+C;AAC/C,MAAM,GAAG,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AAElC,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC9F,CAAC;AAND,oCAMC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC;AARD,oCAQC","sourcesContent":["import crypto from 'crypto'\n\n/* only for short-term life state encryption */\nconst KEY = crypto.randomBytes(32)\n\nexport function encryptState(text: string) {\n const iv = crypto.randomBytes(16)\n const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const encrypted = cipher.update(text)\n\n return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex')\n}\n\nexport function decryptState(text: string) {\n const textParts = text.split(':')\n const iv = Buffer.from(textParts.shift(), 'hex')\n const encryptedText = Buffer.from(textParts.join(':'), 'hex')\n const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const decrypted = decipher.update(encryptedText)\n\n return Buffer.concat([decrypted, decipher.final()]).toString()\n}\n"]}
1
+ {"version":3,"file":"encrypt-state.js","sourceRoot":"","sources":["../../server/utils/encrypt-state.ts"],"names":[],"mappings":";;AAKA,oCAMC;AAED,oCAQC;;AArBD,4DAA2B;AAE3B,+CAA+C;AAC/C,MAAM,GAAG,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;AAElC,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC9F,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC","sourcesContent":["import crypto from 'crypto'\n\n/* only for short-term life state encryption */\nconst KEY = crypto.randomBytes(32)\n\nexport function encryptState(text: string) {\n const iv = crypto.randomBytes(16)\n const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const encrypted = cipher.update(text)\n\n return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex')\n}\n\nexport function decryptState(text: string) {\n const textParts = text.split(':')\n const iv = Buffer.from(textParts.shift(), 'hex')\n const encryptedText = Buffer.from(textParts.join(':'), 'hex')\n const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(KEY), iv)\n const decrypted = decipher.update(encryptedText)\n\n return Buffer.concat([decrypted, decipher.final()]).toString()\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"get-aes-256-key.js","sourceRoot":"","sources":["../../server/utils/get-aes-256-key.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,YAAY,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAE5C,IAAI,CAAC,YAAY,EAAE;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE;QACxC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;KACnD;SAAM;QACL,YAAY,GAAG,kCAAkC,CAAA;KAClD;CACF;AAEY,QAAA,WAAW,GAAG,YAAY,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _AES_256_KEY = config.get('AES_256_KEY')\n\nif (!_AES_256_KEY) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('AES_256_KEY not configured.')\n } else {\n _AES_256_KEY = 'V6g5oHJZb7KcYzIyL6cM95XvIDouon5b'\n }\n}\n\nexport const AES_256_KEY = _AES_256_KEY\n"]}
1
+ {"version":3,"file":"get-aes-256-key.js","sourceRoot":"","sources":["../../server/utils/get-aes-256-key.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,YAAY,GAAG,YAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;IAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,kCAAkC,CAAA;IACnD,CAAC;AACH,CAAC;AAEY,QAAA,WAAW,GAAG,YAAY,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _AES_256_KEY = config.get('AES_256_KEY')\n\nif (!_AES_256_KEY) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('AES_256_KEY not configured.')\n } else {\n _AES_256_KEY = 'V6g5oHJZb7KcYzIyL6cM95XvIDouon5b'\n }\n}\n\nexport const AES_256_KEY = _AES_256_KEY\n"]}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDomainFromHostname = void 0;
3
+ exports.getDomainFromHostname = getDomainFromHostname;
4
4
  const env_1 = require("@things-factory/env");
5
5
  var subdomainOffset = env_1.config.get('subdomainOffset', 2);
6
6
  function getDomainFromHostname(hostname) {
7
7
  return hostname.split('.').slice(-subdomainOffset).join('.');
8
8
  }
9
- exports.getDomainFromHostname = getDomainFromHostname;
10
9
  //# sourceMappingURL=get-domain-from-hostname.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-domain-from-hostname.js","sourceRoot":"","sources":["../../server/utils/get-domain-from-hostname.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,eAAe,GAAG,YAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;AAEtD,SAAgB,qBAAqB,CAAC,QAAQ;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAFD,sDAEC","sourcesContent":["import { config } from '@things-factory/env'\n\nvar subdomainOffset = config.get('subdomainOffset', 2)\n\nexport function getDomainFromHostname(hostname) {\n return hostname.split('.').slice(-subdomainOffset).join('.')\n}\n"]}
1
+ {"version":3,"file":"get-domain-from-hostname.js","sourceRoot":"","sources":["../../server/utils/get-domain-from-hostname.ts"],"names":[],"mappings":";;AAIA,sDAEC;AAND,6CAA4C;AAE5C,IAAI,eAAe,GAAG,YAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;AAEtD,SAAgB,qBAAqB,CAAC,QAAQ;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC","sourcesContent":["import { config } from '@things-factory/env'\n\nvar subdomainOffset = config.get('subdomainOffset', 2)\n\nexport function getDomainFromHostname(hostname) {\n return hostname.split('.').slice(-subdomainOffset).join('.')\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildDomainUsersQueryBuilder = exports.getDomainUsers = void 0;
3
+ exports.getDomainUsers = getDomainUsers;
4
+ exports.buildDomainUsersQueryBuilder = buildDomainUsersQueryBuilder;
4
5
  const shell_1 = require("@things-factory/shell");
5
6
  const user_1 = require("../service/user/user");
6
7
  async function getDomainUsers(domain, trxMgr) {
@@ -14,7 +15,6 @@ async function getDomainUsers(domain, trxMgr) {
14
15
  const qb = buildDomainUsersQueryBuilder(domain.id);
15
16
  return await qb.getMany();
16
17
  }
17
- exports.getDomainUsers = getDomainUsers;
18
18
  function buildDomainUsersQueryBuilder(domainId, alias = 'USER', trxMgr) {
19
19
  const userRepo = (trxMgr === null || trxMgr === void 0 ? void 0 : trxMgr.getRepository(user_1.User)) || (0, shell_1.getRepository)(user_1.User);
20
20
  const qb = userRepo.createQueryBuilder(alias);
@@ -26,5 +26,4 @@ function buildDomainUsersQueryBuilder(domainId, alias = 'USER', trxMgr) {
26
26
  .getQuery()}`);
27
27
  return qb;
28
28
  }
29
- exports.buildDomainUsersQueryBuilder = buildDomainUsersQueryBuilder;
30
29
  //# sourceMappingURL=get-domain-users.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-domain-users.js","sourceRoot":"","sources":["../../server/utils/get-domain-users.ts"],"names":[],"mappings":";;;AAEA,iDAA6D;AAE7D,+CAA2C;AAEpC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,MAAsB;IAClF,MAAM,UAAU,GAAuB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,cAAM,CAAC,KAAI,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;IAE7F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;QACd,MAAM,WAAW,GAAW,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAA;QAEzF,MAAM,GAAG,WAAW,CAAA;KACrB;IAED,MAAM,EAAE,GAA6B,4BAA4B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5E,OAAO,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;AAC3B,CAAC;AAZD,wCAYC;AAED,SAAgB,4BAA4B,CAC1C,QAAgB,EAChB,QAAgB,MAAM,EACtB,MAAsB;IAEtB,MAAM,QAAQ,GAAqB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,WAAI,CAAC,KAAI,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAA;IACrF,MAAM,EAAE,GAA6B,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACvE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAClB,GAAG,KAAK,UAAU,EAAE;SACjB,QAAQ,EAAE;SACV,MAAM,CAAC,wBAAwB,CAAC;SAChC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;SACtC,KAAK,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,CAAC;SAC3D,QAAQ,EAAE,EAAE,CAChB,CAAA;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAjBD,oEAiBC","sourcesContent":["import { EntityManager, Repository, SelectQueryBuilder } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getDomainUsers(domain: Partial<Domain>, trxMgr?: EntityManager): Promise<User[]> {\n const domainRepo: Repository<Domain> = trxMgr?.getRepository(Domain) || getRepository(Domain)\n\n if (!domain.id) {\n const foundDomain: Domain = await domainRepo.findOne({ where: { id: domain.id } })\n if (!foundDomain) throw new Error(`Failed to find domain by passed condition, ${domain}`)\n\n domain = foundDomain\n }\n\n const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id)\n return await qb.getMany()\n}\n\nexport function buildDomainUsersQueryBuilder(\n domainId: string,\n alias: string = 'USER',\n trxMgr?: EntityManager\n): SelectQueryBuilder<User> {\n const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)\n const qb: SelectQueryBuilder<User> = userRepo.createQueryBuilder(alias)\n qb.select().andWhere(\n `${alias}.id IN ${qb\n .subQuery()\n .select('USERS_DOMAINS.users_id')\n .from('users_domains', 'USERS_DOMAINS')\n .where('USERS_DOMAINS.domains_id = :domainId', { domainId })\n .getQuery()}`\n )\n\n return qb\n}\n"]}
1
+ {"version":3,"file":"get-domain-users.js","sourceRoot":"","sources":["../../server/utils/get-domain-users.ts"],"names":[],"mappings":";;AAMA,wCAYC;AAED,oEAiBC;AAnCD,iDAA6D;AAE7D,+CAA2C;AAEpC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,MAAsB;IAClF,MAAM,UAAU,GAAuB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,cAAM,CAAC,KAAI,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAA;IAE7F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,WAAW,GAAW,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,EAAE,CAAC,CAAA;QAEzF,MAAM,GAAG,WAAW,CAAA;IACtB,CAAC;IAED,MAAM,EAAE,GAA6B,4BAA4B,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC5E,OAAO,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;AAC3B,CAAC;AAED,SAAgB,4BAA4B,CAC1C,QAAgB,EAChB,QAAgB,MAAM,EACtB,MAAsB;IAEtB,MAAM,QAAQ,GAAqB,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,CAAC,WAAI,CAAC,KAAI,IAAA,qBAAa,EAAC,WAAI,CAAC,CAAA;IACrF,MAAM,EAAE,GAA6B,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACvE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAClB,GAAG,KAAK,UAAU,EAAE;SACjB,QAAQ,EAAE;SACV,MAAM,CAAC,wBAAwB,CAAC;SAChC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;SACtC,KAAK,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,CAAC;SAC3D,QAAQ,EAAE,EAAE,CAChB,CAAA;IAED,OAAO,EAAE,CAAA;AACX,CAAC","sourcesContent":["import { EntityManager, Repository, SelectQueryBuilder } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getDomainUsers(domain: Partial<Domain>, trxMgr?: EntityManager): Promise<User[]> {\n const domainRepo: Repository<Domain> = trxMgr?.getRepository(Domain) || getRepository(Domain)\n\n if (!domain.id) {\n const foundDomain: Domain = await domainRepo.findOne({ where: { id: domain.id } })\n if (!foundDomain) throw new Error(`Failed to find domain by passed condition, ${domain}`)\n\n domain = foundDomain\n }\n\n const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id)\n return await qb.getMany()\n}\n\nexport function buildDomainUsersQueryBuilder(\n domainId: string,\n alias: string = 'USER',\n trxMgr?: EntityManager\n): SelectQueryBuilder<User> {\n const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)\n const qb: SelectQueryBuilder<User> = userRepo.createQueryBuilder(alias)\n qb.select().andWhere(\n `${alias}.id IN ${qb\n .subQuery()\n .select('USERS_DOMAINS.users_id')\n .from('users_domains', 'USERS_DOMAINS')\n .where('USERS_DOMAINS.domains_id = :domainId', { domainId })\n .getQuery()}`\n )\n\n return qb\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"get-secret.js","sourceRoot":"","sources":["../../server/utils/get-secret.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,OAAO,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAElC,IAAI,CAAC,OAAO,EAAE;IACZ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE;QACxC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAA;KAClD;SAAM;QACL,OAAO,GAAG,4CAA4C,CAAA;KACvD;CACF;AAEY,QAAA,MAAM,GAAG,OAAO,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _SECRET = config.get('SECRET')\n\nif (!_SECRET) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('SECRET key not configured.')\n } else {\n _SECRET = '0xD58F835B69D207A76CC5F84a70a1D0d4C79dAC95'\n }\n}\n\nexport const SECRET = _SECRET\n"]}
1
+ {"version":3,"file":"get-secret.js","sourceRoot":"","sources":["../../server/utils/get-secret.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,IAAI,OAAO,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AAElC,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAA;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,4CAA4C,CAAA;IACxD,CAAC;AACH,CAAC;AAEY,QAAA,MAAM,GAAG,OAAO,CAAA","sourcesContent":["import { config } from '@things-factory/env'\n\nvar _SECRET = config.get('SECRET')\n\nif (!_SECRET) {\n if (process.env.NODE_ENV == 'production') {\n throw new TypeError('SECRET key not configured.')\n } else {\n _SECRET = '0xD58F835B69D207A76CC5F84a70a1D0d4C79dAC95'\n }\n}\n\nexport const SECRET = _SECRET\n"]}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDomainsAsOwner = exports.getDomainsWithPrivilege = exports.getRoleBasedDomains = exports.getUserDomains = void 0;
3
+ exports.getUserDomains = getUserDomains;
4
+ exports.getRoleBasedDomains = getRoleBasedDomains;
5
+ exports.getDomainsWithPrivilege = getDomainsWithPrivilege;
6
+ exports.getDomainsAsOwner = getDomainsAsOwner;
4
7
  const shell_1 = require("@things-factory/shell");
5
8
  const user_1 = require("../service/user/user");
6
9
  async function getUserDomains(user) {
@@ -33,7 +36,6 @@ async function getUserDomains(user) {
33
36
  return { id, name, description, subdomain, extType, brandName, brandImage };
34
37
  });
35
38
  }
36
- exports.getUserDomains = getUserDomains;
37
39
  async function getRoleBasedDomains(user) {
38
40
  return (await (0, shell_1.getRepository)(shell_1.Domain)
39
41
  .createQueryBuilder('DOMAIN')
@@ -54,7 +56,6 @@ async function getRoleBasedDomains(user) {
54
56
  return { id, name, description, subdomain, extType, brandName, brandImage };
55
57
  });
56
58
  }
57
- exports.getRoleBasedDomains = getRoleBasedDomains;
58
59
  async function getDomainsWithPrivilege(user, privilege, category) {
59
60
  return (await (0, shell_1.getRepository)(shell_1.Domain)
60
61
  .createQueryBuilder('DOMAIN')
@@ -88,7 +89,6 @@ async function getDomainsWithPrivilege(user, privilege, category) {
88
89
  return { id, name, description, subdomain, extType, brandName, brandImage };
89
90
  });
90
91
  }
91
- exports.getDomainsWithPrivilege = getDomainsWithPrivilege;
92
92
  async function getDomainsAsOwner(user) {
93
93
  return (await (0, shell_1.getRepository)(shell_1.Domain).find({
94
94
  where: { owner: user.id }
@@ -97,5 +97,4 @@ async function getDomainsAsOwner(user) {
97
97
  return { id, name, description, subdomain, extType, brandName, brandImage };
98
98
  });
99
99
  }
100
- exports.getDomainsAsOwner = getDomainsAsOwner;
101
100
  //# sourceMappingURL=get-user-domains.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-user-domains.js","sourceRoot":"","sources":["../../server/utils/get-user-domains.ts"],"names":[],"mappings":"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","sourcesContent":["import { In } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getUserDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getRoleBasedDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsWithPrivilege(\n user: User,\n privilege: string,\n category: string\n): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .leftJoin('ROLE.privileges', 'PRIVILEGE')\n .where('USER.id = :userId', { userId: user.id })\n .andWhere('PRIVILEGE.name = :privilege', { privilege })\n .andWhere('PRIVILEGE.category = :category', { category })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsAsOwner(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain).find({\n where: { owner: user.id }\n })\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n"]}
1
+ {"version":3,"file":"get-user-domains.js","sourceRoot":"","sources":["../../server/utils/get-user-domains.ts"],"names":[],"mappings":";;AAMA,wCA+BC;AAED,kDAqBC;AAED,0DAsCC;AAED,8CASC;AA7GD,iDAA6D;AAE7D,+CAA2C;AAEpC,KAAK,UAAU,cAAc,CAAC,IAAU;IAC7C,OAAO,CACL,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC;SACxB,kBAAkB,CAAC,QAAQ,CAAC;SAC5B,KAAK,CAAC,EAAE,CAAC,EAAE;QACV,MAAM,QAAQ,GAAG,EAAE;aAChB,QAAQ,EAAE;aACV,QAAQ,CAAC,IAAI,CAAC;aACd,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,WAAI,EAAE,MAAM,CAAC;aAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;aAC9B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;aACjC,KAAK,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aAC/C,QAAQ,EAAE,CAAA;QACb,OAAO,eAAe,GAAG,QAAQ,CAAA;IACnC,CAAC,CAAC;SACD,OAAO,CAAC,EAAE,CAAC,EAAE;QACZ,MAAM,QAAQ,GAAG,EAAE;aAChB,QAAQ,EAAE;aACV,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,cAAM,EAAE,QAAQ,CAAC;aACtB,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aAClD,QAAQ,EAAE,CAAA;QACb,OAAO,eAAe,GAAG,QAAQ,CAAA;IACnC,CAAC,CAAC;SACD,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;SAC7B,OAAO,EAAE,CACb,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,IAAU;IAClD,OAAO,CACL,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC;SACxB,kBAAkB,CAAC,QAAQ,CAAC;SAC5B,KAAK,CAAC,EAAE,CAAC,EAAE;QACV,MAAM,QAAQ,GAAG,EAAE;aAChB,QAAQ,EAAE;aACV,QAAQ,CAAC,IAAI,CAAC;aACd,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,WAAI,EAAE,MAAM,CAAC;aAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;aAC9B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;aACjC,KAAK,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aAC/C,QAAQ,EAAE,CAAA;QACb,OAAO,eAAe,GAAG,QAAQ,CAAA;IACnC,CAAC,CAAC;SACD,OAAO,EAAE,CACb,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,IAAU,EACV,SAAiB,EACjB,QAAgB;IAEhB,OAAO,CACL,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC;SACxB,kBAAkB,CAAC,QAAQ,CAAC;SAC5B,KAAK,CAAC,EAAE,CAAC,EAAE;QACV,MAAM,QAAQ,GAAG,EAAE;aAChB,QAAQ,EAAE;aACV,QAAQ,CAAC,IAAI,CAAC;aACd,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,WAAI,EAAE,MAAM,CAAC;aAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;aAC9B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC;aACjC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;aACxC,KAAK,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aAC/C,QAAQ,CAAC,6BAA6B,EAAE,EAAE,SAAS,EAAE,CAAC;aACtD,QAAQ,CAAC,gCAAgC,EAAE,EAAE,QAAQ,EAAE,CAAC;aACxD,QAAQ,EAAE,CAAA;QACb,OAAO,eAAe,GAAG,QAAQ,CAAA;IACnC,CAAC,CAAC;SACD,OAAO,CAAC,EAAE,CAAC,EAAE;QACZ,MAAM,QAAQ,GAAG,EAAE;aAChB,QAAQ,EAAE;aACV,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,cAAM,EAAE,QAAQ,CAAC;aACtB,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;aAClD,QAAQ,EAAE,CAAA;QACb,OAAO,eAAe,GAAG,QAAQ,CAAA;IACnC,CAAC,CAAC;SACD,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;SAC7B,OAAO,EAAE,CACb,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,IAAU;IAChD,OAAO,CACL,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,IAAI,CAAC;QAC/B,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KAC1B,CAAC,CACH,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAA;QACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { In } from 'typeorm'\n\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { User } from '../service/user/user'\n\nexport async function getUserDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getRoleBasedDomains(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .where('USER.id = :userId', { userId: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsWithPrivilege(\n user: User,\n privilege: string,\n category: string\n): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain)\n .createQueryBuilder('DOMAIN')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .distinct(true)\n .select('DOMAIN.id')\n .from(User, 'USER')\n .leftJoin('USER.roles', 'ROLE')\n .leftJoin('ROLE.domain', 'DOMAIN')\n .leftJoin('ROLE.privileges', 'PRIVILEGE')\n .where('USER.id = :userId', { userId: user.id })\n .andWhere('PRIVILEGE.name = :privilege', { privilege })\n .andWhere('PRIVILEGE.category = :category', { category })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orWhere(qb => {\n const subQuery = qb\n .subQuery()\n .select('DOMAIN.id')\n .from(Domain, 'DOMAIN')\n .where('DOMAIN.owner = :owner', { owner: user.id })\n .getQuery()\n return 'DOMAIN.id IN ' + subQuery\n })\n .orderBy('DOMAIN.name', 'ASC')\n .getMany()\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n\nexport async function getDomainsAsOwner(user: User): Promise<Partial<Domain>[]> {\n return (\n await getRepository(Domain).find({\n where: { owner: user.id }\n })\n ).map(domain => {\n const { id, name, description, subdomain, extType, brandName, brandImage } = domain\n return { id, name, description, subdomain, extType, brandName, brandImage }\n })\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/auth-base",
3
- "version": "6.2.170",
3
+ "version": "6.2.178",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -30,10 +30,10 @@
30
30
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
31
31
  },
32
32
  "dependencies": {
33
- "@things-factory/email-base": "^6.2.170",
33
+ "@things-factory/email-base": "^6.2.178",
34
34
  "@things-factory/env": "^6.2.170",
35
- "@things-factory/i18n-base": "^6.2.170",
36
- "@things-factory/shell": "^6.2.170",
35
+ "@things-factory/i18n-base": "^6.2.178",
36
+ "@things-factory/shell": "^6.2.178",
37
37
  "@things-factory/utils": "^6.2.170",
38
38
  "jsonwebtoken": "^9.0.0",
39
39
  "koa-passport": "^6.0.0",
@@ -43,5 +43,5 @@
43
43
  "passport-local": "^1.0.0",
44
44
  "popsicle-cookie-jar": "^1.0.0"
45
45
  },
46
- "gitHead": "5a4f3894a63e770de9320c28a1a3c0f38d070ab5"
46
+ "gitHead": "b21612202e8acb60a6d29e3e5913a06346352bc5"
47
47
  }
@@ -1,8 +1,8 @@
1
1
  import { ILike } from 'typeorm'
2
2
  import { URL } from 'url'
3
3
 
4
- import { sendEmail } from '@things-factory/email-base'
5
4
  import { Domain, getRepository } from '@things-factory/shell'
5
+ import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
6
6
 
7
7
  import { Invitation } from '../service/invitation/invitation'
8
8
  import { User } from '../service/user/user'
@@ -98,6 +98,7 @@ export async function sendInvitationEmail({ invitation, context }) {
98
98
  var serviceUrl = new URL(`/auth/accept/${token}`, context.header.referer)
99
99
 
100
100
  await sendEmail({
101
+ sender: null,
101
102
  receiver: invitation.email,
102
103
  subject: 'Invitation',
103
104
  content: getInvitationEmailForm({
@@ -1,6 +1,6 @@
1
1
  import { URL } from 'url'
2
2
 
3
- import { sendEmail } from '@things-factory/email-base'
3
+ import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
4
4
  import { config } from '@things-factory/env'
5
5
  import { getRepository } from '@things-factory/shell'
6
6
 
@@ -23,6 +23,7 @@ export async function sendPasswordResetEmail({ user, context }) {
23
23
  if (verifaction) {
24
24
  var serviceUrl = new URL(`/auth/reset-password?token=${token}`, context.header.referer)
25
25
  await sendEmail({
26
+ sender: null,
26
27
  receiver: user.email,
27
28
  subject: 'Reset your password',
28
29
  content: getResetPasswordEmailForm({
@@ -1,6 +1,6 @@
1
1
  import { URL } from 'url'
2
2
 
3
- import { sendEmail } from '@things-factory/email-base'
3
+ import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
4
4
  import { getRepository } from '@things-factory/shell'
5
5
 
6
6
  import { User, UserStatus } from '../service/user/user'
@@ -17,6 +17,7 @@ export async function sendUnlockUserEmail({ user, context }) {
17
17
  if (verifaction) {
18
18
  var serviceUrl = new URL(`/auth/unlock-user?token=${token}`, context.header.referer)
19
19
  await sendEmail({
20
+ sender: null,
20
21
  receiver: user.email,
21
22
  subject: 'Your account is locked',
22
23
  content: getUnlockUserEmailForm({
@@ -1,6 +1,6 @@
1
1
  import { URL } from 'url'
2
2
 
3
- import { sendEmail } from '@things-factory/email-base'
3
+ import { sendEmail } from '@things-factory/email-base/dist-server/controllers/email'
4
4
  import { getRepository } from '@things-factory/shell'
5
5
 
6
6
  import { AuthError } from '../errors/auth-error'
@@ -18,6 +18,7 @@ export async function sendVerificationEmail({ user, context }) {
18
18
  if (verifaction) {
19
19
  var serviceUrl = new URL(`/auth/verify/${token}`, context.header.referer)
20
20
  await sendEmail({
21
+ sender: null,
21
22
  receiver: user.email,
22
23
  subject: 'Verify your email',
23
24
  content: getVerificationEmailForm({
@@ -1,9 +1,9 @@
1
1
  import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
2
  import { GraphQLEmailAddress } from 'graphql-scalars'
3
- import { ILike, In, SelectQueryBuilder } from 'typeorm'
3
+ import { ILike, In, SelectQueryBuilder, EntityManager } from 'typeorm'
4
4
 
5
5
  import { config } from '@things-factory/env'
6
- import { Domain, getRepository, ObjectRef } from '@things-factory/shell'
6
+ import { Domain, ObjectRef } from '@things-factory/shell'
7
7
 
8
8
  import { deleteUser as commonDeleteUser, deleteUsers as commonDeleteUsers } from '../../controllers/delete-user'
9
9
  import { buildDomainUsersQueryBuilder } from '../../utils/get-domain-users'
@@ -17,13 +17,13 @@ export class UserMutation {
17
17
  @Directive('@transaction')
18
18
  @Mutation(returns => User, { description: 'To create new user' })
19
19
  async createUser(@Arg('user') user: NewUser, @Ctx() context: ResolverContext) {
20
- const { domain } = context.state
20
+ const { domain, tx } = context.state
21
21
  const { defaultPassword } = config.get('password')
22
22
  const { email } = user
23
23
 
24
24
  user.email = email.trim()
25
25
 
26
- const oldUser: User = await getRepository(User).findOne({ where: { email: ILike(user.email) } })
26
+ const oldUser: User = await tx.getRepository(User).findOne({ where: { email: ILike(user.email) } })
27
27
  if (oldUser) {
28
28
  throw new Error(context.t('error.x already exists in y', { x: context.t('field.user'), y: 'operato' }))
29
29
  }
@@ -34,14 +34,14 @@ export class UserMutation {
34
34
 
35
35
  const salt = User.generateSalt()
36
36
 
37
- return await getRepository(User).save({
37
+ return await tx.getRepository(User).save({
38
38
  creator: context.state.user,
39
39
  updater: context.state.user,
40
40
  ...user,
41
41
  domains: [domain],
42
42
  roles:
43
43
  user.roles && user.roles.length
44
- ? await getRepository(Role).findBy({
44
+ ? await tx.getRepository(Role).findBy({
45
45
  id: In(user.roles.map(role => role.id)),
46
46
  domain: { id: domain.id }
47
47
  })
@@ -55,12 +55,8 @@ export class UserMutation {
55
55
  @Directive('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)')
56
56
  @Directive('@transaction')
57
57
  @Mutation(returns => User, { description: 'To modify user information' })
58
- async updateUser(
59
- @Arg('email', type => GraphQLEmailAddress) email: string,
60
- @Arg('patch') patch: UserPatch,
61
- @Ctx() context: ResolverContext
62
- ) {
63
- const { domain, user: updater }: { domain: Domain; user: User } = context.state
58
+ async updateUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Arg('patch') patch: UserPatch, @Ctx() context: ResolverContext) {
59
+ const { domain, user: updater, tx }: { domain: Domain; user: User; tx?: EntityManager } = context.state
64
60
  const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id, 'USER')
65
61
  const user: User = await qb
66
62
  .andWhere('LOWER(USER.email) = :email', { email: email?.toLowerCase().trim() || '' })
@@ -69,14 +65,16 @@ export class UserMutation {
69
65
  .getOne()
70
66
 
71
67
  if (patch.roles) {
72
- patch.roles = await getRepository(Role).find({ where: { id: In(patch.roles.map((r: Partial<Role>) => r.id)) } })
68
+ patch.roles = await tx.getRepository(Role).find({
69
+ where: { id: In(patch.roles.map((r: Partial<Role>) => r.id)) }
70
+ })
73
71
  }
74
72
 
75
73
  if (patch.status && patch.status === 'activated') {
76
74
  user.status = UserStatus.ACTIVATED
77
75
  }
78
76
 
79
- return await getRepository(User).save({
77
+ return await tx.getRepository(User).save({
80
78
  ...user,
81
79
  ...patch,
82
80
  updater
@@ -199,12 +197,9 @@ export class UserMutation {
199
197
 
200
198
  @Directive('@transaction')
201
199
  @Mutation(returns => Boolean, { description: 'To invite new user' })
202
- async inviteUser(
203
- @Arg('email', type => GraphQLEmailAddress) email: string,
204
- @Ctx() context: ResolverContext
205
- ): Promise<boolean> {
206
- const { domain } = context.state
207
- const invitee: User = await getRepository(User).findOne({
200
+ async inviteUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
201
+ const { domain, tx } = context.state
202
+ const invitee: User = await tx.getRepository(User).findOne({
208
203
  where: { email: ILike(email) },
209
204
  relations: ['domains']
210
205
  })
@@ -218,7 +213,7 @@ export class UserMutation {
218
213
  throw new Error(context.t('error.x already exists in y', { x: context.t('field.user'), y: domain.name }))
219
214
  }
220
215
  invitee.domains = [...existingDomains, domain]
221
- await getRepository(User).save(invitee)
216
+ await tx.getRepository(User).save(invitee)
222
217
 
223
218
  return true
224
219
  }
@@ -226,15 +221,13 @@ export class UserMutation {
226
221
  @Directive('@transaction')
227
222
  @Directive('@privilege(category: "user", privilege: "mutation", domainOwnerGranted: true)')
228
223
  @Mutation(returns => Boolean, { description: 'To delete domain user' })
229
- async deleteDomainUser(
230
- @Arg('email', type => GraphQLEmailAddress) email: string,
231
- @Ctx() context: ResolverContext
232
- ): Promise<boolean> {
224
+ async deleteDomainUser(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
233
225
  const { tx, domain } = context.state
234
226
 
235
- let user: User = await tx
236
- .getRepository(User)
237
- .findOne({ where: { email: ILike(email) }, relations: ['domains', 'roles', 'roles.domain'] })
227
+ let user: User = await tx.getRepository(User).findOne({
228
+ where: { email: ILike(email) },
229
+ relations: ['domains', 'roles', 'roles.domain']
230
+ })
238
231
  if (!user) {
239
232
  throw new Error(context.t('error.failed to find x', { x: context.t('field.user') }))
240
233
  }
@@ -258,16 +251,31 @@ export class UserMutation {
258
251
  @Directive('@privilege(domainOwnerGranted: true, superUserGranted: true)')
259
252
  @Directive('@transaction')
260
253
  @Mutation(returns => Boolean, { description: 'To transfer owner of domain' })
261
- async transferOwner(
262
- @Arg('email', type => GraphQLEmailAddress) email: string,
263
- @Ctx() context: ResolverContext
264
- ): Promise<boolean> {
265
- const { domain } = context.state
266
- const user: User = await getRepository(User).findOne({
267
- where: { email: ILike(email) }
254
+ async transferOwner(@Arg('email', type => GraphQLEmailAddress) email: string, @Ctx() context: ResolverContext): Promise<boolean> {
255
+ const { domain, tx } = context.state
256
+ const user: User = await tx.getRepository(User).findOne({
257
+ where: { email: ILike(email) },
258
+ relations: ['domains', 'roles']
268
259
  })
260
+
261
+ if (!user) {
262
+ throw new Error('Failed to find user')
263
+ }
264
+
265
+ if (user.status !== UserStatus.ACTIVATED) {
266
+ throw new Error('Only activated users are eligible to receive admin privileges.')
267
+ }
268
+
269
+ if (user.domains.map((d: Domain) => d.id).indexOf(domain.id) < 0) {
270
+ throw new Error(`User is not belongs to current domain`)
271
+ }
272
+
273
+ if (user.roles.filter((r: Role) => r.domainId == domain.id).length == 0) {
274
+ throw new Error(`Only users with at least one role in this domain are eligible to receive admin privileges.`)
275
+ }
276
+
269
277
  domain.owner = user.id
270
- await getRepository(Domain).save(domain)
278
+ await tx.getRepository(Domain).save(domain)
271
279
 
272
280
  return true
273
281
  }