@things-factory/auth-base 4.3.591 → 4.3.671

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 (229) hide show
  1. package/package.json +5 -5
  2. package/dist-server/constants/error-code.js +0 -21
  3. package/dist-server/constants/error-code.js.map +0 -1
  4. package/dist-server/constants/error-message.js +0 -1
  5. package/dist-server/constants/error-message.js.map +0 -1
  6. package/dist-server/constants/max-age.js +0 -5
  7. package/dist-server/constants/max-age.js.map +0 -1
  8. package/dist-server/controllers/auth.js +0 -21
  9. package/dist-server/controllers/auth.js.map +0 -1
  10. package/dist-server/controllers/change-pwd.js +0 -80
  11. package/dist-server/controllers/change-pwd.js.map +0 -1
  12. package/dist-server/controllers/checkin.js +0 -21
  13. package/dist-server/controllers/checkin.js.map +0 -1
  14. package/dist-server/controllers/delete-user.js +0 -61
  15. package/dist-server/controllers/delete-user.js.map +0 -1
  16. package/dist-server/controllers/invitation.js +0 -119
  17. package/dist-server/controllers/invitation.js.map +0 -1
  18. package/dist-server/controllers/profile.js +0 -26
  19. package/dist-server/controllers/profile.js.map +0 -1
  20. package/dist-server/controllers/reset-password.js +0 -110
  21. package/dist-server/controllers/reset-password.js.map +0 -1
  22. package/dist-server/controllers/signin.js +0 -76
  23. package/dist-server/controllers/signin.js.map +0 -1
  24. package/dist-server/controllers/signup.js +0 -105
  25. package/dist-server/controllers/signup.js.map +0 -1
  26. package/dist-server/controllers/unlock-user.js +0 -60
  27. package/dist-server/controllers/unlock-user.js.map +0 -1
  28. package/dist-server/controllers/utils/make-invitation-token.js +0 -12
  29. package/dist-server/controllers/utils/make-invitation-token.js.map +0 -1
  30. package/dist-server/controllers/utils/make-verification-token.js +0 -12
  31. package/dist-server/controllers/utils/make-verification-token.js.map +0 -1
  32. package/dist-server/controllers/utils/password-rule.js +0 -90
  33. package/dist-server/controllers/utils/password-rule.js.map +0 -1
  34. package/dist-server/controllers/utils/save-invitation-token.js +0 -13
  35. package/dist-server/controllers/utils/save-invitation-token.js.map +0 -1
  36. package/dist-server/controllers/utils/save-verification-token.js +0 -15
  37. package/dist-server/controllers/utils/save-verification-token.js.map +0 -1
  38. package/dist-server/controllers/verification.js +0 -78
  39. package/dist-server/controllers/verification.js.map +0 -1
  40. package/dist-server/errors/auth-error.js +0 -40
  41. package/dist-server/errors/auth-error.js.map +0 -1
  42. package/dist-server/errors/index.js +0 -19
  43. package/dist-server/errors/index.js.map +0 -1
  44. package/dist-server/errors/user-domain-not-match-error.js +0 -24
  45. package/dist-server/errors/user-domain-not-match-error.js.map +0 -1
  46. package/dist-server/index.js +0 -29
  47. package/dist-server/index.js.map +0 -1
  48. package/dist-server/middlewares/authenticate-401-middleware.js +0 -84
  49. package/dist-server/middlewares/authenticate-401-middleware.js.map +0 -1
  50. package/dist-server/middlewares/domain-authenticate-middleware.js +0 -58
  51. package/dist-server/middlewares/domain-authenticate-middleware.js.map +0 -1
  52. package/dist-server/middlewares/graphql-authenticate-middleware.js +0 -17
  53. package/dist-server/middlewares/graphql-authenticate-middleware.js.map +0 -1
  54. package/dist-server/middlewares/index.js +0 -57
  55. package/dist-server/middlewares/index.js.map +0 -1
  56. package/dist-server/middlewares/jwt-authenticate-middleware.js +0 -77
  57. package/dist-server/middlewares/jwt-authenticate-middleware.js.map +0 -1
  58. package/dist-server/middlewares/signin-middleware.js +0 -47
  59. package/dist-server/middlewares/signin-middleware.js.map +0 -1
  60. package/dist-server/migrations/1548206416130-SeedUser.js +0 -46
  61. package/dist-server/migrations/1548206416130-SeedUser.js.map +0 -1
  62. package/dist-server/migrations/1566805283882-SeedPrivilege.js +0 -26
  63. package/dist-server/migrations/1566805283882-SeedPrivilege.js.map +0 -1
  64. package/dist-server/migrations/index.js +0 -12
  65. package/dist-server/migrations/index.js.map +0 -1
  66. package/dist-server/router/auth-checkin-router.js +0 -96
  67. package/dist-server/router/auth-checkin-router.js.map +0 -1
  68. package/dist-server/router/auth-private-process-router.js +0 -91
  69. package/dist-server/router/auth-private-process-router.js.map +0 -1
  70. package/dist-server/router/auth-public-process-router.js +0 -243
  71. package/dist-server/router/auth-public-process-router.js.map +0 -1
  72. package/dist-server/router/auth-signin-router.js +0 -38
  73. package/dist-server/router/auth-signin-router.js.map +0 -1
  74. package/dist-server/router/auth-signup-router.js +0 -76
  75. package/dist-server/router/auth-signup-router.js.map +0 -1
  76. package/dist-server/router/index.js +0 -25
  77. package/dist-server/router/index.js.map +0 -1
  78. package/dist-server/router/oauth2/index.js +0 -19
  79. package/dist-server/router/oauth2/index.js.map +0 -1
  80. package/dist-server/router/oauth2/oauth2-authorize-router.js +0 -72
  81. package/dist-server/router/oauth2/oauth2-authorize-router.js.map +0 -1
  82. package/dist-server/router/oauth2/oauth2-router.js +0 -137
  83. package/dist-server/router/oauth2/oauth2-router.js.map +0 -1
  84. package/dist-server/router/oauth2/oauth2-server.js +0 -201
  85. package/dist-server/router/oauth2/oauth2-server.js.map +0 -1
  86. package/dist-server/router/oauth2/passport-oauth2-client-password.js +0 -84
  87. package/dist-server/router/oauth2/passport-oauth2-client-password.js.map +0 -1
  88. package/dist-server/router/oauth2/passport-refresh-token.js +0 -84
  89. package/dist-server/router/oauth2/passport-refresh-token.js.map +0 -1
  90. package/dist-server/router/path-base-domain-router.js +0 -15
  91. package/dist-server/router/path-base-domain-router.js.map +0 -1
  92. package/dist-server/router/site-root-router.js +0 -48
  93. package/dist-server/router/site-root-router.js.map +0 -1
  94. package/dist-server/routes.js +0 -58
  95. package/dist-server/routes.js.map +0 -1
  96. package/dist-server/service/app-binding/app-binding-mutation.js +0 -45
  97. package/dist-server/service/app-binding/app-binding-mutation.js.map +0 -1
  98. package/dist-server/service/app-binding/app-binding-query.js +0 -135
  99. package/dist-server/service/app-binding/app-binding-query.js.map +0 -1
  100. package/dist-server/service/app-binding/app-binding-types.js +0 -29
  101. package/dist-server/service/app-binding/app-binding-types.js.map +0 -1
  102. package/dist-server/service/app-binding/app-binding.js +0 -34
  103. package/dist-server/service/app-binding/app-binding.js.map +0 -1
  104. package/dist-server/service/app-binding/index.js +0 -7
  105. package/dist-server/service/app-binding/index.js.map +0 -1
  106. package/dist-server/service/appliance/appliance-mutation.js +0 -117
  107. package/dist-server/service/appliance/appliance-mutation.js.map +0 -1
  108. package/dist-server/service/appliance/appliance-query.js +0 -85
  109. package/dist-server/service/appliance/appliance-query.js.map +0 -1
  110. package/dist-server/service/appliance/appliance-types.js +0 -93
  111. package/dist-server/service/appliance/appliance-types.js.map +0 -1
  112. package/dist-server/service/appliance/appliance.js +0 -155
  113. package/dist-server/service/appliance/appliance.js.map +0 -1
  114. package/dist-server/service/appliance/index.js +0 -9
  115. package/dist-server/service/appliance/index.js.map +0 -1
  116. package/dist-server/service/application/application-mutation.js +0 -121
  117. package/dist-server/service/application/application-mutation.js.map +0 -1
  118. package/dist-server/service/application/application-query.js +0 -128
  119. package/dist-server/service/application/application-query.js.map +0 -1
  120. package/dist-server/service/application/application-types.js +0 -119
  121. package/dist-server/service/application/application-types.js.map +0 -1
  122. package/dist-server/service/application/application.js +0 -236
  123. package/dist-server/service/application/application.js.map +0 -1
  124. package/dist-server/service/application/index.js +0 -9
  125. package/dist-server/service/application/index.js.map +0 -1
  126. package/dist-server/service/domain-generator/domain-generator-mutation.js +0 -117
  127. package/dist-server/service/domain-generator/domain-generator-mutation.js.map +0 -1
  128. package/dist-server/service/domain-generator/domain-generator-types.js +0 -79
  129. package/dist-server/service/domain-generator/domain-generator-types.js.map +0 -1
  130. package/dist-server/service/domain-generator/index.js +0 -6
  131. package/dist-server/service/domain-generator/index.js.map +0 -1
  132. package/dist-server/service/granted-role/granted-role-mutation.js +0 -144
  133. package/dist-server/service/granted-role/granted-role-mutation.js.map +0 -1
  134. package/dist-server/service/granted-role/granted-role-query.js +0 -93
  135. package/dist-server/service/granted-role/granted-role-query.js.map +0 -1
  136. package/dist-server/service/granted-role/granted-role.js +0 -49
  137. package/dist-server/service/granted-role/granted-role.js.map +0 -1
  138. package/dist-server/service/granted-role/index.js +0 -9
  139. package/dist-server/service/granted-role/index.js.map +0 -1
  140. package/dist-server/service/index.js +0 -94
  141. package/dist-server/service/index.js.map +0 -1
  142. package/dist-server/service/invitation/index.js +0 -9
  143. package/dist-server/service/invitation/index.js.map +0 -1
  144. package/dist-server/service/invitation/invitation-mutation.js +0 -76
  145. package/dist-server/service/invitation/invitation-mutation.js.map +0 -1
  146. package/dist-server/service/invitation/invitation-query.js +0 -57
  147. package/dist-server/service/invitation/invitation-query.js.map +0 -1
  148. package/dist-server/service/invitation/invitation-types.js +0 -29
  149. package/dist-server/service/invitation/invitation-types.js.map +0 -1
  150. package/dist-server/service/invitation/invitation.js +0 -84
  151. package/dist-server/service/invitation/invitation.js.map +0 -1
  152. package/dist-server/service/login-history/index.js +0 -8
  153. package/dist-server/service/login-history/index.js.map +0 -1
  154. package/dist-server/service/login-history/login-history-query.js +0 -67
  155. package/dist-server/service/login-history/login-history-query.js.map +0 -1
  156. package/dist-server/service/login-history/login-history.js +0 -68
  157. package/dist-server/service/login-history/login-history.js.map +0 -1
  158. package/dist-server/service/partner/index.js +0 -9
  159. package/dist-server/service/partner/index.js.map +0 -1
  160. package/dist-server/service/partner/partner-mutation.js +0 -134
  161. package/dist-server/service/partner/partner-mutation.js.map +0 -1
  162. package/dist-server/service/partner/partner-query.js +0 -193
  163. package/dist-server/service/partner/partner-query.js.map +0 -1
  164. package/dist-server/service/partner/partner-types.js +0 -57
  165. package/dist-server/service/partner/partner-types.js.map +0 -1
  166. package/dist-server/service/partner/partner.js +0 -86
  167. package/dist-server/service/partner/partner.js.map +0 -1
  168. package/dist-server/service/password-history/index.js +0 -6
  169. package/dist-server/service/password-history/index.js.map +0 -1
  170. package/dist-server/service/password-history/password-history.js +0 -34
  171. package/dist-server/service/password-history/password-history.js.map +0 -1
  172. package/dist-server/service/privilege/index.js +0 -9
  173. package/dist-server/service/privilege/index.js.map +0 -1
  174. package/dist-server/service/privilege/privilege-directive.js +0 -85
  175. package/dist-server/service/privilege/privilege-directive.js.map +0 -1
  176. package/dist-server/service/privilege/privilege-mutation.js +0 -80
  177. package/dist-server/service/privilege/privilege-mutation.js.map +0 -1
  178. package/dist-server/service/privilege/privilege-query.js +0 -109
  179. package/dist-server/service/privilege/privilege-query.js.map +0 -1
  180. package/dist-server/service/privilege/privilege-types.js +0 -100
  181. package/dist-server/service/privilege/privilege-types.js.map +0 -1
  182. package/dist-server/service/privilege/privilege.js +0 -92
  183. package/dist-server/service/privilege/privilege.js.map +0 -1
  184. package/dist-server/service/role/index.js +0 -9
  185. package/dist-server/service/role/index.js.map +0 -1
  186. package/dist-server/service/role/role-mutation.js +0 -121
  187. package/dist-server/service/role/role-mutation.js.map +0 -1
  188. package/dist-server/service/role/role-query.js +0 -207
  189. package/dist-server/service/role/role-query.js.map +0 -1
  190. package/dist-server/service/role/role-types.js +0 -130
  191. package/dist-server/service/role/role-types.js.map +0 -1
  192. package/dist-server/service/role/role.js +0 -94
  193. package/dist-server/service/role/role.js.map +0 -1
  194. package/dist-server/service/user/index.js +0 -9
  195. package/dist-server/service/user/index.js.map +0 -1
  196. package/dist-server/service/user/user-mutation.js +0 -307
  197. package/dist-server/service/user/user-mutation.js.map +0 -1
  198. package/dist-server/service/user/user-query.js +0 -194
  199. package/dist-server/service/user/user-query.js.map +0 -1
  200. package/dist-server/service/user/user-types.js +0 -106
  201. package/dist-server/service/user/user-types.js.map +0 -1
  202. package/dist-server/service/user/user.js +0 -274
  203. package/dist-server/service/user/user.js.map +0 -1
  204. package/dist-server/service/verification-token/index.js +0 -6
  205. package/dist-server/service/verification-token/index.js.map +0 -1
  206. package/dist-server/service/verification-token/verification-token.js +0 -75
  207. package/dist-server/service/verification-token/verification-token.js.map +0 -1
  208. package/dist-server/templates/account-unlock-email.js +0 -69
  209. package/dist-server/templates/account-unlock-email.js.map +0 -1
  210. package/dist-server/templates/invitation-email.js +0 -70
  211. package/dist-server/templates/invitation-email.js.map +0 -1
  212. package/dist-server/templates/reset-password-email.js +0 -66
  213. package/dist-server/templates/reset-password-email.js.map +0 -1
  214. package/dist-server/templates/verification-email.js +0 -70
  215. package/dist-server/templates/verification-email.js.map +0 -1
  216. package/dist-server/utils/accepts.js +0 -14
  217. package/dist-server/utils/accepts.js.map +0 -1
  218. package/dist-server/utils/access-token-cookie.js +0 -45
  219. package/dist-server/utils/access-token-cookie.js.map +0 -1
  220. package/dist-server/utils/check-user-belongs-domain.js +0 -22
  221. package/dist-server/utils/check-user-belongs-domain.js.map +0 -1
  222. package/dist-server/utils/get-domain-from-hostname.js +0 -10
  223. package/dist-server/utils/get-domain-from-hostname.js.map +0 -1
  224. package/dist-server/utils/get-domain-users.js +0 -31
  225. package/dist-server/utils/get-domain-users.js.map +0 -1
  226. package/dist-server/utils/get-secret.js +0 -15
  227. package/dist-server/utils/get-secret.js.map +0 -1
  228. package/dist-server/utils/get-user-domains.js +0 -40
  229. package/dist-server/utils/get-user-domains.js.map +0 -1
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.authenticate401Middleware = void 0;
4
- const error_code_1 = require("../constants/error-code");
5
- const auth_error_1 = require("../errors/auth-error");
6
- const accepts_1 = require("../utils/accepts");
7
- const debug = require('debug')('things-factory:auth-base:authenticate-401-middleware');
8
- async function authenticate401Middleware(context, next) {
9
- try {
10
- await next();
11
- }
12
- catch (err) {
13
- var message;
14
- if (err instanceof auth_error_1.AuthError) {
15
- message = context.t(`error.${err.errorCode}`, err.detail || {});
16
- debug(`auth error(${err.errorCode})`, message);
17
- }
18
- else {
19
- if ((err === null || err === void 0 ? void 0 : err.status) !== 401) {
20
- throw err;
21
- }
22
- message = err.message;
23
- }
24
- debug('401 error', message);
25
- context.status = 401;
26
- context.body = message;
27
- /*
28
- * 클라이언트 라우팅을 위한 ApiHistoryFallback의 상황과,
29
- * 서버라우팅의 상황에서 발생하는 던져지는 401 에러인 경우에는
30
- * error code에 맞춰서 적절하게 rewriting 되도록 한다.
31
- */
32
- const { method, header, path, originalUrl } = context;
33
- if (method == 'POST' && path.startsWith('/graphql')) {
34
- debug('Not rewriting', method, path, 'because the graphql request.');
35
- if (err.errorCode == error_code_1.SUBDOMAIN_NOTFOUND) {
36
- context.status = 403;
37
- }
38
- return;
39
- }
40
- if (!(0, accepts_1.accepts)(header.accept, ['text/html', '*/*'])) {
41
- debug('Not rewriting', method, path, 'because the client does not accept HTML.');
42
- return;
43
- }
44
- const { redirect_to } = context.query;
45
- const { redirectTo = redirect_to || originalUrl } = context.request.body || {};
46
- debug('rewriting to signin', method, path, message, redirectTo);
47
- switch (err.errorCode) {
48
- case error_code_1.SUBDOMAIN_NOTFOUND:
49
- context.redirect(`/auth/checkin?redirect_to=${encodeURIComponent(redirectTo)}`);
50
- break;
51
- case error_code_1.USER_LOCKED:
52
- return await context.render('auth-page', {
53
- pageElement: 'auth-activate',
54
- elementScript: '/auth/activate.js',
55
- data: {
56
- email: err.detail.email,
57
- message,
58
- redirectTo
59
- }
60
- });
61
- case error_code_1.USER_NOT_ACTIVATED:
62
- return await context.render('auth-page', {
63
- pageElement: 'auth-activate',
64
- elementScript: '/auth/activate.js',
65
- data: {
66
- email: err.detail.email,
67
- message,
68
- redirectTo
69
- }
70
- });
71
- default:
72
- return await context.render('auth-page', {
73
- pageElement: 'auth-signin',
74
- elementScript: '/auth/signin.js',
75
- data: {
76
- message: err instanceof auth_error_1.AuthError ? message : '',
77
- redirectTo
78
- }
79
- });
80
- }
81
- }
82
- }
83
- exports.authenticate401Middleware = authenticate401Middleware;
84
- //# sourceMappingURL=authenticate-401-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authenticate-401-middleware.js","sourceRoot":"","sources":["../../server/middlewares/authenticate-401-middleware.ts"],"names":[],"mappings":";;;AAAA,wDAA6F;AAC7F,qDAAgD;AAChD,8CAA0C;AAE1C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sDAAsD,CAAC,CAAA;AAE/E,KAAK,UAAU,yBAAyB,CAAC,OAAO,EAAE,IAAI;IAC3D,IAAI;QACF,MAAM,IAAI,EAAE,CAAA;KACb;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,OAAO,CAAA;QAEX,IAAI,GAAG,YAAY,sBAAS,EAAE;YAC5B,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;YAC/D,KAAK,CAAC,cAAc,GAAG,CAAC,SAAS,GAAG,EAAE,OAAO,CAAC,CAAA;SAC/C;aAAM;YACL,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,MAAK,GAAG,EAAE;gBACvB,MAAM,GAAG,CAAA;aACV;YAED,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;SACtB;QAED,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAE3B,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;QACpB,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;QAEtB;;;;WAIG;QAEH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAErD,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YACnD,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAA;YACpE,IAAI,GAAG,CAAC,SAAS,IAAI,+BAAkB,EAAE;gBACvC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;aACrB;YACD,OAAM;SACP;QAED,IAAI,CAAC,IAAA,iBAAO,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE;YACjD,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,0CAA0C,CAAC,CAAA;YAChF,OAAM;SACP;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACrC,MAAM,EAAE,UAAU,GAAG,WAAW,IAAI,WAAW,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;QAC9E,KAAK,CAAC,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;QAE/D,QAAQ,GAAG,CAAC,SAAS,EAAE;YACrB,KAAK,+BAAkB;gBACrB,OAAO,CAAC,QAAQ,CAAC,6BAA6B,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;gBAC/E,MAAK;YAEP,KAAK,wBAAW;gBACd,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvC,WAAW,EAAE,eAAe;oBAC5B,aAAa,EAAE,mBAAmB;oBAClC,IAAI,EAAE;wBACJ,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;wBACvB,OAAO;wBACP,UAAU;qBACX;iBACF,CAAC,CAAA;YAEJ,KAAK,+BAAkB;gBACrB,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvC,WAAW,EAAE,eAAe;oBAC5B,aAAa,EAAE,mBAAmB;oBAClC,IAAI,EAAE;wBACJ,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;wBACvB,OAAO;wBACP,UAAU;qBACX;iBACF,CAAC,CAAA;YAEJ;gBACE,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;oBACvC,WAAW,EAAE,aAAa;oBAC1B,aAAa,EAAE,iBAAiB;oBAChC,IAAI,EAAE;wBACJ,OAAO,EAAE,GAAG,YAAY,sBAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBAChD,UAAU;qBACX;iBACF,CAAC,CAAA;SACL;KACF;AACH,CAAC;AArFD,8DAqFC"}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.domainAuthenticateMiddleware = void 0;
4
- const env_1 = require("@things-factory/env");
5
- const typeorm_1 = require("typeorm");
6
- const user_1 = require("../service/user/user");
7
- const auth_error_1 = require("../errors/auth-error");
8
- const get_user_domains_1 = require("../utils/get-user-domains");
9
- const useVirtualHostBasedDomain = !!env_1.config.get('useVirtualHostBasedDomain');
10
- const fixed = env_1.config.get('subdomain');
11
- const subdomainOffset = env_1.config.getNumber('subdomainOffset', 2);
12
- const debug = require('debug')('things-factory:auth-base:domain-authenticate-middleware');
13
- process.domainOwnerGranted = async (domain, user) => {
14
- return domain && domain.owner === user.id;
15
- };
16
- process.superUserGranted = async (domain, user) => {
17
- if (!user.domains.length)
18
- user = await (0, typeorm_1.getRepository)(user_1.User).findOne(user.id, {
19
- relations: ['domains']
20
- });
21
- const systemDomain = user.domains.find((domain) => domain.subdomain === 'system');
22
- if (!systemDomain)
23
- return false;
24
- return systemDomain.owner === user.id;
25
- };
26
- /*
27
- * 현재 subdomain 과 user의 domain list와의 비교를 통해서,
28
- * 인증 성공 또는 인증 에러를 발생시킬 것인지를 결정한다.
29
- * 1. 현재 subdomain 이 결정되지 않은 경우.
30
- * - checkin로 이동한다.
31
- * 2. superUser 판단
32
- * 3. 현재 subdomain 이 결정된 경우.
33
- * - user의 domains 리스트에 해당 subdomain이 없다면, 인증 오류를 발생한다.
34
- */
35
- async function domainAuthenticateMiddleware(context, next) {
36
- const { t } = context;
37
- const { domain, user } = context.state;
38
- const subdomain = domain === null || domain === void 0 ? void 0 : domain.subdomain;
39
- debug('context - user, subdomain', user === null || user === void 0 ? void 0 : user.email, subdomain);
40
- // 1. 현재 subdomain 이 결정되지 않은 경우.
41
- // - checkin로 이동한다.
42
- if (!subdomain) {
43
- debug('subdomain not found, move to checkin');
44
- throw new auth_error_1.AuthError({
45
- errorCode: auth_error_1.AuthError.ERROR_CODES.SUBDOMAIN_NOTFOUND
46
- });
47
- }
48
- // 2. 현재 subdomain 이 결정된 경우.
49
- const userDomains = await (0, get_user_domains_1.getUserDomains)(user);
50
- if (userDomains.find(domain => domain.subdomain == subdomain)) {
51
- return await next();
52
- }
53
- throw new auth_error_1.AuthError({
54
- errorCode: auth_error_1.AuthError.ERROR_CODES.SUBDOMAIN_NOTFOUND
55
- });
56
- }
57
- exports.domainAuthenticateMiddleware = domainAuthenticateMiddleware;
58
- //# sourceMappingURL=domain-authenticate-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain-authenticate-middleware.js","sourceRoot":"","sources":["../../server/middlewares/domain-authenticate-middleware.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,qCAAuC;AACvC,+CAA2C;AAC3C,qDAAgD;AAChD,gEAA0D;AAE1D,MAAM,yBAAyB,GAAG,CAAC,CAAC,YAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;AAC3E,MAAM,KAAK,GAAG,YAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACrC,MAAM,eAAe,GAAG,YAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;AAW9D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,yDAAyD,CAAC,CAAA;AAEzF,OAAO,CAAC,kBAAkB,GAAG,KAAK,EAAE,MAAc,EAAE,IAAU,EAAoB,EAAE;IAClF,OAAO,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAA;AAC3C,CAAC,CAAA;AAED,OAAO,CAAC,gBAAgB,GAAG,KAAK,EAAE,MAAc,EAAE,IAAU,EAAoB,EAAE;IAChF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QACtB,IAAI,GAAG,MAAM,IAAA,uBAAa,EAAC,WAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;YAChD,SAAS,EAAE,CAAC,SAAS,CAAC;SACvB,CAAC,CAAA;IACJ,MAAM,YAAY,GAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAA;IACjG,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAA;IAE/B,OAAO,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAA;AACvC,CAAC,CAAA;AAED;;;;;;;;GAQG;AAEI,KAAK,UAAU,4BAA4B,CAAC,OAAY,EAAE,IAAS;IACxE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAEtC,MAAM,SAAS,GAAW,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAA;IAE3C,KAAK,CAAC,2BAA2B,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAE1D,gCAAgC;IAChC,mBAAmB;IACnB,IAAI,CAAC,SAAS,EAAE;QACd,KAAK,CAAC,sCAAsC,CAAC,CAAA;QAE7C,MAAM,IAAI,sBAAS,CAAC;YAClB,SAAS,EAAE,sBAAS,CAAC,WAAW,CAAC,kBAAkB;SACpD,CAAC,CAAA;KACH;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAa,MAAM,IAAA,iCAAc,EAAC,IAAI,CAAC,CAAA;IACxD,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE;QAC7D,OAAO,MAAM,IAAI,EAAE,CAAA;KACpB;IAED,MAAM,IAAI,sBAAS,CAAC;QAClB,SAAS,EAAE,sBAAS,CAAC,WAAW,CAAC,kBAAkB;KACpD,CAAC,CAAA;AACJ,CAAC;AA3BD,oEA2BC"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.graphqlAuthenticateMiddleware = void 0;
4
- const jwt_authenticate_middleware_1 = require("./jwt-authenticate-middleware");
5
- const domain_authenticate_middleware_1 = require("./domain-authenticate-middleware");
6
- const debug = require('debug')('things-factory:auth-base:graphql-authenticate-middleware');
7
- async function graphqlAuthenticateMiddleware(context, next) {
8
- const { method, path } = context;
9
- if (method == 'POST' && path.startsWith('/graphql')) {
10
- debug(method, path);
11
- await (0, jwt_authenticate_middleware_1.jwtAuthenticateMiddleware)(context, () => { });
12
- await (0, domain_authenticate_middleware_1.domainAuthenticateMiddleware)(context, () => { });
13
- }
14
- await next();
15
- }
16
- exports.graphqlAuthenticateMiddleware = graphqlAuthenticateMiddleware;
17
- //# sourceMappingURL=graphql-authenticate-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphql-authenticate-middleware.js","sourceRoot":"","sources":["../../server/middlewares/graphql-authenticate-middleware.ts"],"names":[],"mappings":";;;AAAA,+EAAyE;AACzE,qFAA+E;AAE/E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,0DAA0D,CAAC,CAAA;AAEnF,KAAK,UAAU,6BAA6B,CAAC,OAAO,EAAE,IAAI;IAC/D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAEhC,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QACnD,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEnB,MAAM,IAAA,uDAAyB,EAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAClD,MAAM,IAAA,6DAA4B,EAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;KACtD;IAED,MAAM,IAAI,EAAE,CAAA;AACd,CAAC;AAXD,sEAWC"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.initMiddlewares = void 0;
21
- const koa_passport_1 = __importDefault(require("koa-passport"));
22
- const authenticate_401_middleware_1 = require("./authenticate-401-middleware");
23
- const domain_authenticate_middleware_1 = require("./domain-authenticate-middleware");
24
- const graphql_authenticate_middleware_1 = require("./graphql-authenticate-middleware");
25
- const jwt_authenticate_middleware_1 = require("./jwt-authenticate-middleware");
26
- const debug = require('debug')('things-factory:auth-base:middleware');
27
- function initMiddlewares(app) {
28
- /* passport initialize */
29
- app.use(koa_passport_1.default.initialize());
30
- /* authentication error handling */
31
- app.use(authenticate_401_middleware_1.authenticate401Middleware);
32
- /*
33
- * post:graphql 에 대해서는 authenticationMiddleware를 적용한다.
34
- * graphql app을 router에 적용하지 못하기 때문임.
35
- */
36
- app.use(graphql_authenticate_middleware_1.graphqlAuthenticateMiddleware);
37
- }
38
- exports.initMiddlewares = initMiddlewares;
39
- process.on('bootstrap-module-subscription', (app, subscriptionMiddleware) => {
40
- debug('bootstrap-module-subscription');
41
- subscriptionMiddleware.push(jwt_authenticate_middleware_1.jwtAuthenticateMiddleware, domain_authenticate_middleware_1.domainAuthenticateMiddleware);
42
- // subscriptionMiddleware.push(jwtAuthenticateMiddleware, async (context, next) => {
43
- // const { domain, user } = context.state
44
- // if (domain && !user.domains.find(d => d.subdomain === domain.subdomain)) {
45
- // let message = `subdomain '${domain.subdomain}' is not allowed for the user`
46
- // debug('subscription', message)
47
- // context.throw(401, message)
48
- // }
49
- // debug('subscription', user.email, domain?.subdomain)
50
- // await next()
51
- // })
52
- });
53
- __exportStar(require("./jwt-authenticate-middleware"), exports);
54
- __exportStar(require("./domain-authenticate-middleware"), exports);
55
- __exportStar(require("./signin-middleware"), exports);
56
- __exportStar(require("./authenticate-401-middleware"), exports);
57
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,gEAAmC;AAEnC,+EAAyE;AACzE,qFAA+E;AAC/E,uFAAiF;AACjF,+EAAyE;AAEzE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,qCAAqC,CAAC,CAAA;AAErE,SAAgB,eAAe,CAAC,GAAQ;IACtC,yBAAyB;IACzB,GAAG,CAAC,GAAG,CAAC,sBAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IAE9B,mCAAmC;IACnC,GAAG,CAAC,GAAG,CAAC,uDAAyB,CAAC,CAAA;IAElC;;;OAGG;IACH,GAAG,CAAC,GAAG,CAAC,+DAA6B,CAAC,CAAA;AACxC,CAAC;AAZD,0CAYC;AAED,OAAO,CAAC,EAAE,CAAC,+BAAsC,EAAE,CAAC,GAAG,EAAE,sBAAsB,EAAE,EAAE;IACjF,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAEtC,sBAAsB,CAAC,IAAI,CAAC,uDAAyB,EAAE,6DAA4B,CAAC,CAAA;IAEpF,oFAAoF;IACpF,2CAA2C;IAE3C,+EAA+E;IAC/E,kFAAkF;IAClF,qCAAqC;IACrC,kCAAkC;IAClC,MAAM;IAEN,yDAAyD;IAEzD,iBAAiB;IACjB,KAAK;AACP,CAAC,CAAC,CAAA;AAEF,gEAA6C;AAC7C,mEAAgD;AAChD,sDAAmC;AACnC,gEAA6C"}
@@ -1,77 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.jwtAuthenticateMiddleware = void 0;
7
- const passport_1 = __importDefault(require("passport"));
8
- const passport_jwt_1 = require("passport-jwt");
9
- const user_1 = require("../service/user/user");
10
- const verification_token_1 = require("../service/verification-token/verification-token");
11
- const get_secret_1 = require("../utils/get-secret");
12
- const access_token_cookie_1 = require("../utils/access-token-cookie");
13
- const make_verification_token_1 = require("../controllers/utils/make-verification-token");
14
- const save_verification_token_1 = require("../controllers/utils/save-verification-token");
15
- const debug = require('debug')('things-factory:auth-base:jwt-authenticate-middleware');
16
- passport_1.default.use(new passport_jwt_1.Strategy({
17
- secretOrKey: get_secret_1.SECRET,
18
- passReqToCallback: true,
19
- jwtFromRequest: passport_jwt_1.ExtractJwt.fromExtractors([
20
- passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(),
21
- passport_jwt_1.ExtractJwt.fromHeader('authorization'),
22
- passport_jwt_1.ExtractJwt.fromHeader('x-access-token'),
23
- passport_jwt_1.ExtractJwt.fromUrlQueryParameter('access_token'),
24
- passport_jwt_1.ExtractJwt.fromBodyField('access_token'),
25
- req => {
26
- var token = null;
27
- token = (0, access_token_cookie_1.getAccessTokenCookie)(req === null || req === void 0 ? void 0 : req.ctx);
28
- return token;
29
- }
30
- ])
31
- }, async (request, decoded, done) => {
32
- try {
33
- return done(null, decoded);
34
- }
35
- catch (error) {
36
- return done(error);
37
- }
38
- }));
39
- async function jwtAuthenticateMiddleware(context, next) {
40
- const { path } = context;
41
- const { user } = context.state;
42
- if (user) {
43
- debug('reuse user', path, user === null || user === void 0 ? void 0 : user.email);
44
- return await next();
45
- }
46
- return await passport_1.default.authenticate('jwt', { session: false }, async (err, decoded, info) => {
47
- debug('passport.authenticate - jwt', path);
48
- if (err || !decoded) {
49
- const e = (context.state.error = err || info);
50
- debug('error - jwt', path, err === null || err === void 0 ? void 0 : err.message, info === null || info === void 0 ? void 0 : info.message);
51
- // TODO cookie 가 authenticate에 적용된 상황에서 오류가 발생한 경우만, 쿠키를 클리어한다.
52
- (0, access_token_cookie_1.clearAccessTokenCookie)(context);
53
- context.throw(401, e.message);
54
- }
55
- else {
56
- const userEntity = await user_1.User.checkAuth(decoded);
57
- if (userEntity.status === user_1.UserStatus.PWD_RESET_REQUIRED) {
58
- try {
59
- const token = (0, make_verification_token_1.makeVerificationToken)();
60
- await (0, save_verification_token_1.saveVerificationToken)(userEntity.id, token, verification_token_1.VerificationTokenType.PASSWORD_RESET);
61
- (0, access_token_cookie_1.clearAccessTokenCookie)(context);
62
- context.redirect(`/auth/reset-password?token=${token}`);
63
- }
64
- catch (e) {
65
- throw err;
66
- }
67
- }
68
- else {
69
- context.state.user = userEntity;
70
- context.state.decodedToken = decoded;
71
- await next();
72
- }
73
- }
74
- })(context, next);
75
- }
76
- exports.jwtAuthenticateMiddleware = jwtAuthenticateMiddleware;
77
- //# sourceMappingURL=jwt-authenticate-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt-authenticate-middleware.js","sourceRoot":"","sources":["../../server/middlewares/jwt-authenticate-middleware.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA+B;AAC/B,+CAAkE;AAClE,+CAAuD;AACvD,yFAAwF;AACxF,oDAA4C;AAC5C,sEAA2F;AAC3F,0FAAoF;AACpF,0FAAoF;AAEpF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sDAAsD,CAAC,CAAA;AAEtF,kBAAQ,CAAC,GAAG,CACV,IAAI,uBAAW,CACb;IACE,WAAW,EAAE,mBAAM;IACnB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,yBAAU,CAAC,cAAc,CAAC;QACxC,yBAAU,CAAC,2BAA2B,EAAE;QACxC,yBAAU,CAAC,UAAU,CAAC,eAAe,CAAC;QACtC,yBAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACvC,yBAAU,CAAC,qBAAqB,CAAC,cAAc,CAAC;QAChD,yBAAU,CAAC,aAAa,CAAC,cAAc,CAAC;QACxC,GAAG,CAAC,EAAE;YACJ,IAAI,KAAK,GAAG,IAAI,CAAA;YAChB,KAAK,GAAG,IAAA,0CAAoB,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,CAAC,CAAA;YACtC,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAC;CACH,EACD,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC/B,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KAC3B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;KACnB;AACH,CAAC,CACF,CACF,CAAA;AAEM,KAAK,UAAU,yBAAyB,CAAC,OAAO,EAAE,IAAI;IAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAC9B,IAAI,IAAI,EAAE;QACR,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC,CAAA;QACtC,OAAO,MAAM,IAAI,EAAE,CAAA;KACpB;IAED,OAAO,MAAM,kBAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACzF,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAA;QAE1C,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YACnB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA;YAC7C,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAA;YAEvD,+DAA+D;YAC/D,IAAA,4CAAsB,EAAC,OAAO,CAAC,CAAA;YAE/B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;SAC9B;aAAM;YACL,MAAM,UAAU,GAAG,MAAM,WAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAEhD,IAAI,UAAU,CAAC,MAAM,KAAK,iBAAU,CAAC,kBAAkB,EAAE;gBACvD,IAAI;oBACF,MAAM,KAAK,GAAG,IAAA,+CAAqB,GAAE,CAAA;oBACrC,MAAM,IAAA,+CAAqB,EAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,0CAAqB,CAAC,cAAc,CAAC,CAAA;oBACvF,IAAA,4CAAsB,EAAC,OAAO,CAAC,CAAA;oBAC/B,OAAO,CAAC,QAAQ,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAA;iBACxD;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,GAAG,CAAA;iBACV;aACF;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAA;gBAC/B,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAA;gBACpC,MAAM,IAAI,EAAE,CAAA;aACb;SACF;IACH,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACnB,CAAC;AAtCD,8DAsCC"}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.signinMiddleware = void 0;
7
- const passport_1 = __importDefault(require("passport"));
8
- const passport_local_1 = require("passport-local");
9
- const signin_1 = require("../controllers/signin");
10
- const debug = require('debug')('things-factory:auth-base:signin-middleware');
11
- passport_1.default.use('signin', new passport_local_1.Strategy({
12
- usernameField: 'email',
13
- passwordField: 'password'
14
- }, async (email, password, done) => {
15
- try {
16
- const { user: userInfo, token, domains } = await (0, signin_1.signin)({
17
- email,
18
- password
19
- });
20
- return done(null, {
21
- user: userInfo,
22
- token,
23
- domains
24
- }, {
25
- message: 'Logged in Successfully'
26
- });
27
- }
28
- catch (error) {
29
- return done(error);
30
- }
31
- }));
32
- async function signinMiddleware(context, next) {
33
- return passport_1.default.authenticate('signin', { session: false }, async (err, user, info) => {
34
- if (err || !user) {
35
- debug('signin fail', err);
36
- throw err;
37
- }
38
- else {
39
- const { user: userInfo, token } = user;
40
- context.state.user = userInfo;
41
- context.state.token = token;
42
- await next();
43
- }
44
- })(context, next);
45
- }
46
- exports.signinMiddleware = signinMiddleware;
47
- //# sourceMappingURL=signin-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signin-middleware.js","sourceRoot":"","sources":["../../server/middlewares/signin-middleware.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA+B;AAC/B,mDAA0D;AAC1D,kDAA8C;AAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,4CAA4C,CAAC,CAAA;AAE5E,kBAAQ,CAAC,GAAG,CACV,QAAQ,EACR,IAAI,yBAAa,CACf;IACE,aAAa,EAAE,OAAO;IACtB,aAAa,EAAE,UAAU;CAC1B,EACD,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAC9B,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,IAAA,eAAM,EAAC;YACtD,KAAK;YACL,QAAQ;SACT,CAAC,CAAA;QAEF,OAAO,IAAI,CACT,IAAI,EACJ;YACE,IAAI,EAAE,QAAQ;YACd,KAAK;YACL,OAAO;SACR,EACD;YACE,OAAO,EAAE,wBAAwB;SAClC,CACF,CAAA;KACF;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;KACnB;AACH,CAAC,CACF,CACF,CAAA;AAEM,KAAK,UAAU,gBAAgB,CAAC,OAAO,EAAE,IAAI;IAClD,OAAO,kBAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QACnF,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YAChB,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;YAEzB,MAAM,GAAG,CAAA;SACV;aAAM;YACL,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YAEtC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAA;YAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;YAE3B,MAAM,IAAI,EAAE,CAAA;SACb;IACH,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACnB,CAAC;AAfD,4CAeC"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeedUsers1548206416130 = void 0;
4
- const shell_1 = require("@things-factory/shell");
5
- const env_1 = require("@things-factory/env");
6
- const typeorm_1 = require("typeorm");
7
- const user_1 = require("../service/user/user");
8
- const ADMIN_ACCOUNT = env_1.config.get('adminAccount', {
9
- name: 'Admin',
10
- email: 'admin@hatiolab.com',
11
- password: 'admin'
12
- });
13
- const SEED_USERS = [
14
- Object.assign(Object.assign({}, ADMIN_ACCOUNT), { userType: 'user', status: user_1.UserStatus.ACTIVATED })
15
- ];
16
- class SeedUsers1548206416130 {
17
- async up(queryRunner) {
18
- const userRepository = (0, typeorm_1.getRepository)(user_1.User);
19
- const domainRepository = (0, typeorm_1.getRepository)(shell_1.Domain);
20
- const domain = await domainRepository.findOne({ where: { name: 'SYSTEM' } });
21
- try {
22
- for (let i = 0; i < SEED_USERS.length; i++) {
23
- const user = SEED_USERS[i];
24
- const salt = user_1.User.generateSalt();
25
- const password = user_1.User.encode(user.password, salt);
26
- await userRepository.save(Object.assign(Object.assign({}, user), { salt,
27
- password, domains: [domain] }));
28
- }
29
- }
30
- catch (e) {
31
- console.error(e);
32
- }
33
- const admin = await userRepository.findOne({ where: { email: 'admin@hatiolab.com' } });
34
- domain.owner = admin.id;
35
- await domainRepository.save(domain);
36
- }
37
- async down(queryRunner) {
38
- const repository = (0, typeorm_1.getRepository)(user_1.User);
39
- SEED_USERS.reverse().forEach(async (user) => {
40
- let record = await repository.findOne({ email: user.email });
41
- await repository.remove(record);
42
- });
43
- }
44
- }
45
- exports.SeedUsers1548206416130 = SeedUsers1548206416130;
46
- //# sourceMappingURL=1548206416130-SeedUser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1548206416130-SeedUser.js","sourceRoot":"","sources":["../../server/migrations/1548206416130-SeedUser.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAC9C,6CAA4C;AAC5C,qCAAwE;AACxE,+CAAuD;AAEvD,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,cAAc,EAAE;IAC/C,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,oBAAoB;IAC3B,QAAQ,EAAE,OAAO;CAClB,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG;oCAEZ,aAAa,KAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAU,CAAC,SAAS;CAE/B,CAAA;AACD,MAAa,sBAAsB;IAC1B,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,cAAc,GAAG,IAAA,uBAAa,EAAC,WAAI,CAAC,CAAA;QAC1C,MAAM,gBAAgB,GAAG,IAAA,uBAAa,EAAC,cAAM,CAAC,CAAA;QAE9C,MAAM,MAAM,GAAW,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAA;QAEpF,IAAI;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;gBAC1B,MAAM,IAAI,GAAG,WAAI,CAAC,YAAY,EAAE,CAAA;gBAChC,MAAM,QAAQ,GAAG,WAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAEjD,MAAM,cAAc,CAAC,IAAI,iCACpB,IAAI,KACP,IAAI;oBACJ,QAAQ,EACR,OAAO,EAAE,CAAC,MAAM,CAAC,IACjB,CAAA;aACH;SACF;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACjB;QAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAA;QACtF,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAA;QAEvB,MAAM,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,WAAI,CAAC,CAAA;QAEtC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YACxC,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YAC5D,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAtCD,wDAsCC"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SeedPrivilege1566805283882 = void 0;
4
- const typeorm_1 = require("typeorm");
5
- const privilege_1 = require("../service/privilege/privilege");
6
- class SeedPrivilege1566805283882 {
7
- async up(queryRunner) {
8
- const privilegeRepository = (0, typeorm_1.getRepository)(privilege_1.Privilege);
9
- const { schema } = require('@things-factory/shell/dist-server/schema');
10
- await schema();
11
- const privileges = process['PRIVILEGES'];
12
- try {
13
- for (const [category, name] of Object.values(privileges)) {
14
- if (0 == (await privilegeRepository.count({ where: { category, name } }))) {
15
- await privilegeRepository.save({ category, name });
16
- }
17
- }
18
- }
19
- catch (e) {
20
- console.error(e);
21
- }
22
- }
23
- async down(queryRunner) { }
24
- }
25
- exports.SeedPrivilege1566805283882 = SeedPrivilege1566805283882;
26
- //# sourceMappingURL=1566805283882-SeedPrivilege.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1566805283882-SeedPrivilege.js","sourceRoot":"","sources":["../../server/migrations/1566805283882-SeedPrivilege.ts"],"names":[],"mappings":";;;AAAA,qCAAwE;AACxE,8DAA0D;AAE1D,MAAa,0BAA0B;IAC9B,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,mBAAmB,GAAG,IAAA,uBAAa,EAAC,qBAAS,CAAC,CAAA;QAEpD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,0CAA0C,CAAC,CAAA;QACtE,MAAM,MAAM,EAAE,CAAA;QACd,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QAExC,IAAI;YACF,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAA8B,CAAC,EAAE;gBAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE;oBACzE,MAAM,mBAAmB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;iBACnD;aACF;SACF;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SACjB;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB,IAAiB,CAAC;CAC7D;AApBD,gEAoBC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.migrations = void 0;
4
- const glob = require('glob');
5
- const path = require('path');
6
- exports.migrations = [];
7
- glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function (file) {
8
- if (file.indexOf('index.js') !== -1)
9
- return;
10
- exports.migrations = exports.migrations.concat(Object.values(require(path.resolve(file))) || []);
11
- });
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/migrations/index.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjB,QAAA,UAAU,GAAG,EAAE,CAAA;AAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI;IACzE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAE,OAAM;IAC3C,kBAAU,GAAG,kBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA"}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.authCheckinRouter = void 0;
7
- const env_1 = require("@things-factory/env");
8
- const accepts_1 = require("../utils/accepts");
9
- const shell_1 = require("@things-factory/shell");
10
- const koa_router_1 = __importDefault(require("koa-router"));
11
- const login_history_1 = require("../service/login-history/login-history");
12
- const access_token_cookie_1 = require("../utils/access-token-cookie");
13
- const get_user_domains_1 = require("../utils/get-user-domains");
14
- const debug = require('debug')('things-factory:auth-base:checkin-router');
15
- const domainType = env_1.config.get('domainType');
16
- exports.authCheckinRouter = new koa_router_1.default();
17
- exports.authCheckinRouter.get('/auth/checkin/:subdomain?', async (context, next) => {
18
- const { request, t } = context;
19
- const header = request.header;
20
- const { user } = context.state;
21
- let { subdomain } = context.params;
22
- let domains = await (0, get_user_domains_1.getUserDomains)(user);
23
- if (domainType)
24
- domains = domains.filter(d => d.extType == domainType);
25
- if (!(0, accepts_1.accepts)(header.accept, ['text/html', '*/*'])) {
26
- // When request expects non html response
27
- try {
28
- debug('get:/auth/checkin/:subdomain?', subdomain);
29
- if (!subdomain)
30
- throw new Error(t('error.domain not specified', { subdomain })); // When params doesn't have subdomain
31
- const checkInDomain = domains.find((d) => d.subdomain === subdomain); // When no matched domain with subdomain
32
- if (!checkInDomain)
33
- throw new Error(t('error.domain not specified', { subdomain }));
34
- await checkIn(checkInDomain, null, context);
35
- context.body = true;
36
- }
37
- catch (e) {
38
- (0, access_token_cookie_1.clearAccessTokenCookie)(context);
39
- throw e;
40
- }
41
- }
42
- else {
43
- // When request expects html response
44
- const { redirect_to: redirectTo = '/' } = context.query;
45
- try {
46
- let message;
47
- debug('get:/auth/checkin/:subdomain?', subdomain, redirectTo);
48
- if (!subdomain) {
49
- /* try to find domain from redirectTo path */
50
- subdomain = (0, shell_1.findSubdomainFromPath)(context, redirectTo);
51
- }
52
- let checkInDomain;
53
- if (subdomain) {
54
- checkInDomain = domains.find(d => d.subdomain == subdomain);
55
- if (!checkInDomain)
56
- message = t('error.domain not allowed', { subdomain });
57
- }
58
- else if (domains.length === 1) {
59
- checkInDomain = domains[0];
60
- }
61
- if (checkInDomain)
62
- return await checkIn(checkInDomain, redirectTo, context);
63
- await context.render('auth-page', {
64
- pageElement: 'auth-checkin',
65
- elementScript: '/auth/checkin.js',
66
- data: {
67
- user,
68
- domains,
69
- domainType,
70
- redirectTo,
71
- message
72
- }
73
- });
74
- }
75
- catch (e) {
76
- (0, access_token_cookie_1.clearAccessTokenCookie)(context);
77
- context.redirect(`/auth/signin?email=${encodeURIComponent(user.email)}&redirect_to=${encodeURIComponent(redirectTo)}`);
78
- }
79
- }
80
- });
81
- exports.authCheckinRouter.get('/auth/domains', async (context) => {
82
- const { user } = context.state;
83
- var domains = await (0, get_user_domains_1.getUserDomains)(user);
84
- if (domainType) {
85
- domains = domains.filter(d => d.extType == domainType);
86
- }
87
- context.body = domains;
88
- });
89
- async function checkIn(checkInDomain, redirectTo, context) {
90
- const user = context.state.user;
91
- await login_history_1.LoginHistory.stamp(checkInDomain, user, context.req.connection.remoteAddress);
92
- if (redirectTo) {
93
- return context.redirect((0, shell_1.getRedirectSubdomainPath)(context, checkInDomain.subdomain, redirectTo));
94
- }
95
- }
96
- //# sourceMappingURL=auth-checkin-router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-checkin-router.js","sourceRoot":"","sources":["../../server/router/auth-checkin-router.ts"],"names":[],"mappings":"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"}