@budibase/worker 2.1.45 → 2.1.46-alpha.0

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 (209) hide show
  1. package/__mocks__/aws-sdk.ts +15 -0
  2. package/__mocks__/oauth.ts +57 -0
  3. package/coverage/clover.xml +2167 -0
  4. package/coverage/coverage-final.json +78 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +431 -0
  9. package/coverage/lcov-report/prettify.css +1 -0
  10. package/coverage/lcov-report/prettify.js +2 -0
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +196 -0
  13. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +925 -0
  14. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +1405 -0
  15. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +196 -0
  16. package/coverage/lcov-report/src/api/controllers/global/index.html +236 -0
  17. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +187 -0
  18. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +283 -0
  19. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +577 -0
  20. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +316 -0
  21. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +799 -0
  22. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +244 -0
  23. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +148 -0
  24. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +124 -0
  25. package/coverage/lcov-report/src/api/controllers/system/index.html +191 -0
  26. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +124 -0
  27. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +124 -0
  28. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +133 -0
  29. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +154 -0
  30. package/coverage/lcov-report/src/api/index.html +116 -0
  31. package/coverage/lcov-report/src/api/index.ts.html +583 -0
  32. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +349 -0
  33. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +457 -0
  34. package/coverage/lcov-report/src/api/routes/global/email.ts.html +193 -0
  35. package/coverage/lcov-report/src/api/routes/global/index.html +236 -0
  36. package/coverage/lcov-report/src/api/routes/global/license.ts.html +124 -0
  37. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +133 -0
  38. package/coverage/lcov-report/src/api/routes/global/self.ts.html +139 -0
  39. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +196 -0
  40. package/coverage/lcov-report/src/api/routes/global/users.ts.html +433 -0
  41. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +196 -0
  42. package/coverage/lcov-report/src/api/routes/index.html +116 -0
  43. package/coverage/lcov-report/src/api/routes/index.ts.html +196 -0
  44. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +142 -0
  45. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +109 -0
  46. package/coverage/lcov-report/src/api/routes/system/index.html +191 -0
  47. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +142 -0
  48. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +109 -0
  49. package/coverage/lcov-report/src/api/routes/system/status.ts.html +109 -0
  50. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +124 -0
  51. package/coverage/lcov-report/src/api/routes/validation/index.html +131 -0
  52. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +88 -0
  53. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +235 -0
  54. package/coverage/lcov-report/src/constants/index.html +116 -0
  55. package/coverage/lcov-report/src/constants/index.ts.html +613 -0
  56. package/coverage/lcov-report/src/constants/templates/index.html +116 -0
  57. package/coverage/lcov-report/src/constants/templates/index.ts.html +316 -0
  58. package/coverage/lcov-report/src/db/index.html +116 -0
  59. package/coverage/lcov-report/src/db/index.ts.html +115 -0
  60. package/coverage/lcov-report/src/environment.ts.html +373 -0
  61. package/coverage/lcov-report/src/index.html +131 -0
  62. package/coverage/lcov-report/src/index.ts.html +394 -0
  63. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +139 -0
  64. package/coverage/lcov-report/src/middleware/index.html +116 -0
  65. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +145 -0
  66. package/coverage/lcov-report/src/migrations/functions/index.html +116 -0
  67. package/coverage/lcov-report/src/migrations/index.html +116 -0
  68. package/coverage/lcov-report/src/migrations/index.ts.html +271 -0
  69. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +262 -0
  70. package/coverage/lcov-report/src/sdk/accounts/index.html +131 -0
  71. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +88 -0
  72. package/coverage/lcov-report/src/sdk/index.html +116 -0
  73. package/coverage/lcov-report/src/sdk/index.ts.html +106 -0
  74. package/coverage/lcov-report/src/sdk/users/events.ts.html +577 -0
  75. package/coverage/lcov-report/src/sdk/users/index.html +146 -0
  76. package/coverage/lcov-report/src/sdk/users/index.ts.html +88 -0
  77. package/coverage/lcov-report/src/sdk/users/users.ts.html +1942 -0
  78. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +1051 -0
  79. package/coverage/lcov-report/src/tests/api/accounts.ts.html +160 -0
  80. package/coverage/lcov-report/src/tests/api/auth.ts.html +220 -0
  81. package/coverage/lcov-report/src/tests/api/base.ts.html +133 -0
  82. package/coverage/lcov-report/src/tests/api/configs.ts.html +226 -0
  83. package/coverage/lcov-report/src/tests/api/email.ts.html +148 -0
  84. package/coverage/lcov-report/src/tests/api/environment.ts.html +130 -0
  85. package/coverage/lcov-report/src/tests/api/index.html +296 -0
  86. package/coverage/lcov-report/src/tests/api/index.ts.html +205 -0
  87. package/coverage/lcov-report/src/tests/api/migrations.ts.html +151 -0
  88. package/coverage/lcov-report/src/tests/api/restore.ts.html +127 -0
  89. package/coverage/lcov-report/src/tests/api/self.ts.html +163 -0
  90. package/coverage/lcov-report/src/tests/api/status.ts.html +121 -0
  91. package/coverage/lcov-report/src/tests/api/tenants.ts.html +130 -0
  92. package/coverage/lcov-report/src/tests/api/users.ts.html +511 -0
  93. package/coverage/lcov-report/src/tests/controllers.ts.html +100 -0
  94. package/coverage/lcov-report/src/tests/index.html +146 -0
  95. package/coverage/lcov-report/src/tests/index.ts.html +139 -0
  96. package/coverage/lcov-report/src/tests/mocks/email.js.html +115 -0
  97. package/coverage/lcov-report/src/tests/mocks/index.html +131 -0
  98. package/coverage/lcov-report/src/tests/mocks/index.ts.html +106 -0
  99. package/coverage/lcov-report/src/tests/structures/configs.ts.html +313 -0
  100. package/coverage/lcov-report/src/tests/structures/groups.ts.html +118 -0
  101. package/coverage/lcov-report/src/tests/structures/index.html +161 -0
  102. package/coverage/lcov-report/src/tests/structures/index.ts.html +151 -0
  103. package/coverage/lcov-report/src/tests/structures/users.ts.html +196 -0
  104. package/coverage/lcov-report/src/utilities/appService.ts.html +181 -0
  105. package/coverage/lcov-report/src/utilities/email.ts.html +850 -0
  106. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +100 -0
  107. package/coverage/lcov-report/src/utilities/index.html +206 -0
  108. package/coverage/lcov-report/src/utilities/index.ts.html +112 -0
  109. package/coverage/lcov-report/src/utilities/redis.ts.html +424 -0
  110. package/coverage/lcov-report/src/utilities/templates.ts.html +232 -0
  111. package/coverage/lcov-report/src/utilities/users.ts.html +133 -0
  112. package/coverage/lcov.info +3989 -0
  113. package/jest.config.ts +29 -0
  114. package/package.json +14 -24
  115. package/scripts/localdomain.js +33 -7
  116. package/src/api/controllers/global/auth.ts +51 -43
  117. package/src/api/controllers/global/{configs.js → configs.ts} +119 -114
  118. package/src/api/controllers/global/{email.js → email.ts} +6 -5
  119. package/src/api/controllers/global/roles.ts +66 -0
  120. package/src/api/controllers/global/self.ts +2 -2
  121. package/src/api/controllers/global/users.ts +6 -3
  122. package/src/api/controllers/global/{workspaces.js → workspaces.ts} +15 -18
  123. package/src/api/controllers/system/{environment.js → environment.ts} +3 -2
  124. package/src/api/controllers/system/restore.ts +1 -1
  125. package/src/api/controllers/system/{status.js → status.ts} +4 -3
  126. package/src/api/controllers/system/tenants.ts +8 -51
  127. package/src/api/index.ts +31 -8
  128. package/src/api/routes/global/{auth.js → auth.ts} +31 -48
  129. package/src/api/routes/global/{configs.js → configs.ts} +22 -23
  130. package/src/api/routes/global/{email.js → email.ts} +9 -10
  131. package/src/api/routes/global/license.ts +1 -1
  132. package/src/api/routes/global/roles.ts +16 -0
  133. package/src/api/routes/global/self.ts +2 -2
  134. package/src/api/routes/global/templates.ts +4 -4
  135. package/src/api/routes/global/tests/auth.spec.ts +134 -64
  136. package/src/api/routes/global/tests/configs.spec.ts +34 -35
  137. package/src/api/routes/global/tests/email.spec.ts +4 -3
  138. package/src/api/routes/global/tests/license.spec.ts +31 -0
  139. package/src/api/routes/global/tests/realEmail.spec.ts +2 -3
  140. package/src/api/routes/global/tests/roles.spec.ts +27 -0
  141. package/src/api/routes/global/tests/self.spec.ts +3 -4
  142. package/src/api/routes/global/tests/templates.spec.ts +35 -0
  143. package/src/api/routes/global/tests/users.spec.ts +79 -46
  144. package/src/api/routes/global/tests/workspaces.spec.ts +29 -0
  145. package/src/api/routes/global/{users.js → users.ts} +28 -26
  146. package/src/api/routes/global/{workspaces.js → workspaces.ts} +9 -10
  147. package/src/api/routes/index.ts +2 -1
  148. package/src/api/routes/system/accounts.ts +1 -1
  149. package/src/api/routes/system/environment.ts +8 -0
  150. package/src/api/routes/system/migrations.ts +1 -1
  151. package/src/api/routes/system/restore.ts +1 -1
  152. package/src/api/routes/system/status.ts +8 -0
  153. package/src/api/routes/system/tenants.ts +13 -0
  154. package/src/api/routes/system/tests/accounts.spec.ts +5 -6
  155. package/src/api/routes/system/tests/environment.spec.ts +29 -0
  156. package/src/api/routes/system/tests/migrations.spec.ts +63 -0
  157. package/src/api/routes/system/tests/restore.spec.ts +36 -0
  158. package/src/api/routes/system/tests/status.spec.ts +48 -0
  159. package/src/api/routes/system/tests/tenants.spec.ts +61 -0
  160. package/src/api/routes/validation/users.ts +3 -3
  161. package/src/constants/{index.js → index.ts} +57 -64
  162. package/src/constants/templates/{index.js → index.ts} +23 -19
  163. package/src/db/index.ts +10 -0
  164. package/src/environment.ts +9 -7
  165. package/src/index.ts +15 -16
  166. package/src/middleware/{cloudRestricted.js → cloudRestricted.ts} +5 -4
  167. package/src/middleware/tests/tenancy.spec.ts +73 -0
  168. package/src/sdk/users/users.ts +28 -15
  169. package/src/tests/TestConfiguration.ts +99 -50
  170. package/src/tests/api/accounts.ts +5 -8
  171. package/src/tests/api/auth.ts +3 -6
  172. package/src/tests/api/base.ts +16 -0
  173. package/src/tests/api/configs.ts +15 -8
  174. package/src/tests/api/email.ts +3 -6
  175. package/src/tests/api/environment.ts +15 -0
  176. package/src/tests/api/index.ts +15 -0
  177. package/src/tests/api/migrations.ts +22 -0
  178. package/src/tests/api/restore.ts +14 -0
  179. package/src/tests/api/self.ts +11 -6
  180. package/src/tests/api/status.ts +12 -0
  181. package/src/tests/api/tenants.ts +15 -0
  182. package/src/tests/api/users.ts +38 -6
  183. package/src/tests/controllers.ts +5 -0
  184. package/src/tests/index.ts +5 -1
  185. package/{scripts/jestSetup.js → src/tests/jestSetup.ts} +12 -3
  186. package/src/tests/structures/{configs.js → configs.ts} +11 -11
  187. package/src/tests/structures/index.ts +5 -3
  188. package/src/tests/structures/users.ts +1 -0
  189. package/src/utilities/appService.ts +32 -0
  190. package/src/utilities/{email.js → email.ts} +78 -45
  191. package/src/utilities/fileSystem.ts +5 -0
  192. package/src/utilities/{index.js → index.ts} +1 -1
  193. package/src/utilities/{redis.js → redis.ts} +29 -24
  194. package/src/utilities/templates.ts +49 -0
  195. package/src/utilities/users.ts +16 -0
  196. package/tsconfig.build.json +2 -3
  197. package/tsconfig.json +3 -1
  198. package/src/api/controllers/global/roles.js +0 -68
  199. package/src/api/routes/global/roles.js +0 -12
  200. package/src/api/routes/system/environment.js +0 -8
  201. package/src/api/routes/system/status.js +0 -8
  202. package/src/api/routes/system/tenants.js +0 -12
  203. package/src/db/index.js +0 -11
  204. package/src/tests/controllers.js +0 -7
  205. package/src/tests/structures/accounts.ts +0 -24
  206. package/src/utilities/appService.js +0 -33
  207. package/src/utilities/fileSystem.js +0 -5
  208. package/src/utilities/templates.js +0 -49
  209. package/src/utilities/users.js +0 -17
