@things-factory/auth-base 8.0.0 → 9.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -0
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/tsconfig.tsbuildinfo +1 -1
  5. package/dist-client/verify-webauthn.d.ts +13 -0
  6. package/dist-client/verify-webauthn.js +72 -0
  7. package/dist-client/verify-webauthn.js.map +1 -0
  8. package/dist-server/constants/error-code.d.ts +2 -0
  9. package/dist-server/constants/error-code.js +3 -1
  10. package/dist-server/constants/error-code.js.map +1 -1
  11. package/dist-server/controllers/change-pwd.js +2 -2
  12. package/dist-server/controllers/change-pwd.js.map +1 -1
  13. package/dist-server/controllers/delete-user.js +13 -12
  14. package/dist-server/controllers/delete-user.js.map +1 -1
  15. package/dist-server/controllers/invitation.d.ts +2 -1
  16. package/dist-server/controllers/invitation.js +30 -5
  17. package/dist-server/controllers/invitation.js.map +1 -1
  18. package/dist-server/controllers/profile.d.ts +4 -3
  19. package/dist-server/controllers/profile.js +20 -2
  20. package/dist-server/controllers/profile.js.map +1 -1
  21. package/dist-server/controllers/signin.d.ts +4 -1
  22. package/dist-server/controllers/signin.js +17 -1
  23. package/dist-server/controllers/signin.js.map +1 -1
  24. package/dist-server/controllers/signup.js +13 -4
  25. package/dist-server/controllers/signup.js.map +1 -1
  26. package/dist-server/controllers/unlock-user.js +1 -0
  27. package/dist-server/controllers/unlock-user.js.map +1 -1
  28. package/dist-server/controllers/verification.js +1 -0
  29. package/dist-server/controllers/verification.js.map +1 -1
  30. package/dist-server/middlewares/signin-middleware.js +5 -4
  31. package/dist-server/middlewares/signin-middleware.js.map +1 -1
  32. package/dist-server/middlewares/webauthn-middleware.js.map +1 -1
  33. package/dist-server/migrations/1548206416130-SeedUser.js +2 -1
  34. package/dist-server/migrations/1548206416130-SeedUser.js.map +1 -1
  35. package/dist-server/router/auth-checkin-router.js +8 -2
  36. package/dist-server/router/auth-checkin-router.js.map +1 -1
  37. package/dist-server/router/auth-private-process-router.js +12 -7
  38. package/dist-server/router/auth-private-process-router.js.map +1 -1
  39. package/dist-server/router/auth-public-process-router.js +20 -9
  40. package/dist-server/router/auth-public-process-router.js.map +1 -1
  41. package/dist-server/router/auth-signin-router.js +10 -4
  42. package/dist-server/router/auth-signin-router.js.map +1 -1
  43. package/dist-server/router/webauthn-router.js +51 -1
  44. package/dist-server/router/webauthn-router.js.map +1 -1
  45. package/dist-server/service/invitation/invitation-mutation.d.ts +3 -2
  46. package/dist-server/service/invitation/invitation-mutation.js +20 -8
  47. package/dist-server/service/invitation/invitation-mutation.js.map +1 -1
  48. package/dist-server/service/user/user-mutation.d.ts +10 -9
  49. package/dist-server/service/user/user-mutation.js +112 -54
  50. package/dist-server/service/user/user-mutation.js.map +1 -1
  51. package/dist-server/service/user/user-types.d.ts +1 -0
  52. package/dist-server/service/user/user-types.js +4 -0
  53. package/dist-server/service/user/user-types.js.map +1 -1
  54. package/dist-server/service/user/user.d.ts +1 -0
  55. package/dist-server/service/user/user.js +40 -14
  56. package/dist-server/service/user/user.js.map +1 -1
  57. package/dist-server/templates/account-unlock-email.d.ts +2 -1
  58. package/dist-server/templates/account-unlock-email.js +1 -1
  59. package/dist-server/templates/account-unlock-email.js.map +1 -1
  60. package/dist-server/templates/invitation-email.d.ts +2 -1
  61. package/dist-server/templates/invitation-email.js +1 -1
  62. package/dist-server/templates/invitation-email.js.map +1 -1
  63. package/dist-server/templates/verification-email.d.ts +2 -1
  64. package/dist-server/templates/verification-email.js +1 -1
  65. package/dist-server/templates/verification-email.js.map +1 -1
  66. package/dist-server/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +6 -6
  68. package/translations/en.json +5 -1
  69. package/translations/ja.json +5 -1
  70. package/translations/ko.json +6 -3
  71. package/translations/ms.json +5 -1
  72. package/translations/zh.json +5 -1
  73. package/client/actions/auth.ts +0 -24
  74. package/client/auth.ts +0 -272
  75. package/client/bootstrap.ts +0 -47
  76. package/client/directive/privileged.ts +0 -28
  77. package/client/index.ts +0 -3
  78. package/client/profiled.ts +0 -83
  79. package/client/reducers/auth.ts +0 -31
  80. package/server/constants/error-code.ts +0 -20
  81. package/server/constants/error-message.ts +0 -0
  82. package/server/constants/max-age.ts +0 -1
  83. package/server/controllers/auth.ts +0 -5
  84. package/server/controllers/change-pwd.ts +0 -99
  85. package/server/controllers/checkin.ts +0 -21
  86. package/server/controllers/delete-user.ts +0 -68
  87. package/server/controllers/invitation.ts +0 -132
  88. package/server/controllers/profile.ts +0 -28
  89. package/server/controllers/reset-password.ts +0 -126
  90. package/server/controllers/signin.ts +0 -79
  91. package/server/controllers/signup.ts +0 -60
  92. package/server/controllers/unlock-user.ts +0 -61
  93. package/server/controllers/utils/make-invitation-token.ts +0 -5
  94. package/server/controllers/utils/make-verification-token.ts +0 -4
  95. package/server/controllers/utils/password-rule.ts +0 -120
  96. package/server/controllers/utils/save-invitation-token.ts +0 -10
  97. package/server/controllers/utils/save-verification-token.ts +0 -12
  98. package/server/controllers/verification.ts +0 -83
  99. package/server/errors/auth-error.ts +0 -24
  100. package/server/errors/index.ts +0 -2
  101. package/server/errors/user-domain-not-match-error.ts +0 -29
  102. package/server/index.ts +0 -37
  103. package/server/middlewares/authenticate-401-middleware.ts +0 -114
  104. package/server/middlewares/domain-authenticate-middleware.ts +0 -78
  105. package/server/middlewares/graphql-authenticate-middleware.ts +0 -13
  106. package/server/middlewares/index.ts +0 -67
  107. package/server/middlewares/jwt-authenticate-middleware.ts +0 -84
  108. package/server/middlewares/signin-middleware.ts +0 -55
  109. package/server/middlewares/webauthn-middleware.ts +0 -127
  110. package/server/migrations/1548206416130-SeedUser.ts +0 -59
  111. package/server/migrations/1566805283882-SeedPrivilege.ts +0 -28
  112. package/server/migrations/index.ts +0 -9
  113. package/server/router/auth-checkin-router.ts +0 -107
  114. package/server/router/auth-private-process-router.ts +0 -107
  115. package/server/router/auth-public-process-router.ts +0 -302
  116. package/server/router/auth-signin-router.ts +0 -55
  117. package/server/router/auth-signup-router.ts +0 -95
  118. package/server/router/index.ts +0 -9
  119. package/server/router/oauth2/index.ts +0 -2
  120. package/server/router/oauth2/oauth2-authorize-router.ts +0 -81
  121. package/server/router/oauth2/oauth2-router.ts +0 -165
  122. package/server/router/oauth2/oauth2-server.ts +0 -262
  123. package/server/router/oauth2/passport-oauth2-client-password.ts +0 -87
  124. package/server/router/oauth2/passport-refresh-token.ts +0 -87
  125. package/server/router/path-base-domain-router.ts +0 -8
  126. package/server/router/site-root-router.ts +0 -48
  127. package/server/router/webauthn-router.ts +0 -87
  128. package/server/routes.ts +0 -80
  129. package/server/service/app-binding/app-binding-mutation.ts +0 -22
  130. package/server/service/app-binding/app-binding-query.ts +0 -92
  131. package/server/service/app-binding/app-binding-types.ts +0 -11
  132. package/server/service/app-binding/app-binding.ts +0 -17
  133. package/server/service/app-binding/index.ts +0 -4
  134. package/server/service/appliance/appliance-mutation.ts +0 -113
  135. package/server/service/appliance/appliance-query.ts +0 -76
  136. package/server/service/appliance/appliance-types.ts +0 -56
  137. package/server/service/appliance/appliance.ts +0 -133
  138. package/server/service/appliance/index.ts +0 -6
  139. package/server/service/application/application-mutation.ts +0 -104
  140. package/server/service/application/application-query.ts +0 -98
  141. package/server/service/application/application-types.ts +0 -76
  142. package/server/service/application/application.ts +0 -216
  143. package/server/service/application/index.ts +0 -6
  144. package/server/service/auth-provider/auth-provider-mutation.ts +0 -159
  145. package/server/service/auth-provider/auth-provider-parameter-spec.ts +0 -24
  146. package/server/service/auth-provider/auth-provider-query.ts +0 -88
  147. package/server/service/auth-provider/auth-provider-type.ts +0 -67
  148. package/server/service/auth-provider/auth-provider.ts +0 -155
  149. package/server/service/auth-provider/index.ts +0 -7
  150. package/server/service/domain-generator/domain-generator-mutation.ts +0 -117
  151. package/server/service/domain-generator/domain-generator-types.ts +0 -46
  152. package/server/service/domain-generator/index.ts +0 -3
  153. package/server/service/granted-role/granted-role-mutation.ts +0 -156
  154. package/server/service/granted-role/granted-role-query.ts +0 -60
  155. package/server/service/granted-role/granted-role.ts +0 -27
  156. package/server/service/granted-role/index.ts +0 -6
  157. package/server/service/index.ts +0 -90
  158. package/server/service/invitation/index.ts +0 -6
  159. package/server/service/invitation/invitation-mutation.ts +0 -63
  160. package/server/service/invitation/invitation-query.ts +0 -33
  161. package/server/service/invitation/invitation-types.ts +0 -11
  162. package/server/service/invitation/invitation.ts +0 -63
  163. package/server/service/login-history/index.ts +0 -5
  164. package/server/service/login-history/login-history-query.ts +0 -51
  165. package/server/service/login-history/login-history-type.ts +0 -12
  166. package/server/service/login-history/login-history.ts +0 -45
  167. package/server/service/partner/index.ts +0 -6
  168. package/server/service/partner/partner-mutation.ts +0 -61
  169. package/server/service/partner/partner-query.ts +0 -102
  170. package/server/service/partner/partner-types.ts +0 -11
  171. package/server/service/partner/partner.ts +0 -57
  172. package/server/service/password-history/index.ts +0 -3
  173. package/server/service/password-history/password-history.ts +0 -16
  174. package/server/service/privilege/index.ts +0 -6
  175. package/server/service/privilege/privilege-directive.ts +0 -77
  176. package/server/service/privilege/privilege-mutation.ts +0 -92
  177. package/server/service/privilege/privilege-query.ts +0 -94
  178. package/server/service/privilege/privilege-types.ts +0 -60
  179. package/server/service/privilege/privilege.ts +0 -102
  180. package/server/service/role/index.ts +0 -6
  181. package/server/service/role/role-mutation.ts +0 -109
  182. package/server/service/role/role-query.ts +0 -155
  183. package/server/service/role/role-types.ts +0 -81
  184. package/server/service/role/role.ts +0 -72
  185. package/server/service/user/domain-query.ts +0 -24
  186. package/server/service/user/index.ts +0 -7
  187. package/server/service/user/user-mutation.ts +0 -413
  188. package/server/service/user/user-query.ts +0 -145
  189. package/server/service/user/user-types.ts +0 -97
  190. package/server/service/user/user.ts +0 -354
  191. package/server/service/users-auth-providers/index.ts +0 -5
  192. package/server/service/users-auth-providers/users-auth-providers.ts +0 -71
  193. package/server/service/verification-token/index.ts +0 -3
  194. package/server/service/verification-token/verification-token.ts +0 -60
  195. package/server/service/web-auth-credential/index.ts +0 -3
  196. package/server/service/web-auth-credential/web-auth-credential.ts +0 -67
  197. package/server/templates/account-unlock-email.ts +0 -65
  198. package/server/templates/invitation-email.ts +0 -66
  199. package/server/templates/reset-password-email.ts +0 -65
  200. package/server/templates/verification-email.ts +0 -66
  201. package/server/types.ts +0 -21
  202. package/server/utils/accepts.ts +0 -11
  203. package/server/utils/access-token-cookie.ts +0 -61
  204. package/server/utils/check-permission.ts +0 -52
  205. package/server/utils/check-user-belongs-domain.ts +0 -19
  206. package/server/utils/check-user-has-role.ts +0 -29
  207. package/server/utils/encrypt-state.ts +0 -22
  208. package/server/utils/get-aes-256-key.ts +0 -13
  209. package/server/utils/get-domain-from-hostname.ts +0 -7
  210. package/server/utils/get-domain-users.ts +0 -38
  211. package/server/utils/get-secret.ts +0 -13
  212. package/server/utils/get-user-domains.ts +0 -112
