@budibase/backend-core 3.2.4 → 3.2.6
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/index.js.map +1 -1
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +11 -4
- package/dist/plugins.js.meta.json +1 -1
- package/package.json +11 -4
- 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 -210
- 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 -150
- package/src/cache/docWritethrough.ts +0 -105
- package/src/cache/generic.ts +0 -33
- package/src/cache/index.ts +0 -8
- package/src/cache/invite.ts +0 -86
- package/src/cache/passwordReset.ts +0 -49
- package/src/cache/tests/docWritethrough.spec.ts +0 -296
- package/src/cache/tests/user.spec.ts +0 -145
- package/src/cache/tests/writethrough.spec.ts +0 -139
- package/src/cache/user.ts +0 -154
- package/src/cache/writethrough.ts +0 -133
- package/src/configs/configs.ts +0 -263
- package/src/configs/index.ts +0 -1
- package/src/configs/tests/configs.spec.ts +0 -184
- package/src/constants/db.ts +0 -75
- package/src/constants/index.ts +0 -2
- package/src/constants/misc.ts +0 -36
- 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 -422
- package/src/context/tests/index.spec.ts +0 -255
- package/src/context/types.ts +0 -26
- package/src/db/Replication.ts +0 -94
- package/src/db/couch/DatabaseImpl.ts +0 -511
- package/src/db/couch/connections.ts +0 -89
- package/src/db/couch/index.ts +0 -4
- package/src/db/couch/pouchDB.ts +0 -97
- package/src/db/couch/pouchDump.ts +0 -0
- package/src/db/couch/tests/DatabaseImpl.spec.ts +0 -118
- package/src/db/couch/utils.ts +0 -55
- package/src/db/db.ts +0 -34
- package/src/db/errors.ts +0 -14
- package/src/db/index.ts +0 -12
- package/src/db/instrumentation.ts +0 -199
- package/src/db/lucene.ts +0 -721
- package/src/db/searchIndexes/index.ts +0 -1
- package/src/db/searchIndexes/searchIndexes.ts +0 -62
- package/src/db/tests/DatabaseImpl.spec.ts +0 -55
- package/src/db/tests/connections.spec.ts +0 -22
- package/src/db/tests/index.spec.ts +0 -32
- package/src/db/tests/lucene.spec.ts +0 -400
- package/src/db/tests/pouch.spec.js +0 -62
- package/src/db/tests/utils.spec.ts +0 -63
- package/src/db/utils.ts +0 -208
- package/src/db/views.ts +0 -245
- package/src/docIds/conversions.ts +0 -60
- package/src/docIds/ids.ts +0 -126
- package/src/docIds/index.ts +0 -2
- package/src/docIds/newid.ts +0 -5
- package/src/docIds/params.ts +0 -189
- package/src/docUpdates/index.ts +0 -24
- package/src/environment.ts +0 -293
- 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 -47
- package/src/events/identification.ts +0 -311
- package/src/events/index.ts +0 -15
- package/src/events/processors/AnalyticsProcessor.ts +0 -64
- package/src/events/processors/AuditLogsProcessor.ts +0 -92
- package/src/events/processors/LoggingProcessor.ts +0 -36
- package/src/events/processors/Processors.ts +0 -52
- package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -38
- 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 -3
- package/src/events/processors/posthog/rateLimiting.ts +0 -106
- package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -164
- package/src/events/processors/types.ts +0 -1
- package/src/events/publishers/account.ts +0 -41
- package/src/events/publishers/ai.ts +0 -21
- package/src/events/publishers/app.ts +0 -168
- 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 -25
- 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 -89
- 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/features/features.ts +0 -277
- package/src/features/index.ts +0 -2
- package/src/features/tests/features.spec.ts +0 -267
- package/src/features/tests/utils.ts +0 -64
- package/src/helpers.ts +0 -9
- package/src/index.ts +0 -59
- package/src/installation.ts +0 -115
- package/src/logging/alerts.ts +0 -26
- package/src/logging/correlation/correlation.ts +0 -15
- package/src/logging/correlation/index.ts +0 -1
- package/src/logging/correlation/middleware.ts +0 -18
- package/src/logging/index.ts +0 -4
- package/src/logging/pino/logger.ts +0 -239
- package/src/logging/pino/middleware.ts +0 -48
- 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 -247
- package/src/middleware/builderOnly.ts +0 -21
- package/src/middleware/builderOrAdmin.ts +0 -21
- package/src/middleware/contentSecurityPolicy.ts +0 -113
- package/src/middleware/csrf.ts +0 -81
- package/src/middleware/errorHandling.ts +0 -43
- package/src/middleware/index.ts +0 -24
- package/src/middleware/internalApi.ts +0 -23
- package/src/middleware/ip.ts +0 -12
- package/src/middleware/joi-validator.ts +0 -58
- package/src/middleware/matchers.ts +0 -39
- package/src/middleware/passport/datasource/google.ts +0 -102
- 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 -152
- package/src/middleware/passport/sso/sso.ts +0 -138
- package/src/middleware/passport/sso/tests/google.spec.ts +0 -68
- package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -144
- 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 -181
- package/src/middleware/tests/contentSecurityPolicy.spec.ts +0 -75
- package/src/middleware/tests/matchers.spec.ts +0 -100
- package/src/migrations/definitions.ts +0 -40
- package/src/migrations/index.ts +0 -2
- package/src/migrations/migrations.ts +0 -186
- 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 -53
- 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 -161
- 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 -585
- package/src/objectStore/utils.ts +0 -113
- 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 -129
- package/src/plugin/index.ts +0 -1
- package/src/plugin/tests/validation.spec.ts +0 -209
- package/src/plugin/utils.ts +0 -175
- package/src/queue/constants.ts +0 -8
- package/src/queue/inMemoryQueue.ts +0 -189
- package/src/queue/index.ts +0 -2
- package/src/queue/listeners.ts +0 -199
- package/src/queue/queue.ts +0 -84
- package/src/redis/index.ts +0 -6
- package/src/redis/init.ts +0 -118
- package/src/redis/redis.ts +0 -358
- package/src/redis/redlockImpl.ts +0 -155
- package/src/redis/tests/redis.spec.ts +0 -207
- package/src/redis/tests/redlockImpl.spec.ts +0 -105
- package/src/redis/utils.ts +0 -128
- package/src/security/auth.ts +0 -24
- package/src/security/encryption.ts +0 -185
- package/src/security/index.ts +0 -1
- package/src/security/permissions.ts +0 -166
- package/src/security/roles.ts +0 -655
- package/src/security/secrets.ts +0 -20
- package/src/security/sessions.ts +0 -123
- package/src/security/tests/auth.spec.ts +0 -45
- package/src/security/tests/encryption.spec.ts +0 -31
- package/src/security/tests/permissions.spec.ts +0 -146
- package/src/security/tests/secrets.spec.ts +0 -35
- package/src/security/tests/sessions.spec.ts +0 -12
- package/src/sql/designDoc.ts +0 -17
- package/src/sql/index.ts +0 -5
- package/src/sql/sql.ts +0 -1854
- package/src/sql/sqlTable.ts +0 -319
- package/src/sql/utils.ts +0 -193
- package/src/tenancy/db.ts +0 -6
- package/src/tenancy/index.ts +0 -2
- package/src/tenancy/tenancy.ts +0 -148
- 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 -582
- package/src/users/events.ts +0 -176
- package/src/users/index.ts +0 -4
- package/src/users/lookup.ts +0 -99
- package/src/users/test/db.spec.ts +0 -188
- package/src/users/test/utils.spec.ts +0 -67
- package/src/users/users.ts +0 -353
- package/src/users/utils.ts +0 -81
- package/src/utils/Duration.ts +0 -56
- package/src/utils/hashing.ts +0 -15
- package/src/utils/index.ts +0 -4
- package/src/utils/stringUtils.ts +0 -8
- package/src/utils/tests/Duration.spec.ts +0 -19
- package/src/utils/tests/utils.spec.ts +0 -204
- package/src/utils/utils.ts +0 -249
- package/tests/core/logging.ts +0 -34
- package/tests/core/users/users.spec.js +0 -53
- package/tests/core/utilities/index.ts +0 -7
- package/tests/core/utilities/jestUtils.ts +0 -33
- package/tests/core/utilities/mocks/alerts.ts +0 -4
- package/tests/core/utilities/mocks/date.ts +0 -3
- package/tests/core/utilities/mocks/events.ts +0 -132
- package/tests/core/utilities/mocks/index.ts +0 -9
- package/tests/core/utilities/mocks/licenses.ts +0 -119
- package/tests/core/utilities/queue.ts +0 -9
- package/tests/core/utilities/structures/Chance.ts +0 -20
- package/tests/core/utilities/structures/accounts.ts +0 -80
- 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 -3
- 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 -190
- package/tests/core/utilities/structures/plugins.ts +0 -19
- package/tests/core/utilities/structures/quotas.ts +0 -72
- package/tests/core/utilities/structures/scim.ts +0 -80
- package/tests/core/utilities/structures/sso.ts +0 -118
- 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 -89
- package/tests/core/utilities/testContainerUtils.ts +0 -165
- package/tests/core/utilities/utils/index.ts +0 -2
- package/tests/core/utilities/utils/queue.ts +0 -27
- 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 -2
- package/tests/jestEnv.ts +0 -10
- package/tests/jestSetup.ts +0 -36
package/src/security/sessions.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import * as redis from "../redis/init"
|
|
2
|
-
import { v4 as uuidv4 } from "uuid"
|
|
3
|
-
import { logWarn } from "../logging"
|
|
4
|
-
import env from "../environment"
|
|
5
|
-
import { Duration } from "../utils"
|
|
6
|
-
import {
|
|
7
|
-
Session,
|
|
8
|
-
ScannedSession,
|
|
9
|
-
SessionKey,
|
|
10
|
-
CreateSession,
|
|
11
|
-
} from "@budibase/types"
|
|
12
|
-
|
|
13
|
-
// a week expiry is the default
|
|
14
|
-
const EXPIRY_SECONDS = env.SESSION_EXPIRY_SECONDS
|
|
15
|
-
? parseInt(env.SESSION_EXPIRY_SECONDS)
|
|
16
|
-
: Duration.fromDays(7).toSeconds()
|
|
17
|
-
|
|
18
|
-
function makeSessionID(userId: string, sessionId: string) {
|
|
19
|
-
return `${userId}/${sessionId}`
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function getSessionsForUser(userId: string): Promise<Session[]> {
|
|
23
|
-
if (!userId) {
|
|
24
|
-
console.trace("Cannot get sessions for undefined userId")
|
|
25
|
-
return []
|
|
26
|
-
}
|
|
27
|
-
const client = await redis.getSessionClient()
|
|
28
|
-
const sessions: ScannedSession[] = await client.scan(userId)
|
|
29
|
-
return sessions.map(session => session.value)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export async function invalidateSessions(
|
|
33
|
-
userId: string,
|
|
34
|
-
opts: { sessionIds?: string[]; reason?: string } = {}
|
|
35
|
-
) {
|
|
36
|
-
try {
|
|
37
|
-
const reason = opts?.reason || "unknown"
|
|
38
|
-
let sessionIds: string[] = opts.sessionIds || []
|
|
39
|
-
let sessionKeys: SessionKey[]
|
|
40
|
-
|
|
41
|
-
// If no sessionIds, get all the sessions for the user
|
|
42
|
-
if (sessionIds.length === 0) {
|
|
43
|
-
const sessions = await getSessionsForUser(userId)
|
|
44
|
-
sessionKeys = sessions.map(session => ({
|
|
45
|
-
key: makeSessionID(session.userId, session.sessionId),
|
|
46
|
-
}))
|
|
47
|
-
} else {
|
|
48
|
-
// use the passed array of sessionIds
|
|
49
|
-
sessionIds = Array.isArray(sessionIds) ? sessionIds : [sessionIds]
|
|
50
|
-
sessionKeys = sessionIds.map(sessionId => ({
|
|
51
|
-
key: makeSessionID(userId, sessionId),
|
|
52
|
-
}))
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (sessionKeys && sessionKeys.length > 0) {
|
|
56
|
-
const client = await redis.getSessionClient()
|
|
57
|
-
const promises = []
|
|
58
|
-
for (let sessionKey of sessionKeys) {
|
|
59
|
-
promises.push(client.delete(sessionKey.key))
|
|
60
|
-
}
|
|
61
|
-
if (!env.isTest()) {
|
|
62
|
-
logWarn(
|
|
63
|
-
`Invalidating sessions for ${userId} (reason: ${reason}) - ${sessionKeys
|
|
64
|
-
.map(sessionKey => sessionKey.key)
|
|
65
|
-
.join(", ")}`
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
await Promise.all(promises)
|
|
69
|
-
}
|
|
70
|
-
} catch (err) {
|
|
71
|
-
console.error(`Error invalidating sessions: ${err}`)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export async function createASession(
|
|
76
|
-
userId: string,
|
|
77
|
-
createSession: CreateSession
|
|
78
|
-
) {
|
|
79
|
-
// invalidate all other sessions
|
|
80
|
-
await invalidateSessions(userId, { reason: "creation" })
|
|
81
|
-
|
|
82
|
-
const client = await redis.getSessionClient()
|
|
83
|
-
const sessionId = createSession.sessionId
|
|
84
|
-
const csrfToken = createSession.csrfToken ? createSession.csrfToken : uuidv4()
|
|
85
|
-
const key = makeSessionID(userId, sessionId)
|
|
86
|
-
|
|
87
|
-
const session: Session = {
|
|
88
|
-
...createSession,
|
|
89
|
-
csrfToken,
|
|
90
|
-
createdAt: new Date().toISOString(),
|
|
91
|
-
lastAccessedAt: new Date().toISOString(),
|
|
92
|
-
userId,
|
|
93
|
-
}
|
|
94
|
-
await client.store(key, session, EXPIRY_SECONDS)
|
|
95
|
-
return session
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export async function updateSessionTTL(session: Session) {
|
|
99
|
-
const client = await redis.getSessionClient()
|
|
100
|
-
const key = makeSessionID(session.userId, session.sessionId)
|
|
101
|
-
session.lastAccessedAt = new Date().toISOString()
|
|
102
|
-
await client.store(key, session, EXPIRY_SECONDS)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export async function endSession(userId: string, sessionId: string) {
|
|
106
|
-
const client = await redis.getSessionClient()
|
|
107
|
-
await client.delete(makeSessionID(userId, sessionId))
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export async function getSession(
|
|
111
|
-
userId: string,
|
|
112
|
-
sessionId: string
|
|
113
|
-
): Promise<Session> {
|
|
114
|
-
if (!userId || !sessionId) {
|
|
115
|
-
throw new Error(`Invalid session details - ${userId} - ${sessionId}`)
|
|
116
|
-
}
|
|
117
|
-
const client = await redis.getSessionClient()
|
|
118
|
-
const session = await client.get(makeSessionID(userId, sessionId))
|
|
119
|
-
if (!session) {
|
|
120
|
-
throw new Error(`Session not found - ${userId} - ${sessionId}`)
|
|
121
|
-
}
|
|
122
|
-
return session
|
|
123
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { generator } from "../../../tests"
|
|
2
|
-
import { PASSWORD_MAX_LENGTH, validatePassword } from "../auth"
|
|
3
|
-
|
|
4
|
-
describe("auth", () => {
|
|
5
|
-
describe("validatePassword", () => {
|
|
6
|
-
it("a valid password returns successful", () => {
|
|
7
|
-
expect(validatePassword("password123!")).toEqual({ valid: true })
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
it.each([
|
|
11
|
-
["undefined", undefined],
|
|
12
|
-
["null", null],
|
|
13
|
-
["empty", ""],
|
|
14
|
-
])("%s returns unsuccessful", (_, password) => {
|
|
15
|
-
expect(validatePassword(password as string)).toEqual({
|
|
16
|
-
valid: false,
|
|
17
|
-
error: "Password invalid. Minimum 12 characters.",
|
|
18
|
-
})
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it.each([
|
|
22
|
-
generator.word({ length: PASSWORD_MAX_LENGTH }),
|
|
23
|
-
generator.paragraph().substring(0, PASSWORD_MAX_LENGTH),
|
|
24
|
-
])(`can use passwords up to 512 characters in length`, password => {
|
|
25
|
-
expect(validatePassword(password)).toEqual({
|
|
26
|
-
valid: true,
|
|
27
|
-
})
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it.each([
|
|
31
|
-
generator.word({ length: PASSWORD_MAX_LENGTH + 1 }),
|
|
32
|
-
generator
|
|
33
|
-
.paragraph({ sentences: 50 })
|
|
34
|
-
.substring(0, PASSWORD_MAX_LENGTH + 1),
|
|
35
|
-
])(
|
|
36
|
-
`passwords cannot have more than ${PASSWORD_MAX_LENGTH} characters`,
|
|
37
|
-
password => {
|
|
38
|
-
expect(validatePassword(password)).toEqual({
|
|
39
|
-
valid: false,
|
|
40
|
-
error: "Password invalid. Maximum 512 characters.",
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
)
|
|
44
|
-
})
|
|
45
|
-
})
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { encrypt, decrypt, SecretOption, getSecret } from "../encryption"
|
|
2
|
-
import env from "../../environment"
|
|
3
|
-
|
|
4
|
-
describe("encryption", () => {
|
|
5
|
-
it("should throw an error if API encryption key is not set", () => {
|
|
6
|
-
const jwt = getSecret(SecretOption.API)
|
|
7
|
-
expect(jwt).toBe(env.JWT_SECRET?.export().toString())
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
it("should throw an error if encryption key is not set", () => {
|
|
11
|
-
expect(() => getSecret(SecretOption.ENCRYPTION)).toThrow(
|
|
12
|
-
'Secret "ENCRYPTION_KEY" has not been set in environment.'
|
|
13
|
-
)
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it("should encrypt and decrypt a string using API encryption key", () => {
|
|
17
|
-
env._set("API_ENCRYPTION_KEY", "api_secret")
|
|
18
|
-
const plaintext = "budibase"
|
|
19
|
-
const apiEncrypted = encrypt(plaintext, SecretOption.API)
|
|
20
|
-
const decrypted = decrypt(apiEncrypted, SecretOption.API)
|
|
21
|
-
expect(decrypted).toEqual(plaintext)
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it("should encrypt and decrypt a string using encryption key", () => {
|
|
25
|
-
env._set("ENCRYPTION_KEY", "normal_secret")
|
|
26
|
-
const plaintext = "budibase"
|
|
27
|
-
const encryptionEncrypted = encrypt(plaintext, SecretOption.ENCRYPTION)
|
|
28
|
-
const decrypted = decrypt(encryptionEncrypted, SecretOption.ENCRYPTION)
|
|
29
|
-
expect(decrypted).toEqual(plaintext)
|
|
30
|
-
})
|
|
31
|
-
})
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import cloneDeep from "lodash/cloneDeep"
|
|
2
|
-
import * as permissions from "../permissions"
|
|
3
|
-
import { BUILTIN_ROLE_IDS } from "../roles"
|
|
4
|
-
import { BuiltinPermissionID } from "@budibase/types"
|
|
5
|
-
|
|
6
|
-
describe("levelToNumber", () => {
|
|
7
|
-
it("should return 0 for EXECUTE", () => {
|
|
8
|
-
expect(permissions.levelToNumber(permissions.PermissionLevel.EXECUTE)).toBe(
|
|
9
|
-
0
|
|
10
|
-
)
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it("should return 1 for READ", () => {
|
|
14
|
-
expect(permissions.levelToNumber(permissions.PermissionLevel.READ)).toBe(1)
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
it("should return 2 for WRITE", () => {
|
|
18
|
-
expect(permissions.levelToNumber(permissions.PermissionLevel.WRITE)).toBe(2)
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it("should return 3 for ADMIN", () => {
|
|
22
|
-
expect(permissions.levelToNumber(permissions.PermissionLevel.ADMIN)).toBe(3)
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it("should return -1 for an unknown permission level", () => {
|
|
26
|
-
expect(
|
|
27
|
-
permissions.levelToNumber("unknown" as permissions.PermissionLevel)
|
|
28
|
-
).toBe(-1)
|
|
29
|
-
})
|
|
30
|
-
})
|
|
31
|
-
describe("getAllowedLevels", () => {
|
|
32
|
-
it('should return ["execute"] for EXECUTE', () => {
|
|
33
|
-
expect(
|
|
34
|
-
permissions.getAllowedLevels(permissions.PermissionLevel.EXECUTE)
|
|
35
|
-
).toEqual([permissions.PermissionLevel.EXECUTE])
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('should return ["execute", "read"] for READ', () => {
|
|
39
|
-
expect(
|
|
40
|
-
permissions.getAllowedLevels(permissions.PermissionLevel.READ)
|
|
41
|
-
).toEqual([
|
|
42
|
-
permissions.PermissionLevel.EXECUTE,
|
|
43
|
-
permissions.PermissionLevel.READ,
|
|
44
|
-
])
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('should return ["execute", "read", "write"] for WRITE', () => {
|
|
48
|
-
expect(
|
|
49
|
-
permissions.getAllowedLevels(permissions.PermissionLevel.WRITE)
|
|
50
|
-
).toEqual([
|
|
51
|
-
permissions.PermissionLevel.EXECUTE,
|
|
52
|
-
permissions.PermissionLevel.READ,
|
|
53
|
-
permissions.PermissionLevel.WRITE,
|
|
54
|
-
])
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('should return ["execute", "read", "write"] for ADMIN', () => {
|
|
58
|
-
expect(
|
|
59
|
-
permissions.getAllowedLevels(permissions.PermissionLevel.ADMIN)
|
|
60
|
-
).toEqual([
|
|
61
|
-
permissions.PermissionLevel.EXECUTE,
|
|
62
|
-
permissions.PermissionLevel.READ,
|
|
63
|
-
permissions.PermissionLevel.WRITE,
|
|
64
|
-
])
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
it("should return [] for an unknown permission level", () => {
|
|
68
|
-
expect(
|
|
69
|
-
permissions.getAllowedLevels("unknown" as permissions.PermissionLevel)
|
|
70
|
-
).toEqual([])
|
|
71
|
-
})
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
describe("doesHaveBasePermission", () => {
|
|
75
|
-
it("should return true if base permission has the required level", () => {
|
|
76
|
-
const permType = permissions.PermissionType.USER
|
|
77
|
-
const permLevel = permissions.PermissionLevel.READ
|
|
78
|
-
const rolesHierarchy = [
|
|
79
|
-
{
|
|
80
|
-
roleId: BUILTIN_ROLE_IDS.ADMIN,
|
|
81
|
-
permissionId: BuiltinPermissionID.ADMIN,
|
|
82
|
-
},
|
|
83
|
-
]
|
|
84
|
-
expect(
|
|
85
|
-
permissions.doesHaveBasePermission(permType, permLevel, rolesHierarchy)
|
|
86
|
-
).toBe(true)
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
it("should return false if base permission does not have the required level", () => {
|
|
90
|
-
const permType = permissions.PermissionType.APP
|
|
91
|
-
const permLevel = permissions.PermissionLevel.READ
|
|
92
|
-
const rolesHierarchy = [
|
|
93
|
-
{
|
|
94
|
-
roleId: BUILTIN_ROLE_IDS.PUBLIC,
|
|
95
|
-
permissionId: BuiltinPermissionID.PUBLIC,
|
|
96
|
-
},
|
|
97
|
-
]
|
|
98
|
-
expect(
|
|
99
|
-
permissions.doesHaveBasePermission(permType, permLevel, rolesHierarchy)
|
|
100
|
-
).toBe(false)
|
|
101
|
-
})
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
describe("isPermissionLevelHigherThanRead", () => {
|
|
105
|
-
it("should return true if level is higher than read", () => {
|
|
106
|
-
expect(
|
|
107
|
-
permissions.isPermissionLevelHigherThanRead(
|
|
108
|
-
permissions.PermissionLevel.WRITE
|
|
109
|
-
)
|
|
110
|
-
).toBe(true)
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
it("should return false if level is read or lower", () => {
|
|
114
|
-
expect(
|
|
115
|
-
permissions.isPermissionLevelHigherThanRead(
|
|
116
|
-
permissions.PermissionLevel.READ
|
|
117
|
-
)
|
|
118
|
-
).toBe(false)
|
|
119
|
-
})
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
describe("getBuiltinPermissions", () => {
|
|
123
|
-
it("returns a clone of the builtin permissions", () => {
|
|
124
|
-
const builtins = permissions.getBuiltinPermissions()
|
|
125
|
-
expect(builtins).toEqual(cloneDeep(permissions.BUILTIN_PERMISSIONS))
|
|
126
|
-
expect(builtins).not.toBe(permissions.BUILTIN_PERMISSIONS)
|
|
127
|
-
})
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
describe("getBuiltinPermissionByID", () => {
|
|
131
|
-
it("returns correct permission object for valid ID", () => {
|
|
132
|
-
const expectedPermission = {
|
|
133
|
-
_id: BuiltinPermissionID.PUBLIC,
|
|
134
|
-
name: "Public",
|
|
135
|
-
permissions: [
|
|
136
|
-
new permissions.Permission(
|
|
137
|
-
permissions.PermissionType.WEBHOOK,
|
|
138
|
-
permissions.PermissionLevel.EXECUTE
|
|
139
|
-
),
|
|
140
|
-
],
|
|
141
|
-
}
|
|
142
|
-
expect(permissions.getBuiltinPermissionByID("public")).toEqual(
|
|
143
|
-
expectedPermission
|
|
144
|
-
)
|
|
145
|
-
})
|
|
146
|
-
})
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "crypto"
|
|
2
|
-
import environment, { SECRETS } from "../../environment"
|
|
3
|
-
import { stringContainsSecret } from "../secrets"
|
|
4
|
-
|
|
5
|
-
describe("secrets", () => {
|
|
6
|
-
describe("stringContainsSecret", () => {
|
|
7
|
-
it.each(SECRETS)("detects that a string contains a secret in: %s", key => {
|
|
8
|
-
const needle = randomUUID()
|
|
9
|
-
const haystack = `this is a secret: ${needle}`
|
|
10
|
-
const old = environment[key]
|
|
11
|
-
environment._set(key, needle)
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
expect(stringContainsSecret(haystack)).toBe(true)
|
|
15
|
-
} finally {
|
|
16
|
-
environment._set(key, old)
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it.each(SECRETS)(
|
|
21
|
-
"detects that a string does not contain a secret in: %s",
|
|
22
|
-
key => {
|
|
23
|
-
const needle = randomUUID()
|
|
24
|
-
const haystack = `this does not contain a secret`
|
|
25
|
-
const old = environment[key]
|
|
26
|
-
environment._set(key, needle)
|
|
27
|
-
try {
|
|
28
|
-
expect(stringContainsSecret(haystack)).toBe(false)
|
|
29
|
-
} finally {
|
|
30
|
-
environment._set(key, old)
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
)
|
|
34
|
-
})
|
|
35
|
-
})
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import * as sessions from "../sessions"
|
|
2
|
-
|
|
3
|
-
describe("sessions", () => {
|
|
4
|
-
describe("getSessionsForUser", () => {
|
|
5
|
-
it("returns empty when user is undefined", async () => {
|
|
6
|
-
// @ts-ignore - allow the undefined to be passed
|
|
7
|
-
const results = await sessions.getSessionsForUser(undefined)
|
|
8
|
-
|
|
9
|
-
expect(results).toStrictEqual([])
|
|
10
|
-
})
|
|
11
|
-
})
|
|
12
|
-
})
|
package/src/sql/designDoc.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { PreSaveSQLiteDefinition } from "@budibase/types"
|
|
2
|
-
import { SQLITE_DESIGN_DOC_ID } from "../constants"
|
|
3
|
-
|
|
4
|
-
// the table id property defines which property in the document
|
|
5
|
-
// to use when splitting the documents into different sqlite tables
|
|
6
|
-
export function base(tableIdProp: string): PreSaveSQLiteDefinition {
|
|
7
|
-
return {
|
|
8
|
-
_id: SQLITE_DESIGN_DOC_ID,
|
|
9
|
-
language: "sqlite",
|
|
10
|
-
sql: {
|
|
11
|
-
tables: {},
|
|
12
|
-
options: {
|
|
13
|
-
table_name: tableIdProp,
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
}
|
|
17
|
-
}
|