@@ -1,36 +1,35 @@
1
- const { Client, utils } = require("@budibase/backend-core/redis")
2
- const { newid } = require("@budibase/backend-core/utils")
1
+ import { redis, utils } from "@budibase/backend-core"
3
2
 
4
- function getExpirySecondsForDB(db) {
3
+ function getExpirySecondsForDB(db: string) {
5
4
  switch (db) {
6
- case utils.Databases.PW_RESETS:
5
+ case redis.utils.Databases.PW_RESETS:
7
6
  // a hour
8
7
  return 3600
9
- case utils.Databases.INVITATIONS:
8
+ case redis.utils.Databases.INVITATIONS:
10
9
  // a day
11
10
  return 86400
12
11
  }
13
12
  }
14
13
 
15
- let pwResetClient, invitationClient
14
+ let pwResetClient: any, invitationClient: any
16
15
 
17
- function getClient(db) {
16
+ function getClient(db: string) {
18
17
  switch (db) {
19
- case utils.Databases.PW_RESETS:
18
+ case redis.utils.Databases.PW_RESETS:
20
19
  return pwResetClient
21
- case utils.Databases.INVITATIONS:
20
+ case redis.utils.Databases.INVITATIONS:
22
21
  return invitationClient
23
22
  }
24
23
  }
25
24
 
26
- async function writeACode(db, value) {
25
+ async function writeACode(db: string, value: any) {
27
26
  const client = await getClient(db)
28
- const code = newid()
27
+ const code = utils.newid()
29
28
  await client.store(code, value, getExpirySecondsForDB(db))
30
29
  return code
31
30
  }
32
31
 
33
- async function getACode(db, code, deleteCode = true) {
32
+ async function getACode(db: string, code: string, deleteCode = true) {
34
33
  const client = await getClient(db)
35
34
  const value = await client.get(code)
36
35
  if (!value) {
@@ -42,9 +41,9 @@ async function getACode(db, code, deleteCode = true) {
42
41
  return value
43
42
  }
44
43
 
45
- exports.init = async () => {
46
- pwResetClient = new Client(utils.Databases.PW_RESETS)
47
- invitationClient = new Client(utils.Databases.INVITATIONS)
44
+ export async function init() {
45
+ pwResetClient = new redis.Client(redis.utils.Databases.PW_RESETS)
46
+ invitationClient = new redis.Client(redis.utils.Databases.INVITATIONS)
48
47
  await pwResetClient.init()
49
48
  await invitationClient.init()
50
49
  }
@@ -52,7 +51,7 @@ exports.init = async () => {
52
51
  /**
53
52
  * make sure redis connection is closed.
54
53
  */
55
- exports.shutdown = async () => {
54
+ export async function shutdown() {
56
55
  if (pwResetClient) await pwResetClient.finish()
57
56
  if (invitationClient) await invitationClient.finish()
58
57
  console.log("Redis shutdown")
@@ -65,8 +64,8 @@ exports.shutdown = async () => {
65
64
  * @param {object} info Info about the user/the reset process.
66
65
  * @return {Promise<string>} returns the code that was stored to redis.
67
66
  */
68
- exports.getResetPasswordCode = async (userId, info) => {
69
- return writeACode(utils.Databases.PW_RESETS, { userId, info })
67
+ export async function getResetPasswordCode(userId: string, info: any) {
68
+ return writeACode(redis.utils.Databases.PW_RESETS, { userId, info })
70
69
  }
71
70
 
72
71
  /**
@@ -75,9 +74,12 @@ exports.getResetPasswordCode = async (userId, info) => {
75
74
  * @param {boolean} deleteCode If the code is used/finished with this will delete it - defaults to true.
76
75
  * @return {Promise<string>} returns the user ID if it is found
77
76
  */
78
- exports.checkResetPasswordCode = async (resetCode, deleteCode = true) => {
77
+ export async function checkResetPasswordCode(
78
+ resetCode: string,
79
+ deleteCode = true
80
+ ) {
79
81
  try {
80
- return getACode(utils.Databases.PW_RESETS, resetCode, deleteCode)
82
+ return getACode(redis.utils.Databases.PW_RESETS, resetCode, deleteCode)
81
83
  } catch (err) {
82
84
  throw "Provided information is not valid, cannot reset password - please try again."
83
85
  }
@@ -89,8 +91,8 @@ exports.checkResetPasswordCode = async (resetCode, deleteCode = true) => {
89
91
  * @param {object|null} info Information to be carried along with the invitation.
90
92
  * @return {Promise<string>} returns the code that was stored to redis.
91
93
  */
92
- exports.getInviteCode = async (email, info) => {
93
- return writeACode(utils.Databases.INVITATIONS, { email, info })
94
+ export async function getInviteCode(email: string, info: any) {
95
+ return writeACode(redis.utils.Databases.INVITATIONS, { email, info })
94
96
  }
95
97
 
96
98
  /**
@@ -99,9 +101,12 @@ exports.getInviteCode = async (email, info) => {
99
101
  * @param {boolean} deleteCode whether or not the code should be deleted after retrieval - defaults to true.
100
102
  * @return {Promise<object>} If the code is valid then an email address will be returned.
101
103
  */
102
- exports.checkInviteCode = async (inviteCode, deleteCode = true) => {
104
+ export async function checkInviteCode(
105
+ inviteCode: string,
106
+ deleteCode: boolean = true
107
+ ) {
103
108
  try {
104
- return getACode(utils.Databases.INVITATIONS, inviteCode, deleteCode)
109
+ return getACode(redis.utils.Databases.INVITATIONS, inviteCode, deleteCode)
105
110
  } catch (err) {
106
111
  throw "Invitation is not valid or has expired, please request a new one."
107
112
  }
@@ -0,0 +1,49 @@
1
+ import { db as dbCore, tenancy } from "@budibase/backend-core"
2
+ import {
3
+ Config,
4
+ InternalTemplateBinding,
5
+ LOGO_URL,
6
+ EmailTemplatePurpose,
7
+ } from "../constants"
8
+ import { checkSlashesInUrl } from "./index"
9
+ const BASE_COMPANY = "Budibase"
10
+
11
+ export async function getSettingsTemplateContext(
12
+ purpose: EmailTemplatePurpose,
13
+ code?: string
14
+ ) {
15
+ const db = tenancy.getGlobalDB()
16
+ // TODO: use more granular settings in the future if required
17
+ let settings =
18
+ (await dbCore.getScopedConfig(db, { type: Config.SETTINGS })) || {}
19
+ const URL = settings.platformUrl
20
+ const context: any = {
21
+ [InternalTemplateBinding.LOGO_URL]:
22
+ checkSlashesInUrl(`${URL}/${settings.logoUrl}`) || LOGO_URL,
23
+ [InternalTemplateBinding.PLATFORM_URL]: URL,
24
+ [InternalTemplateBinding.COMPANY]: settings.company || BASE_COMPANY,
25
+ [InternalTemplateBinding.DOCS_URL]:
26
+ settings.docsUrl || "https://docs.budibase.com/",
27
+ [InternalTemplateBinding.LOGIN_URL]: checkSlashesInUrl(
28
+ tenancy.addTenantToUrl(`${URL}/login`)
29
+ ),
30
+ [InternalTemplateBinding.CURRENT_DATE]: new Date().toISOString(),
31
+ [InternalTemplateBinding.CURRENT_YEAR]: new Date().getFullYear(),
32
+ }
33
+ // attach purpose specific context
34
+ switch (purpose) {
35
+ case EmailTemplatePurpose.PASSWORD_RECOVERY:
36
+ context[InternalTemplateBinding.RESET_CODE] = code
37
+ context[InternalTemplateBinding.RESET_URL] = checkSlashesInUrl(
38
+ tenancy.addTenantToUrl(`${URL}/builder/auth/reset?code=${code}`)
39
+ )
40
+ break
41
+ case EmailTemplatePurpose.INVITATION:
42
+ context[InternalTemplateBinding.INVITE_CODE] = code
43
+ context[InternalTemplateBinding.INVITE_URL] = checkSlashesInUrl(
44
+ tenancy.addTenantToUrl(`${URL}/builder/invite?code=${code}`)
45
+ )
46
+ break
47
+ }
48
+ return context
49
+ }
@@ -0,0 +1,16 @@
1
+ import { tenancy, db as dbCore } from "@budibase/backend-core"
2
+
3
+ export async function checkAnyUserExists() {
4
+ try {
5
+ const db = tenancy.getGlobalDB()
6
+ const users = await db.allDocs(
7
+ dbCore.getGlobalUserParams(null, {
8
+ include_docs: true,
9
+ limit: 1,
10
+ })
11
+ )
12
+ return users && users.rows.length >= 1
13
+ } catch (err) {
14
+ throw new Error("Unable to retrieve user list")
15
+ }
16
+ }
@@ -3,7 +3,6 @@
3
3
  "target": "es6",
4
4
  "module": "commonjs",
5
5
  "lib": ["es2020"],
6
- "allowJs": true,
7
6
  "strict": true,
8
7
  "noImplicitAny": true,
9
8
  "esModuleInterop": true,
@@ -20,7 +19,7 @@
20
19
  "node_modules",
21
20
  "dist",
22
21
  "src/tests",
23
- "**/*.spec.ts",
24
- "**/*.spec.js"
22
+ "**/*.spec.js",
23
+ "**/*.spec.ts"
25
24
  ]
26
25
  }
package/tsconfig.json CHANGED
@@ -8,7 +8,8 @@
8
8
  "paths": {
9
9
  "@budibase/types": ["../types/src"],
10
10
  "@budibase/backend-core": ["../backend-core/src"],
11
- "@budibase/backend-core/*": ["../backend-core/*"]
11
+ "@budibase/backend-core/*": ["../backend-core/*"],
12
+ "@budibase/pro": ["../../../budibase-pro/packages/pro/src"]
12
13
  }
13
14
  },
14
15
  "ts-node": {
@@ -17,6 +18,7 @@
17
18
  "references": [
18
19
  { "path": "../types" },
19
20
  { "path": "../backend-core" },
21
+ { "path": "../../../budibase-pro/packages/pro" }
20
22
  ],
21
23
  "include": [
22
24
  "src/**/*",
@@ -1,68 +0,0 @@
1
- const { getAllRoles } = require("@budibase/backend-core/roles")
2
- const {
3
- getAllApps,
4
- getProdAppID,
5
- getDevAppID,
6
- DocumentType,
7
- } = require("@budibase/backend-core/db")
8
- const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
9
- const { user: userCache } = require("@budibase/backend-core/cache")
10
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
11
- const { allUsers } = require("../../../sdk/users")
12
-
13
- exports.fetch = async ctx => {
14
- const tenantId = ctx.user.tenantId
15
- // always use the dev apps as they'll be most up to date (true)
16
- const apps = await getAllApps({ tenantId, all: true })
17
- const promises = []
18
- for (let app of apps) {
19
- // use dev app IDs
20
- promises.push(getAllRoles(app.appId))
21
- }
22
- const roles = await Promise.all(promises)
23
- const response = {}
24
- for (let app of apps) {
25
- const deployedAppId = getProdAppID(app.appId)
26
- response[deployedAppId] = {
27
- roles: roles.shift(),
28
- name: app.name,
29
- version: app.version,
30
- url: app.url,
31
- }
32
- }
33
- ctx.body = response
34
- }
35
-
36
- exports.find = async ctx => {
37
- const appId = ctx.params.appId
38
- await doInAppContext(getDevAppID(appId), async () => {
39
- const db = getAppDB()
40
- const app = await db.get(DocumentType.APP_METADATA)
41
- ctx.body = {
42
- roles: await getAllRoles(),
43
- name: app.name,
44
- version: app.version,
45
- url: app.url,
46
- }
47
- })
48
- }
49
-
50
- exports.removeAppRole = async ctx => {
51
- const { appId } = ctx.params
52
- const db = getGlobalDB()
53
- const users = await allUsers(ctx)
54
- const bulk = []
55
- const cacheInvalidations = []
56
- for (let user of users) {
57
- if (user.roles[appId]) {
58
- cacheInvalidations.push(userCache.invalidateUser(user._id))
59
- delete user.roles[appId]
60
- bulk.push(user)
61
- }
62
- }
63
- await db.bulkDocs(bulk)
64
- await Promise.all(cacheInvalidations)
65
- ctx.body = {
66
- message: "App role removed from all users",
67
- }
68
- }
@@ -1,12 +0,0 @@
1
- const Router = require("@koa/router")
2
- const controller = require("../../controllers/global/roles")
3
- const { builderOrAdmin } = require("@budibase/backend-core/auth")
4
-
5
- const router = new Router()
6
-
7
- router
8
- .get("/api/global/roles", builderOrAdmin, controller.fetch)
9
- .get("/api/global/roles/:appId", builderOrAdmin, controller.find)
10
- .delete("/api/global/roles/:appId", builderOrAdmin, controller.removeAppRole)
11
-
12
- module.exports = router
@@ -1,8 +0,0 @@
1
- const Router = require("@koa/router")
2
- const controller = require("../../controllers/system/environment")
3
-
4
- const router = new Router()
5
-
6
- router.get("/api/system/environment", controller.fetch)
7
-
8
- module.exports = router
@@ -1,8 +0,0 @@
1
- const Router = require("@koa/router")
2
- const controller = require("../../controllers/system/status")
3
-
4
- const router = new Router()
5
-
6
- router.get("/api/system/status", controller.fetch)
7
-
8
- module.exports = router
@@ -1,12 +0,0 @@
1
- const Router = require("@koa/router")
2
- const controller = require("../../controllers/system/tenants")
3
- const { adminOnly } = require("@budibase/backend-core/auth")
4
-
5
- const router = new Router()
6
-
7
- router
8
- .get("/api/system/tenants/:tenantId/exists", controller.exists)
9
- .get("/api/system/tenants", adminOnly, controller.fetch)
10
- .delete("/api/system/tenants/:tenantId", adminOnly, controller.delete)
11
-
12
- module.exports = router
package/src/db/index.js DELETED
@@ -1,11 +0,0 @@
1
- const core = require("@budibase/backend-core")
2
- const env = require("../environment")
3
-
4
- exports.init = () => {
5
- const dbConfig = {}
6
- if (env.isTest() && !env.COUCH_DB_URL) {
7
- dbConfig.inMemory = true
8
- dbConfig.allDbs = true
9
- }
10
- core.init({ db: dbConfig })
11
- }
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- email: require("../api/controllers/global/email"),
3
- workspaces: require("../api/controllers/global/workspaces"),
4
- config: require("../api/controllers/global/configs"),
5
- templates: require("../api/controllers/global/templates"),
6
- users: require("../api/controllers/global/users"),
7
- }
@@ -1,24 +0,0 @@
1
- import { Account, AuthType, Hosting, CloudAccount } from "@budibase/types"
2
- import { v4 as uuid } from "uuid"
3
- import { utils } from "@budibase/backend-core"
4
-
5
- export const account = (): Account => {
6
- return {
7
- email: `${uuid()}@test.com`,
8
- tenantId: utils.newid(),
9
- hosting: Hosting.SELF,
10
- authType: AuthType.SSO,
11
- accountId: uuid(),
12
- createdAt: Date.now(),
13
- verified: true,
14
- verificationSent: true,
15
- tier: "FREE",
16
- }
17
- }
18
-
19
- export const cloudAccount = (): CloudAccount => {
20
- return {
21
- ...account(),
22
- budibaseUserId: uuid(),
23
- }
24
- }
@@ -1,33 +0,0 @@
1
- const fetch = require("node-fetch")
2
- const { Headers } = require("@budibase/backend-core/constants")
3
- const { getTenantId, isTenantIdSet } = require("@budibase/backend-core/tenancy")
4
- const { checkSlashesInUrl } = require("../utilities")
5
- const env = require("../environment")
6
-
7
- async function makeAppRequest(url, method, body) {
8
- if (env.isTest()) {
9
- return
10
- }
11
- const request = { headers: {} }
12
- request.headers[Headers.API_KEY] = env.INTERNAL_API_KEY
13
- if (isTenantIdSet()) {
14
- request.headers[Headers.TENANT_ID] = getTenantId()
15
- }
16
- if (body) {
17
- request.headers["Content-Type"] = "application/json"
18
- request.body = JSON.stringify(body)
19
- }
20
- request.method = method
21
- return fetch(checkSlashesInUrl(env.APPS_URL + url), request)
22
- }
23
-
24
- exports.syncUserInApps = async userId => {
25
- const response = await makeAppRequest(
26
- `/api/users/metadata/sync/${userId}`,
27
- "POST",
28
- {}
29
- )
30
- if (response && response.status !== 200) {
31
- throw "Unable to sync user."
32
- }
33
- }
@@ -1,5 +0,0 @@
1
- const { readFileSync } = require("fs")
2
-
3
- exports.readStaticFile = path => {
4
- return readFileSync(path, "utf-8")
5
- }
@@ -1,49 +0,0 @@
1
- const { getScopedConfig } = require("@budibase/backend-core/db")
2
- const {
3
- Configs,
4
- InternalTemplateBindings,
5
- LOGO_URL,
6
- EmailTemplatePurpose,
7
- } = require("../constants")
8
- const { checkSlashesInUrl } = require("./index")
9
- const {
10
- getGlobalDB,
11
- addTenantToUrl,
12
- } = require("@budibase/backend-core/tenancy")
13
- const BASE_COMPANY = "Budibase"
14
-
15
- exports.getSettingsTemplateContext = async (purpose, code = null) => {
16
- const db = getGlobalDB()
17
- // TODO: use more granular settings in the future if required
18
- let settings = (await getScopedConfig(db, { type: Configs.SETTINGS })) || {}
19
- const URL = settings.platformUrl
20
- const context = {
21
- [InternalTemplateBindings.LOGO_URL]:
22
- checkSlashesInUrl(`${URL}/${settings.logoUrl}`) || LOGO_URL,
23
- [InternalTemplateBindings.PLATFORM_URL]: URL,
24
- [InternalTemplateBindings.COMPANY]: settings.company || BASE_COMPANY,
25
- [InternalTemplateBindings.DOCS_URL]:
26
- settings.docsUrl || "https://docs.budibase.com/",
27
- [InternalTemplateBindings.LOGIN_URL]: checkSlashesInUrl(
28
- addTenantToUrl(`${URL}/login`)
29
- ),
30
- [InternalTemplateBindings.CURRENT_DATE]: new Date().toISOString(),
31
- [InternalTemplateBindings.CURRENT_YEAR]: new Date().getFullYear(),
32
- }
33
- // attach purpose specific context
34
- switch (purpose) {
35
- case EmailTemplatePurpose.PASSWORD_RECOVERY:
36
- context[InternalTemplateBindings.RESET_CODE] = code
37
- context[InternalTemplateBindings.RESET_URL] = checkSlashesInUrl(
38
- addTenantToUrl(`${URL}/builder/auth/reset?code=${code}`)
39
- )
40
- break
41
- case EmailTemplatePurpose.INVITATION:
42
- context[InternalTemplateBindings.INVITE_CODE] = code
43
- context[InternalTemplateBindings.INVITE_URL] = checkSlashesInUrl(
44
- addTenantToUrl(`${URL}/builder/invite?code=${code}`)
45
- )
46
- break
47
- }
48
- return context
49
- }
@@ -1,17 +0,0 @@
1
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
2
- const { getGlobalUserParams } = require("@budibase/backend-core/db")
3
-
4
- exports.checkAnyUserExists = async () => {
5
- try {
6
- const db = getGlobalDB()
7
- const users = await db.allDocs(
8
- getGlobalUserParams(null, {
9
- include_docs: true,
10
- limit: 1,
11
- })
12
- )
13
- return users && users.rows.length >= 1
14
- } catch (err) {
15
- throw new Error("Unable to retrieve user list")
16
- }
17
- }