@@ -1,65 +0,0 @@
1
- export function getResetPasswordEmailForm({ name, resetUrl }) {
2
- return `
3
- <html lang="en">
4
- <head>
5
- <meta charset="utf-8" />
6
-
7
- <title>reset password</title>
8
- <meta name="description" content="Password Reset" />
9
- <meta name="author" content="hatiolab" />
10
- <meta name="google" content="notranslate"/>
11
- </head>
12
-
13
- <body>
14
- <div style="background-color:#f6f6f6">
15
- <!--header begin-->
16
- <div style="background-color:#fff;padding:0 10px;border-top: 2px solid #394e64;">
17
- <a href="#" target="_blank"
18
- ><img
19
- src="http://www.hatiolab.com/assets/img/logo-operato.png"
20
- style="max-height:50px"
21
- /></a>
22
- </div>
23
- <!--header end-->
24
-
25
- <!--title begin-->
26
- <div
27
- style="background-color:#22a6a7;padding:12px 10px 10px 10px;min-height:50px;"
28
- >
29
- <img
30
- src="http://www.hatiolab.com/assets/img/icon-mail.png"
31
- style="float:left;margin:0 10px 0 40px"
32
- />
33
- <span style="display:block;color:#fff;font-size:20px"
34
- >Hi ${name}!</span
35
- >
36
- <span style="display:block;color:#fff;font-size:34px;font-weight:bold"
37
- >Reset password</span
38
- >
39
- </div>
40
- <!--title end-->
41
-
42
- <!--body begin-->
43
- <p style="padding:10px 20px;line-height:1.5;font-size:16px">
44
- Click the button below to reset password.
45
- <br />
46
- <a
47
- href="${resetUrl}"
48
- style="display:inline-block;margin:10px 5px 5px 0;border-radius:7px;background-color:#22a6a7;padding:7px 15px;color:#fff;font-size:18px;text-decoration:none;text-transform:capitalize;"
49
- >reset password</a
50
- >
51
- </p>
52
- <!--body end-->
53
-
54
- <!--footer begin-->
55
- <div
56
- style="background-color:#3d5874;padding:7px 20px 5px 20px;font-size:12px;color:#efefef"
57
- >
58
- © Hatio, Lab. Inc. All rights reserved.
59
- </div>
60
- <!--footer end-->
61
- </div>
62
- </body>
63
- </html>
64
- `
65
- }
@@ -1,66 +0,0 @@
1
- export function getVerificationEmailForm({ name, verifyUrl }) {
2
- return `
3
- <html lang="en">
4
- <head>
5
- <meta charset="utf-8" />
6
-
7
- <title>Verify your email</title>
8
- <meta name="description" content="Email Verification" />
9
- <meta name="author" content="hatiolab" />
10
- <meta name="google" content="notranslate"/>
11
- </head>
12
-
13
- <body>
14
- <div style="background-color:#f6f6f6">
15
- <!--header begin-->
16
- <div style="background-color:#fff;padding:0 10px;border-top: 2px solid #394e64;">
17
- <a href="#" target="_blank"
18
- ><img
19
- src="http://www.hatiolab.com/assets/img/logo-operato.png"
20
- style="max-height:50px"
21
- /></a>
22
- </div>
23
- <!--header end-->
24
-
25
- <!--title begin-->
26
- <div
27
- style="background-color:#22a6a7;padding:12px 10px 10px 10px;min-height:50px;"
28
- >
29
- <img
30
- src="http://www.hatiolab.com/assets/img/icon-mail.png"
31
- style="float:left;margin:0 10px 0 40px"
32
- />
33
- <span style="display:block;color:#fff;font-size:20px"
34
- >Hi ${name}!</span
35
- >
36
- <span style="display:block;color:#fff;font-size:34px;font-weight:bold"
37
- >Verify your email</span
38
- >
39
- </div>
40
- <!--title end-->
41
-
42
- <!--body begin-->
43
- <p style="padding:10px 20px;line-height:1.5;font-size:16px">
44
- You're almost ready to start enjoying Operato.
45
- Simply click the button below to verify your email address.
46
- <br />
47
- <a
48
- href="${verifyUrl}"
49
- style="display:inline-block;margin:10px 5px 5px 0;border-radius:7px;background-color:#22a6a7;padding:7px 15px;color:#fff;font-size:18px;text-decoration:none;text-transform:capitalize;"
50
- >Verify</a
51
- >
52
- </p>
53
- <!--body end-->
54
-
55
- <!--footer begin-->
56
- <div
57
- style="background-color:#3d5874;padding:7px 20px 5px 20px;font-size:12px;color:#efefef"
58
- >
59
- © Hatio, Lab. Inc. All rights reserved.
60
- </div>
61
- <!--footer end-->
62
- </div>
63
- </body>
64
- </html>
65
- `
66
- }
package/server/types.ts DELETED
@@ -1,21 +0,0 @@
1
- import { TFunction } from 'i18next'
2
- import { EntityManager } from 'typeorm'
3
-
4
- import { Domain } from '@things-factory/shell'
5
-
6
- import { User } from './service/user/user'
7
-
8
- declare global {
9
- export type ResolverContext = {
10
- state: IContextState
11
- t?: TFunction
12
- [key: string]: any
13
- }
14
-
15
- interface IContextState {
16
- domain: Domain
17
- user: User
18
- tx?: EntityManager
19
- [key: string]: any
20
- }
21
- }
@@ -1,11 +0,0 @@
1
- export function accepts(header: any, accepts?) {
2
- accepts = accepts || ['text/html', '*/*']
3
-
4
- for (let i = 0; i < accepts.length; i++) {
5
- if ((header || '').indexOf(accepts[i]) !== -1) {
6
- return true
7
- }
8
- }
9
-
10
- return false
11
- }
@@ -1,61 +0,0 @@
1
- import { getCookieDomainFromHostname } from '@things-factory/shell'
2
- import { config } from '@things-factory/env'
3
- import { MAX_AGE } from '../constants/max-age'
4
-
5
- const accessTokenCookieKey = config.get('accessTokenCookieKey', 'access_token')
6
-
7
- export function getAccessTokenCookie(context) {
8
- return context?.cookies?.get(accessTokenCookieKey)
9
- }
10
-
11
- export function setAccessTokenCookie(context, token) {
12
- const { secure } = context
13
-
14
- var cookie = {
15
- secure,
16
- httpOnly: true,
17
- maxAge: MAX_AGE,
18
- sameSite: 'Lax'
19
- }
20
-
21
- const cookieDomain = getCookieDomainFromHostname(context.hostname)
22
- if (cookieDomain) {
23
- cookie['domain'] = cookieDomain
24
- }
25
-
26
- context.cookies.set(accessTokenCookieKey, token, cookie)
27
- }
28
-
29
- export function setSessionAccessToken(context) {
30
- /* koa-session 을 사용하는 경우에는, cookie 직접 설정이 작동되지 않는다. 그런 경우에는 session에 설정해서 cookie를 변경한다. */
31
- const { user } = context.state
32
-
33
- context.session = {
34
- id: user.id,
35
- userType: user.type,
36
- status: user.state
37
- }
38
- }
39
-
40
- export function clearAccessTokenCookie(context) {
41
- const { secure } = context
42
-
43
- var cookie = {
44
- secure,
45
- httpOnly: true,
46
- sameSite: 'Lax'
47
- }
48
-
49
- const cookieDomain = getCookieDomainFromHostname(context.hostname)
50
- if (cookieDomain) {
51
- cookie['domain'] = cookieDomain
52
- }
53
-
54
- context.cookies.set(accessTokenCookieKey, '', cookie)
55
- /*
56
- * TODO clear i18next cookie as well - need to support domain
57
- * https://github.com/hatiolab/things-factory/issues/70
58
- */
59
- context.cookies.set('i18next', '', cookie)
60
- context.session = null
61
- }
@@ -1,52 +0,0 @@
1
- import { Domain } from '@things-factory/shell'
2
- import { PrivilegeObject } from '../service/privilege/privilege'
3
- import { User } from '../service/user/user'
4
-
5
- export async function checkPermission(
6
- privilegeObject: PrivilegeObject,
7
- user: User,
8
- domain: Domain,
9
- unsafeIP?: boolean,
10
- prohibitedPrivileges?: { category: string; privilege: string }[]
11
- ): Promise<boolean> {
12
- if (!privilegeObject) {
13
- return true
14
- }
15
-
16
- const { owner: domainOwnerGranted, super: superUserGranted, category, privilege } = privilegeObject
17
-
18
- if (unsafeIP) {
19
- if (privilege && category) {
20
- // unsafeIP 상황에서는 ownership granted는 적용되지 않는다.
21
- if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {
22
- return false
23
- }
24
-
25
- return await User.hasPrivilege(privilege, category, domain, user)
26
- }
27
-
28
- // privilege, category가 설정되지 않은 경우에는 ownership granted가 설정되었다면 허가하지 않는다.
29
- return !domainOwnerGranted && !superUserGranted
30
- } else {
31
- if (!privilege || !category) {
32
- // privilege, category가 설정되지 않은 경우에는 ownership granted만을 적용한다.
33
- return (
34
- (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||
35
- (superUserGranted && (await process.superUserGranted(domain, user)))
36
- )
37
- }
38
-
39
- if (
40
- (domainOwnerGranted && (await process.domainOwnerGranted(domain, user))) ||
41
- (superUserGranted && (await process.superUserGranted(domain, user)))
42
- ) {
43
- return true
44
- }
45
-
46
- if ((prohibitedPrivileges || []).find(pp => pp.category == category && pp.privilege == privilege)) {
47
- return false
48
- }
49
-
50
- return await User.hasPrivilege(privilege, category, domain, user)
51
- }
52
- }
@@ -1,19 +0,0 @@
1
- import { Domain, getRepository } from '@things-factory/shell'
2
-
3
- import { User } from '../service/user/user'
4
-
5
- /**
6
- * @description Based on domain and user information,
7
- * Find out whether the user belongs domain or user has partnership with domain
8
- *
9
- * @param domain
10
- * @param user
11
- */
12
- export async function checkUserBelongsDomain(domain: Domain, user: User): Promise<Boolean> {
13
- if (!user.domains?.length) {
14
- user = await getRepository(User).findOne({ where: { id: user.id }, relations: ['domains'] })
15
- }
16
-
17
- const { domains: userDomains }: User = user
18
- return Boolean(userDomains.find((userDomain: Domain) => userDomain.id === domain.id))
19
- }
@@ -1,29 +0,0 @@
1
- import { Domain, getRepository } from '@things-factory/shell'
2
-
3
- import { User } from '../service/user/user'
4
- import { Role } from 'service'
5
-
6
- /**
7
- * @description 사용자가 특정 도메인 또는 상위 도메인에서 특정 역할을 가지고 있는지 확인합니다.
8
- *
9
- * @param roleId 확인할 역할의 ID
10
- * @param domain 역할을 확인할 도메인
11
- * @param user 역할을 확인할 사용자
12
- *
13
- * @returns 사용자가 도메인 또는 상위 도메인에서 역할을 가지고 있는지 여부를 나타내는 boolean을 반환하는 Promise
14
- */
15
- export async function checkUserHasRole(roleId: string, domain: Domain, user: User): Promise<Boolean> {
16
- if (!roleId) {
17
- return true
18
- }
19
-
20
- const me = await getRepository(User).findOne({
21
- where: { id: user.id },
22
- relations: ['roles']
23
- })
24
-
25
- return me.roles
26
- .filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
27
- .map(role => role.id)
28
- .includes(roleId)
29
- }
@@ -1,22 +0,0 @@
1
- import crypto from 'crypto'
2
-
3
- /* only for short-term life state encryption */
4
- const KEY = crypto.randomBytes(32)
5
-
6
- export function encryptState(text: string) {
7
- const iv = crypto.randomBytes(16)
8
- const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(KEY), iv)
9
- const encrypted = cipher.update(text)
10
-
11
- return iv.toString('hex') + ':' + Buffer.concat([encrypted, cipher.final()]).toString('hex')
12
- }
13
-
14
- export function decryptState(text: string) {
15
- const textParts = text.split(':')
16
- const iv = Buffer.from(textParts.shift(), 'hex')
17
- const encryptedText = Buffer.from(textParts.join(':'), 'hex')
18
- const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(KEY), iv)
19
- const decrypted = decipher.update(encryptedText)
20
-
21
- return Buffer.concat([decrypted, decipher.final()]).toString()
22
- }
@@ -1,13 +0,0 @@
1
- import { config } from '@things-factory/env'
2
-
3
- var _AES_256_KEY = config.get('AES_256_KEY')
4
-
5
- if (!_AES_256_KEY) {
6
- if (process.env.NODE_ENV == 'production') {
7
- throw new TypeError('AES_256_KEY not configured.')
8
- } else {
9
- _AES_256_KEY = 'V6g5oHJZb7KcYzIyL6cM95XvIDouon5b'
10
- }
11
- }
12
-
13
- export const AES_256_KEY = _AES_256_KEY
@@ -1,7 +0,0 @@
1
- import { config } from '@things-factory/env'
2
-
3
- var subdomainOffset = config.get('subdomainOffset', 2)
4
-
5
- export function getDomainFromHostname(hostname) {
6
- return hostname.split('.').slice(-subdomainOffset).join('.')
7
- }
@@ -1,38 +0,0 @@
1
- import { EntityManager, Repository, SelectQueryBuilder } from 'typeorm'
2
-
3
- import { Domain, getRepository } from '@things-factory/shell'
4
-
5
- import { User } from '../service/user/user'
6
-
7
- export async function getDomainUsers(domain: Partial<Domain>, trxMgr?: EntityManager): Promise<User[]> {
8
- const domainRepo: Repository<Domain> = trxMgr?.getRepository(Domain) || getRepository(Domain)
9
-
10
- if (!domain.id) {
11
- const foundDomain: Domain = await domainRepo.findOne({ where: { id: domain.id } })
12
- if (!foundDomain) throw new Error(`Failed to find domain by passed condition, ${domain}`)
13
-
14
- domain = foundDomain
15
- }
16
-
17
- const qb: SelectQueryBuilder<User> = buildDomainUsersQueryBuilder(domain.id)
18
- return await qb.getMany()
19
- }
20
-
21
- export function buildDomainUsersQueryBuilder(
22
- domainId: string,
23
- alias: string = 'USER',
24
- trxMgr?: EntityManager
25
- ): SelectQueryBuilder<User> {
26
- const userRepo: Repository<User> = trxMgr?.getRepository(User) || getRepository(User)
27
- const qb: SelectQueryBuilder<User> = userRepo.createQueryBuilder(alias)
28
- qb.select().andWhere(
29
- `${alias}.id IN ${qb
30
- .subQuery()
31
- .select('USERS_DOMAINS.users_id')
32
- .from('users_domains', 'USERS_DOMAINS')
33
- .where('USERS_DOMAINS.domains_id = :domainId', { domainId })
34
- .getQuery()}`
35
- )
36
-
37
- return qb
38
- }
@@ -1,13 +0,0 @@
1
- import { config } from '@things-factory/env'
2
-
3
- var _SECRET = config.get('SECRET')
4
-
5
- if (!_SECRET) {
6
- if (process.env.NODE_ENV == 'production') {
7
- throw new TypeError('SECRET key not configured.')
8
- } else {
9
- _SECRET = '0xD58F835B69D207A76CC5F84a70a1D0d4C79dAC95'
10
- }
11
- }
12
-
13
- export const SECRET = _SECRET
@@ -1,112 +0,0 @@
1
- import { In } from 'typeorm'
2
-
3
- import { Domain, getRepository } from '@things-factory/shell'
4
-
5
- import { User } from '../service/user/user'
6
-
7
- export async function getUserDomains(user: User): Promise<Partial<Domain>[]> {
8
- return (
9
- await getRepository(Domain)
10
- .createQueryBuilder('DOMAIN')
11
- .where(qb => {
12
- const subQuery = qb
13
- .subQuery()
14
- .distinct(true)
15
- .select('DOMAIN.id')
16
- .from(User, 'USER')
17
- .leftJoin('USER.roles', 'ROLE')
18
- .leftJoin('ROLE.domain', 'DOMAIN')
19
- .where('USER.id = :userId', { userId: user.id })
20
- .getQuery()
21
- return 'DOMAIN.id IN ' + subQuery
22
- })
23
- .orWhere(qb => {
24
- const subQuery = qb
25
- .subQuery()
26
- .select('DOMAIN.id')
27
- .from(Domain, 'DOMAIN')
28
- .where('DOMAIN.owner = :owner', { owner: user.id })
29
- .getQuery()
30
- return 'DOMAIN.id IN ' + subQuery
31
- })
32
- .orderBy('DOMAIN.name', 'ASC')
33
- .getMany()
34
- ).map(domain => {
35
- const { id, name, description, subdomain, extType, brandName, brandImage } = domain
36
- return { id, name, description, subdomain, extType, brandName, brandImage }
37
- })
38
- }
39
-
40
- export async function getRoleBasedDomains(user: User): Promise<Partial<Domain>[]> {
41
- return (
42
- await getRepository(Domain)
43
- .createQueryBuilder('DOMAIN')
44
- .where(qb => {
45
- const subQuery = qb
46
- .subQuery()
47
- .distinct(true)
48
- .select('DOMAIN.id')
49
- .from(User, 'USER')
50
- .leftJoin('USER.roles', 'ROLE')
51
- .leftJoin('ROLE.domain', 'DOMAIN')
52
- .where('USER.id = :userId', { userId: user.id })
53
- .getQuery()
54
- return 'DOMAIN.id IN ' + subQuery
55
- })
56
- .getMany()
57
- ).map(domain => {
58
- const { id, name, description, subdomain, extType, brandName, brandImage } = domain
59
- return { id, name, description, subdomain, extType, brandName, brandImage }
60
- })
61
- }
62
-
63
- export async function getDomainsWithPrivilege(
64
- user: User,
65
- privilege: string,
66
- category: string
67
- ): Promise<Partial<Domain>[]> {
68
- return (
69
- await getRepository(Domain)
70
- .createQueryBuilder('DOMAIN')
71
- .where(qb => {
72
- const subQuery = qb
73
- .subQuery()
74
- .distinct(true)
75
- .select('DOMAIN.id')
76
- .from(User, 'USER')
77
- .leftJoin('USER.roles', 'ROLE')
78
- .leftJoin('ROLE.domain', 'DOMAIN')
79
- .leftJoin('ROLE.privileges', 'PRIVILEGE')
80
- .where('USER.id = :userId', { userId: user.id })
81
- .andWhere('PRIVILEGE.name = :privilege', { privilege })
82
- .andWhere('PRIVILEGE.category = :category', { category })
83
- .getQuery()
84
- return 'DOMAIN.id IN ' + subQuery
85
- })
86
- .orWhere(qb => {
87
- const subQuery = qb
88
- .subQuery()
89
- .select('DOMAIN.id')
90
- .from(Domain, 'DOMAIN')
91
- .where('DOMAIN.owner = :owner', { owner: user.id })
92
- .getQuery()
93
- return 'DOMAIN.id IN ' + subQuery
94
- })
95
- .orderBy('DOMAIN.name', 'ASC')
96
- .getMany()
97
- ).map(domain => {
98
- const { id, name, description, subdomain, extType, brandName, brandImage } = domain
99
- return { id, name, description, subdomain, extType, brandName, brandImage }
100
- })
101
- }
102
-
103
- export async function getDomainsAsOwner(user: User): Promise<Partial<Domain>[]> {
104
- return (
105
- await getRepository(Domain).find({
106
- where: { owner: user.id }
107
- })
108
- ).map(domain => {
109
- const { id, name, description, subdomain, extType, brandName, brandImage } = domain
110
- return { id, name, description, subdomain, extType, brandName, brandImage }
111
- })
112
- }