@budibase/backend-core 2.9.19 → 2.9.20
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.
- package/dist/package.json +19 -4
- package/dist/src/security/permissions.d.ts +1 -1
- package/package.json +19 -4
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/src/accounts/accounts.ts +0 -82
- package/src/accounts/api.ts +0 -59
- package/src/accounts/index.ts +0 -1
- package/src/auth/auth.ts +0 -208
- package/src/auth/index.ts +0 -1
- package/src/auth/tests/auth.spec.ts +0 -14
- package/src/blacklist/blacklist.ts +0 -54
- package/src/blacklist/index.ts +0 -1
- package/src/blacklist/tests/blacklist.spec.ts +0 -46
- package/src/cache/appMetadata.ts +0 -88
- package/src/cache/base/index.ts +0 -92
- package/src/cache/generic.ts +0 -30
- package/src/cache/index.ts +0 -5
- package/src/cache/tests/writethrough.spec.ts +0 -138
- package/src/cache/user.ts +0 -69
- package/src/cache/writethrough.ts +0 -133
- package/src/configs/configs.ts +0 -257
- package/src/configs/index.ts +0 -1
- package/src/configs/tests/configs.spec.ts +0 -184
- package/src/constants/db.ts +0 -63
- package/src/constants/index.ts +0 -2
- package/src/constants/misc.ts +0 -50
- package/src/context/Context.ts +0 -14
- package/src/context/identity.ts +0 -58
- package/src/context/index.ts +0 -3
- package/src/context/mainContext.ts +0 -310
- package/src/context/tests/index.spec.ts +0 -147
- package/src/context/types.ts +0 -11
- package/src/db/Replication.ts +0 -84
- package/src/db/constants.ts +0 -10
- package/src/db/couch/DatabaseImpl.ts +0 -238
- package/src/db/couch/connections.ts +0 -77
- package/src/db/couch/index.ts +0 -5
- package/src/db/couch/pouchDB.ts +0 -97
- package/src/db/couch/pouchDump.ts +0 -0
- package/src/db/couch/utils.ts +0 -50
- package/src/db/db.ts +0 -39
- package/src/db/errors.ts +0 -14
- package/src/db/index.ts +0 -12
- package/src/db/lucene.ts +0 -732
- package/src/db/searchIndexes/index.ts +0 -1
- package/src/db/searchIndexes/searchIndexes.ts +0 -62
- package/src/db/tests/index.spec.js +0 -25
- package/src/db/tests/lucene.spec.ts +0 -298
- package/src/db/tests/pouch.spec.js +0 -62
- package/src/db/tests/utils.spec.ts +0 -63
- package/src/db/utils.ts +0 -207
- package/src/db/views.ts +0 -241
- package/src/docIds/conversions.ts +0 -59
- package/src/docIds/ids.ts +0 -113
- package/src/docIds/index.ts +0 -2
- package/src/docIds/newid.ts +0 -5
- package/src/docIds/params.ts +0 -174
- package/src/docUpdates/index.ts +0 -29
- package/src/environment.ts +0 -201
- package/src/errors/errors.ts +0 -119
- package/src/errors/index.ts +0 -1
- package/src/events/analytics.ts +0 -6
- package/src/events/asyncEvents/index.ts +0 -2
- package/src/events/asyncEvents/publisher.ts +0 -12
- package/src/events/asyncEvents/queue.ts +0 -22
- package/src/events/backfill.ts +0 -183
- package/src/events/documentId.ts +0 -56
- package/src/events/events.ts +0 -40
- package/src/events/identification.ts +0 -310
- package/src/events/index.ts +0 -14
- package/src/events/processors/AnalyticsProcessor.ts +0 -64
- package/src/events/processors/AuditLogsProcessor.ts +0 -93
- package/src/events/processors/LoggingProcessor.ts +0 -37
- package/src/events/processors/Processors.ts +0 -52
- package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -43
- package/src/events/processors/index.ts +0 -19
- package/src/events/processors/posthog/PosthogProcessor.ts +0 -118
- package/src/events/processors/posthog/index.ts +0 -2
- package/src/events/processors/posthog/rateLimiting.ts +0 -106
- package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -168
- package/src/events/processors/types.ts +0 -1
- package/src/events/publishers/account.ts +0 -35
- package/src/events/publishers/app.ts +0 -155
- package/src/events/publishers/auditLog.ts +0 -26
- package/src/events/publishers/auth.ts +0 -73
- package/src/events/publishers/automation.ts +0 -110
- package/src/events/publishers/backfill.ts +0 -74
- package/src/events/publishers/backup.ts +0 -42
- package/src/events/publishers/datasource.ts +0 -48
- package/src/events/publishers/email.ts +0 -17
- package/src/events/publishers/environmentVariable.ts +0 -38
- package/src/events/publishers/group.ts +0 -99
- package/src/events/publishers/index.ts +0 -24
- package/src/events/publishers/installation.ts +0 -38
- package/src/events/publishers/layout.ts +0 -26
- package/src/events/publishers/license.ts +0 -84
- package/src/events/publishers/org.ts +0 -37
- package/src/events/publishers/plugin.ts +0 -47
- package/src/events/publishers/query.ts +0 -88
- package/src/events/publishers/role.ts +0 -62
- package/src/events/publishers/rows.ts +0 -29
- package/src/events/publishers/screen.ts +0 -36
- package/src/events/publishers/serve.ts +0 -43
- package/src/events/publishers/table.ts +0 -70
- package/src/events/publishers/user.ts +0 -202
- package/src/events/publishers/view.ts +0 -107
- package/src/featureFlags/index.ts +0 -77
- package/src/featureFlags/tests/featureFlags.spec.ts +0 -85
- package/src/helpers.ts +0 -9
- package/src/index.ts +0 -53
- package/src/installation.ts +0 -107
- package/src/logging/alerts.ts +0 -26
- package/src/logging/correlation/correlation.ts +0 -13
- package/src/logging/correlation/index.ts +0 -1
- package/src/logging/correlation/middleware.ts +0 -17
- package/src/logging/index.ts +0 -4
- package/src/logging/pino/logger.ts +0 -232
- package/src/logging/pino/middleware.ts +0 -45
- package/src/logging/system.ts +0 -81
- package/src/logging/tests/system.spec.ts +0 -61
- package/src/middleware/adminOnly.ts +0 -9
- package/src/middleware/auditLog.ts +0 -6
- package/src/middleware/authenticated.ts +0 -193
- package/src/middleware/builderOnly.ts +0 -20
- package/src/middleware/builderOrAdmin.ts +0 -20
- package/src/middleware/csrf.ts +0 -81
- package/src/middleware/errorHandling.ts +0 -29
- package/src/middleware/index.ts +0 -21
- package/src/middleware/internalApi.ts +0 -23
- package/src/middleware/joi-validator.ts +0 -45
- package/src/middleware/matchers.ts +0 -47
- package/src/middleware/passport/datasource/google.ts +0 -95
- package/src/middleware/passport/local.ts +0 -54
- package/src/middleware/passport/sso/google.ts +0 -77
- package/src/middleware/passport/sso/oidc.ts +0 -154
- package/src/middleware/passport/sso/sso.ts +0 -165
- package/src/middleware/passport/sso/tests/google.spec.ts +0 -67
- package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -152
- package/src/middleware/passport/sso/tests/sso.spec.ts +0 -197
- package/src/middleware/passport/utils.ts +0 -38
- package/src/middleware/querystringToBody.ts +0 -28
- package/src/middleware/tenancy.ts +0 -36
- package/src/middleware/tests/builder.spec.ts +0 -180
- package/src/middleware/tests/matchers.spec.ts +0 -134
- package/src/migrations/definitions.ts +0 -40
- package/src/migrations/index.ts +0 -2
- package/src/migrations/migrations.ts +0 -191
- package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +0 -11
- package/src/migrations/tests/migrations.spec.ts +0 -64
- package/src/objectStore/buckets/app.ts +0 -40
- package/src/objectStore/buckets/global.ts +0 -29
- package/src/objectStore/buckets/index.ts +0 -3
- package/src/objectStore/buckets/plugins.ts +0 -71
- package/src/objectStore/buckets/tests/app.spec.ts +0 -171
- package/src/objectStore/buckets/tests/global.spec.ts +0 -74
- package/src/objectStore/buckets/tests/plugins.spec.ts +0 -111
- package/src/objectStore/cloudfront.ts +0 -41
- package/src/objectStore/index.ts +0 -3
- package/src/objectStore/objectStore.ts +0 -440
- package/src/objectStore/utils.ts +0 -27
- package/src/platform/index.ts +0 -3
- package/src/platform/platformDb.ts +0 -6
- package/src/platform/tenants.ts +0 -101
- package/src/platform/tests/tenants.spec.ts +0 -26
- package/src/platform/users.ts +0 -90
- package/src/plugin/index.ts +0 -1
- package/src/plugin/tests/validation.spec.ts +0 -83
- package/src/plugin/utils.ts +0 -156
- package/src/queue/constants.ts +0 -6
- package/src/queue/inMemoryQueue.ts +0 -141
- package/src/queue/index.ts +0 -2
- package/src/queue/listeners.ts +0 -195
- package/src/queue/queue.ts +0 -54
- package/src/redis/index.ts +0 -6
- package/src/redis/init.ts +0 -86
- package/src/redis/redis.ts +0 -308
- package/src/redis/redlockImpl.ts +0 -139
- package/src/redis/utils.ts +0 -117
- package/src/security/encryption.ts +0 -179
- package/src/security/permissions.ts +0 -159
- package/src/security/roles.ts +0 -420
- package/src/security/sessions.ts +0 -120
- package/src/security/tests/encryption.spec.ts +0 -31
- package/src/security/tests/permissions.spec.ts +0 -145
- package/src/security/tests/sessions.spec.ts +0 -12
- package/src/tenancy/db.ts +0 -6
- package/src/tenancy/index.ts +0 -2
- package/src/tenancy/tenancy.ts +0 -140
- package/src/tenancy/tests/tenancy.spec.ts +0 -184
- package/src/timers/index.ts +0 -1
- package/src/timers/timers.ts +0 -22
- package/src/users/db.ts +0 -460
- package/src/users/events.ts +0 -176
- package/src/users/index.ts +0 -4
- package/src/users/lookup.ts +0 -102
- package/src/users/users.ts +0 -276
- package/src/users/utils.ts +0 -55
- package/src/utils/hashing.ts +0 -14
- package/src/utils/index.ts +0 -3
- package/src/utils/stringUtils.ts +0 -8
- package/src/utils/tests/utils.spec.ts +0 -191
- package/src/utils/utils.ts +0 -239
- package/tests/core/logging.ts +0 -34
- package/tests/core/utilities/index.ts +0 -6
- package/tests/core/utilities/jestUtils.ts +0 -30
- package/tests/core/utilities/mocks/alerts.ts +0 -3
- package/tests/core/utilities/mocks/date.ts +0 -2
- package/tests/core/utilities/mocks/events.ts +0 -131
- package/tests/core/utilities/mocks/fetch.ts +0 -17
- package/tests/core/utilities/mocks/index.ts +0 -10
- package/tests/core/utilities/mocks/licenses.ts +0 -107
- package/tests/core/utilities/mocks/posthog.ts +0 -7
- package/tests/core/utilities/structures/Chance.ts +0 -20
- package/tests/core/utilities/structures/accounts.ts +0 -115
- package/tests/core/utilities/structures/apps.ts +0 -21
- package/tests/core/utilities/structures/common.ts +0 -7
- package/tests/core/utilities/structures/db.ts +0 -12
- package/tests/core/utilities/structures/documents/index.ts +0 -1
- package/tests/core/utilities/structures/documents/platform/index.ts +0 -1
- package/tests/core/utilities/structures/documents/platform/installation.ts +0 -12
- package/tests/core/utilities/structures/generator.ts +0 -2
- package/tests/core/utilities/structures/index.ts +0 -15
- package/tests/core/utilities/structures/koa.ts +0 -16
- package/tests/core/utilities/structures/licenses.ts +0 -167
- package/tests/core/utilities/structures/plugins.ts +0 -19
- package/tests/core/utilities/structures/quotas.ts +0 -67
- package/tests/core/utilities/structures/scim.ts +0 -80
- package/tests/core/utilities/structures/shared.ts +0 -19
- package/tests/core/utilities/structures/sso.ts +0 -119
- package/tests/core/utilities/structures/tenants.ts +0 -5
- package/tests/core/utilities/structures/userGroups.ts +0 -10
- package/tests/core/utilities/structures/users.ts +0 -73
- package/tests/core/utilities/testContainerUtils.ts +0 -98
- package/tests/core/utilities/utils/index.ts +0 -1
- package/tests/core/utilities/utils/time.ts +0 -3
- package/tests/extra/DBTestConfiguration.ts +0 -36
- package/tests/extra/index.ts +0 -2
- package/tests/extra/testEnv.ts +0 -95
- package/tests/index.ts +0 -1
- package/tests/jestEnv.ts +0 -6
- package/tests/jestSetup.ts +0 -28
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import crypto from "crypto"
|
|
2
|
-
import fs from "fs"
|
|
3
|
-
import zlib from "zlib"
|
|
4
|
-
import env from "../environment"
|
|
5
|
-
import { join } from "path"
|
|
6
|
-
|
|
7
|
-
const ALGO = "aes-256-ctr"
|
|
8
|
-
const SEPARATOR = "-"
|
|
9
|
-
const ITERATIONS = 10000
|
|
10
|
-
const STRETCH_LENGTH = 32
|
|
11
|
-
|
|
12
|
-
const SALT_LENGTH = 16
|
|
13
|
-
const IV_LENGTH = 16
|
|
14
|
-
|
|
15
|
-
export enum SecretOption {
|
|
16
|
-
API = "api",
|
|
17
|
-
ENCRYPTION = "encryption",
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function getSecret(secretOption: SecretOption): string {
|
|
21
|
-
let secret, secretName
|
|
22
|
-
switch (secretOption) {
|
|
23
|
-
case SecretOption.ENCRYPTION:
|
|
24
|
-
secret = env.ENCRYPTION_KEY
|
|
25
|
-
secretName = "ENCRYPTION_KEY"
|
|
26
|
-
break
|
|
27
|
-
case SecretOption.API:
|
|
28
|
-
default:
|
|
29
|
-
secret = env.API_ENCRYPTION_KEY
|
|
30
|
-
secretName = "API_ENCRYPTION_KEY"
|
|
31
|
-
break
|
|
32
|
-
}
|
|
33
|
-
if (!secret) {
|
|
34
|
-
throw new Error(`Secret "${secretName}" has not been set in environment.`)
|
|
35
|
-
}
|
|
36
|
-
return secret
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function stretchString(secret: string, salt: Buffer) {
|
|
40
|
-
return crypto.pbkdf2Sync(secret, salt, ITERATIONS, STRETCH_LENGTH, "sha512")
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function encrypt(
|
|
44
|
-
input: string,
|
|
45
|
-
secretOption: SecretOption = SecretOption.API
|
|
46
|
-
) {
|
|
47
|
-
const salt = crypto.randomBytes(SALT_LENGTH)
|
|
48
|
-
const stretched = stretchString(getSecret(secretOption), salt)
|
|
49
|
-
const cipher = crypto.createCipheriv(ALGO, stretched, salt)
|
|
50
|
-
const base = cipher.update(input)
|
|
51
|
-
const final = cipher.final()
|
|
52
|
-
const encrypted = Buffer.concat([base, final]).toString("hex")
|
|
53
|
-
return `${salt.toString("hex")}${SEPARATOR}${encrypted}`
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function decrypt(
|
|
57
|
-
input: string,
|
|
58
|
-
secretOption: SecretOption = SecretOption.API
|
|
59
|
-
) {
|
|
60
|
-
const [salt, encrypted] = input.split(SEPARATOR)
|
|
61
|
-
const saltBuffer = Buffer.from(salt, "hex")
|
|
62
|
-
const stretched = stretchString(getSecret(secretOption), saltBuffer)
|
|
63
|
-
const decipher = crypto.createDecipheriv(ALGO, stretched, saltBuffer)
|
|
64
|
-
const base = decipher.update(Buffer.from(encrypted, "hex"))
|
|
65
|
-
const final = decipher.final()
|
|
66
|
-
return Buffer.concat([base, final]).toString()
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export async function encryptFile(
|
|
70
|
-
{ dir, filename }: { dir: string; filename: string },
|
|
71
|
-
secret: string
|
|
72
|
-
) {
|
|
73
|
-
const outputFileName = `${filename}.enc`
|
|
74
|
-
|
|
75
|
-
const filePath = join(dir, filename)
|
|
76
|
-
const inputFile = fs.createReadStream(filePath)
|
|
77
|
-
const outputFile = fs.createWriteStream(join(dir, outputFileName))
|
|
78
|
-
|
|
79
|
-
const salt = crypto.randomBytes(SALT_LENGTH)
|
|
80
|
-
const iv = crypto.randomBytes(IV_LENGTH)
|
|
81
|
-
const stretched = stretchString(secret, salt)
|
|
82
|
-
const cipher = crypto.createCipheriv(ALGO, stretched, iv)
|
|
83
|
-
|
|
84
|
-
outputFile.write(salt)
|
|
85
|
-
outputFile.write(iv)
|
|
86
|
-
|
|
87
|
-
inputFile.pipe(zlib.createGzip()).pipe(cipher).pipe(outputFile)
|
|
88
|
-
|
|
89
|
-
return new Promise<{ filename: string; dir: string }>(r => {
|
|
90
|
-
outputFile.on("finish", () => {
|
|
91
|
-
r({
|
|
92
|
-
filename: outputFileName,
|
|
93
|
-
dir,
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function getSaltAndIV(path: string) {
|
|
100
|
-
const fileStream = fs.createReadStream(path)
|
|
101
|
-
|
|
102
|
-
const salt = await readBytes(fileStream, SALT_LENGTH)
|
|
103
|
-
const iv = await readBytes(fileStream, IV_LENGTH)
|
|
104
|
-
fileStream.close()
|
|
105
|
-
return { salt, iv }
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export async function decryptFile(
|
|
109
|
-
inputPath: string,
|
|
110
|
-
outputPath: string,
|
|
111
|
-
secret: string
|
|
112
|
-
) {
|
|
113
|
-
const { salt, iv } = await getSaltAndIV(inputPath)
|
|
114
|
-
const inputFile = fs.createReadStream(inputPath, {
|
|
115
|
-
start: SALT_LENGTH + IV_LENGTH,
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
const outputFile = fs.createWriteStream(outputPath)
|
|
119
|
-
|
|
120
|
-
const stretched = stretchString(secret, salt)
|
|
121
|
-
const decipher = crypto.createDecipheriv(ALGO, stretched, iv)
|
|
122
|
-
|
|
123
|
-
const unzip = zlib.createGunzip()
|
|
124
|
-
|
|
125
|
-
inputFile.pipe(decipher).pipe(unzip).pipe(outputFile)
|
|
126
|
-
|
|
127
|
-
return new Promise<void>((res, rej) => {
|
|
128
|
-
outputFile.on("finish", () => {
|
|
129
|
-
outputFile.close()
|
|
130
|
-
res()
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
inputFile.on("error", e => {
|
|
134
|
-
outputFile.close()
|
|
135
|
-
rej(e)
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
decipher.on("error", e => {
|
|
139
|
-
outputFile.close()
|
|
140
|
-
rej(e)
|
|
141
|
-
})
|
|
142
|
-
|
|
143
|
-
unzip.on("error", e => {
|
|
144
|
-
outputFile.close()
|
|
145
|
-
rej(e)
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
outputFile.on("error", e => {
|
|
149
|
-
outputFile.close()
|
|
150
|
-
rej(e)
|
|
151
|
-
})
|
|
152
|
-
})
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function readBytes(stream: fs.ReadStream, length: number) {
|
|
156
|
-
return new Promise<Buffer>((resolve, reject) => {
|
|
157
|
-
let bytesRead = 0
|
|
158
|
-
const data: Buffer[] = []
|
|
159
|
-
|
|
160
|
-
stream.on("readable", () => {
|
|
161
|
-
let chunk
|
|
162
|
-
|
|
163
|
-
while ((chunk = stream.read(length - bytesRead)) !== null) {
|
|
164
|
-
data.push(chunk)
|
|
165
|
-
bytesRead += chunk.length
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
resolve(Buffer.concat(data))
|
|
169
|
-
})
|
|
170
|
-
|
|
171
|
-
stream.on("end", () => {
|
|
172
|
-
reject(new Error("Insufficient data in the stream."))
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
stream.on("error", error => {
|
|
176
|
-
reject(error)
|
|
177
|
-
})
|
|
178
|
-
})
|
|
179
|
-
}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { PermissionType, PermissionLevel } from "@budibase/types"
|
|
2
|
-
export { PermissionType, PermissionLevel } from "@budibase/types"
|
|
3
|
-
import flatten from "lodash/flatten"
|
|
4
|
-
import cloneDeep from "lodash/fp/cloneDeep"
|
|
5
|
-
|
|
6
|
-
export type RoleHierarchy = {
|
|
7
|
-
permissionId: string
|
|
8
|
-
}[]
|
|
9
|
-
|
|
10
|
-
export class Permission {
|
|
11
|
-
type: PermissionType
|
|
12
|
-
level: PermissionLevel
|
|
13
|
-
|
|
14
|
-
constructor(type: PermissionType, level: PermissionLevel) {
|
|
15
|
-
this.type = type
|
|
16
|
-
this.level = level
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function levelToNumber(perm: PermissionLevel) {
|
|
21
|
-
switch (perm) {
|
|
22
|
-
// not everything has execute privileges
|
|
23
|
-
case PermissionLevel.EXECUTE:
|
|
24
|
-
return 0
|
|
25
|
-
case PermissionLevel.READ:
|
|
26
|
-
return 1
|
|
27
|
-
case PermissionLevel.WRITE:
|
|
28
|
-
return 2
|
|
29
|
-
case PermissionLevel.ADMIN:
|
|
30
|
-
return 3
|
|
31
|
-
default:
|
|
32
|
-
return -1
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Given the specified permission level for the user return the levels they are allowed to carry out.
|
|
38
|
-
* @param {string} userPermLevel The permission level of the user.
|
|
39
|
-
* @return {string[]} All the permission levels this user is allowed to carry out.
|
|
40
|
-
*/
|
|
41
|
-
export function getAllowedLevels(userPermLevel: PermissionLevel): string[] {
|
|
42
|
-
switch (userPermLevel) {
|
|
43
|
-
case PermissionLevel.EXECUTE:
|
|
44
|
-
return [PermissionLevel.EXECUTE]
|
|
45
|
-
case PermissionLevel.READ:
|
|
46
|
-
return [PermissionLevel.EXECUTE, PermissionLevel.READ]
|
|
47
|
-
case PermissionLevel.WRITE:
|
|
48
|
-
case PermissionLevel.ADMIN:
|
|
49
|
-
return [
|
|
50
|
-
PermissionLevel.EXECUTE,
|
|
51
|
-
PermissionLevel.READ,
|
|
52
|
-
PermissionLevel.WRITE,
|
|
53
|
-
]
|
|
54
|
-
default:
|
|
55
|
-
return []
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export enum BuiltinPermissionID {
|
|
60
|
-
PUBLIC = "public",
|
|
61
|
-
READ_ONLY = "read_only",
|
|
62
|
-
WRITE = "write",
|
|
63
|
-
ADMIN = "admin",
|
|
64
|
-
POWER = "power",
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export const BUILTIN_PERMISSIONS = {
|
|
68
|
-
PUBLIC: {
|
|
69
|
-
_id: BuiltinPermissionID.PUBLIC,
|
|
70
|
-
name: "Public",
|
|
71
|
-
permissions: [
|
|
72
|
-
new Permission(PermissionType.WEBHOOK, PermissionLevel.EXECUTE),
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
READ_ONLY: {
|
|
76
|
-
_id: BuiltinPermissionID.READ_ONLY,
|
|
77
|
-
name: "Read only",
|
|
78
|
-
permissions: [
|
|
79
|
-
new Permission(PermissionType.QUERY, PermissionLevel.READ),
|
|
80
|
-
new Permission(PermissionType.TABLE, PermissionLevel.READ),
|
|
81
|
-
new Permission(PermissionType.VIEW, PermissionLevel.READ),
|
|
82
|
-
],
|
|
83
|
-
},
|
|
84
|
-
WRITE: {
|
|
85
|
-
_id: BuiltinPermissionID.WRITE,
|
|
86
|
-
name: "Read/Write",
|
|
87
|
-
permissions: [
|
|
88
|
-
new Permission(PermissionType.QUERY, PermissionLevel.WRITE),
|
|
89
|
-
new Permission(PermissionType.TABLE, PermissionLevel.WRITE),
|
|
90
|
-
new Permission(PermissionType.VIEW, PermissionLevel.READ),
|
|
91
|
-
new Permission(PermissionType.AUTOMATION, PermissionLevel.EXECUTE),
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
POWER: {
|
|
95
|
-
_id: BuiltinPermissionID.POWER,
|
|
96
|
-
name: "Power",
|
|
97
|
-
permissions: [
|
|
98
|
-
new Permission(PermissionType.TABLE, PermissionLevel.WRITE),
|
|
99
|
-
new Permission(PermissionType.USER, PermissionLevel.READ),
|
|
100
|
-
new Permission(PermissionType.AUTOMATION, PermissionLevel.EXECUTE),
|
|
101
|
-
new Permission(PermissionType.VIEW, PermissionLevel.READ),
|
|
102
|
-
new Permission(PermissionType.WEBHOOK, PermissionLevel.READ),
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
ADMIN: {
|
|
106
|
-
_id: BuiltinPermissionID.ADMIN,
|
|
107
|
-
name: "Admin",
|
|
108
|
-
permissions: [
|
|
109
|
-
new Permission(PermissionType.TABLE, PermissionLevel.ADMIN),
|
|
110
|
-
new Permission(PermissionType.USER, PermissionLevel.ADMIN),
|
|
111
|
-
new Permission(PermissionType.AUTOMATION, PermissionLevel.ADMIN),
|
|
112
|
-
new Permission(PermissionType.VIEW, PermissionLevel.ADMIN),
|
|
113
|
-
new Permission(PermissionType.WEBHOOK, PermissionLevel.READ),
|
|
114
|
-
new Permission(PermissionType.QUERY, PermissionLevel.ADMIN),
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function getBuiltinPermissions() {
|
|
120
|
-
return cloneDeep(BUILTIN_PERMISSIONS)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export function getBuiltinPermissionByID(id: string) {
|
|
124
|
-
const perms = Object.values(BUILTIN_PERMISSIONS)
|
|
125
|
-
return perms.find(perm => perm._id === id)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export function doesHaveBasePermission(
|
|
129
|
-
permType: PermissionType,
|
|
130
|
-
permLevel: PermissionLevel,
|
|
131
|
-
rolesHierarchy: RoleHierarchy
|
|
132
|
-
) {
|
|
133
|
-
const basePermissions = [
|
|
134
|
-
...new Set(rolesHierarchy.map(role => role.permissionId)),
|
|
135
|
-
]
|
|
136
|
-
const builtins = Object.values(BUILTIN_PERMISSIONS)
|
|
137
|
-
let permissions = flatten(
|
|
138
|
-
builtins
|
|
139
|
-
.filter(builtin => basePermissions.indexOf(builtin._id) !== -1)
|
|
140
|
-
.map(builtin => builtin.permissions)
|
|
141
|
-
)
|
|
142
|
-
for (let permission of permissions) {
|
|
143
|
-
if (
|
|
144
|
-
permission.type === permType &&
|
|
145
|
-
getAllowedLevels(permission.level).indexOf(permLevel) !== -1
|
|
146
|
-
) {
|
|
147
|
-
return true
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return false
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export function isPermissionLevelHigherThanRead(level: PermissionLevel) {
|
|
154
|
-
return levelToNumber(level) > 1
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// utility as a lot of things need simply the builder permission
|
|
158
|
-
export const BUILDER = PermissionType.BUILDER
|
|
159
|
-
export const GLOBAL_BUILDER = PermissionType.GLOBAL_BUILDER
|