@budibase/backend-core 2.9.40-alpha.6 → 2.10.1
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 +5 -4
- package/dist/index.js.map +2 -2
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +6 -6
- package/dist/src/cache/appMetadata.js +1 -1
- package/dist/src/cache/appMetadata.js.map +1 -1
- package/dist/src/constants/misc.d.ts +0 -2
- package/dist/src/constants/misc.js +0 -2
- package/dist/src/constants/misc.js.map +1 -1
- package/dist/src/environment.js +5 -4
- package/dist/src/environment.js.map +1 -1
- package/dist/src/logging/system.d.ts +1 -1
- package/dist/src/timers/timers.d.ts +1 -1
- package/package.json +6 -6
- package/src/accounts/accounts.ts +82 -0
- package/src/accounts/api.ts +59 -0
- package/src/accounts/index.ts +1 -0
- package/src/auth/auth.ts +208 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/tests/auth.spec.ts +14 -0
- package/src/blacklist/blacklist.ts +54 -0
- package/src/blacklist/index.ts +1 -0
- package/src/blacklist/tests/blacklist.spec.ts +46 -0
- package/src/cache/appMetadata.ts +88 -0
- package/src/cache/base/index.ts +92 -0
- package/src/cache/generic.ts +30 -0
- package/src/cache/index.ts +5 -0
- package/src/cache/tests/writethrough.spec.ts +138 -0
- package/src/cache/user.ts +83 -0
- package/src/cache/writethrough.ts +133 -0
- package/src/configs/configs.ts +257 -0
- package/src/configs/index.ts +1 -0
- package/src/configs/tests/configs.spec.ts +184 -0
- package/src/constants/db.ts +63 -0
- package/src/constants/index.ts +2 -0
- package/src/constants/misc.ts +50 -0
- package/src/context/Context.ts +14 -0
- package/src/context/identity.ts +58 -0
- package/src/context/index.ts +3 -0
- package/src/context/mainContext.ts +310 -0
- package/src/context/tests/index.spec.ts +147 -0
- package/src/context/types.ts +11 -0
- package/src/db/Replication.ts +84 -0
- package/src/db/constants.ts +10 -0
- package/src/db/couch/DatabaseImpl.ts +238 -0
- package/src/db/couch/connections.ts +77 -0
- package/src/db/couch/index.ts +5 -0
- package/src/db/couch/pouchDB.ts +97 -0
- package/src/db/couch/pouchDump.ts +0 -0
- package/src/db/couch/utils.ts +50 -0
- package/src/db/db.ts +43 -0
- package/src/db/errors.ts +14 -0
- package/src/db/index.ts +12 -0
- package/src/db/lucene.ts +750 -0
- package/src/db/searchIndexes/index.ts +1 -0
- package/src/db/searchIndexes/searchIndexes.ts +62 -0
- package/src/db/tests/index.spec.js +25 -0
- package/src/db/tests/lucene.spec.ts +368 -0
- package/src/db/tests/pouch.spec.js +62 -0
- package/src/db/tests/utils.spec.ts +63 -0
- package/src/db/utils.ts +207 -0
- package/src/db/views.ts +241 -0
- package/src/docIds/conversions.ts +59 -0
- package/src/docIds/ids.ts +113 -0
- package/src/docIds/index.ts +2 -0
- package/src/docIds/newid.ts +5 -0
- package/src/docIds/params.ts +174 -0
- package/src/docUpdates/index.ts +29 -0
- package/src/environment.ts +201 -0
- package/src/errors/errors.ts +119 -0
- package/src/errors/index.ts +1 -0
- package/src/events/analytics.ts +6 -0
- package/src/events/asyncEvents/index.ts +2 -0
- package/src/events/asyncEvents/publisher.ts +12 -0
- package/src/events/asyncEvents/queue.ts +22 -0
- package/src/events/backfill.ts +183 -0
- package/src/events/documentId.ts +56 -0
- package/src/events/events.ts +40 -0
- package/src/events/identification.ts +310 -0
- package/src/events/index.ts +14 -0
- package/src/events/processors/AnalyticsProcessor.ts +64 -0
- package/src/events/processors/AuditLogsProcessor.ts +93 -0
- package/src/events/processors/LoggingProcessor.ts +37 -0
- package/src/events/processors/Processors.ts +52 -0
- package/src/events/processors/async/DocumentUpdateProcessor.ts +43 -0
- package/src/events/processors/index.ts +19 -0
- package/src/events/processors/posthog/PosthogProcessor.ts +118 -0
- package/src/events/processors/posthog/index.ts +2 -0
- package/src/events/processors/posthog/rateLimiting.ts +106 -0
- package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +168 -0
- package/src/events/processors/types.ts +1 -0
- package/src/events/publishers/account.ts +35 -0
- package/src/events/publishers/app.ts +155 -0
- package/src/events/publishers/auditLog.ts +26 -0
- package/src/events/publishers/auth.ts +73 -0
- package/src/events/publishers/automation.ts +110 -0
- package/src/events/publishers/backfill.ts +74 -0
- package/src/events/publishers/backup.ts +42 -0
- package/src/events/publishers/datasource.ts +48 -0
- package/src/events/publishers/email.ts +17 -0
- package/src/events/publishers/environmentVariable.ts +38 -0
- package/src/events/publishers/group.ts +99 -0
- package/src/events/publishers/index.ts +24 -0
- package/src/events/publishers/installation.ts +38 -0
- package/src/events/publishers/layout.ts +26 -0
- package/src/events/publishers/license.ts +84 -0
- package/src/events/publishers/org.ts +37 -0
- package/src/events/publishers/plugin.ts +47 -0
- package/src/events/publishers/query.ts +88 -0
- package/src/events/publishers/role.ts +62 -0
- package/src/events/publishers/rows.ts +29 -0
- package/src/events/publishers/screen.ts +36 -0
- package/src/events/publishers/serve.ts +43 -0
- package/src/events/publishers/table.ts +70 -0
- package/src/events/publishers/user.ts +202 -0
- package/src/events/publishers/view.ts +107 -0
- package/src/features/index.ts +78 -0
- package/src/features/installation.ts +17 -0
- package/src/features/tests/featureFlags.spec.ts +85 -0
- package/src/helpers.ts +9 -0
- package/src/index.ts +54 -0
- package/src/installation.ts +107 -0
- package/src/logging/alerts.ts +26 -0
- package/src/logging/correlation/correlation.ts +13 -0
- package/src/logging/correlation/index.ts +1 -0
- package/src/logging/correlation/middleware.ts +17 -0
- package/src/logging/index.ts +4 -0
- package/src/logging/pino/logger.ts +232 -0
- package/src/logging/pino/middleware.ts +45 -0
- package/src/logging/system.ts +81 -0
- package/src/logging/tests/system.spec.ts +61 -0
- package/src/middleware/adminOnly.ts +9 -0
- package/src/middleware/auditLog.ts +6 -0
- package/src/middleware/authenticated.ts +193 -0
- package/src/middleware/builderOnly.ts +21 -0
- package/src/middleware/builderOrAdmin.ts +21 -0
- package/src/middleware/csrf.ts +81 -0
- package/src/middleware/errorHandling.ts +29 -0
- package/src/middleware/index.ts +21 -0
- package/src/middleware/internalApi.ts +23 -0
- package/src/middleware/joi-validator.ts +45 -0
- package/src/middleware/matchers.ts +47 -0
- package/src/middleware/passport/datasource/google.ts +95 -0
- package/src/middleware/passport/local.ts +54 -0
- package/src/middleware/passport/sso/google.ts +77 -0
- package/src/middleware/passport/sso/oidc.ts +154 -0
- package/src/middleware/passport/sso/sso.ts +165 -0
- package/src/middleware/passport/sso/tests/google.spec.ts +67 -0
- package/src/middleware/passport/sso/tests/oidc.spec.ts +152 -0
- package/src/middleware/passport/sso/tests/sso.spec.ts +197 -0
- package/src/middleware/passport/utils.ts +38 -0
- package/src/middleware/querystringToBody.ts +28 -0
- package/src/middleware/tenancy.ts +36 -0
- package/src/middleware/tests/builder.spec.ts +180 -0
- package/src/middleware/tests/matchers.spec.ts +134 -0
- package/src/migrations/definitions.ts +40 -0
- package/src/migrations/index.ts +2 -0
- package/src/migrations/migrations.ts +191 -0
- package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +11 -0
- package/src/migrations/tests/migrations.spec.ts +64 -0
- package/src/objectStore/buckets/app.ts +40 -0
- package/src/objectStore/buckets/global.ts +29 -0
- package/src/objectStore/buckets/index.ts +3 -0
- package/src/objectStore/buckets/plugins.ts +71 -0
- package/src/objectStore/buckets/tests/app.spec.ts +171 -0
- package/src/objectStore/buckets/tests/global.spec.ts +74 -0
- package/src/objectStore/buckets/tests/plugins.spec.ts +111 -0
- package/src/objectStore/cloudfront.ts +41 -0
- package/src/objectStore/index.ts +3 -0
- package/src/objectStore/objectStore.ts +440 -0
- package/src/objectStore/utils.ts +27 -0
- package/src/platform/index.ts +3 -0
- package/src/platform/platformDb.ts +6 -0
- package/src/platform/tenants.ts +101 -0
- package/src/platform/tests/tenants.spec.ts +26 -0
- package/src/platform/users.ts +90 -0
- package/src/plugin/index.ts +1 -0
- package/src/plugin/tests/validation.spec.ts +83 -0
- package/src/plugin/utils.ts +156 -0
- package/src/queue/constants.ts +6 -0
- package/src/queue/inMemoryQueue.ts +141 -0
- package/src/queue/index.ts +2 -0
- package/src/queue/listeners.ts +195 -0
- package/src/queue/queue.ts +54 -0
- package/src/redis/index.ts +6 -0
- package/src/redis/init.ts +86 -0
- package/src/redis/redis.ts +308 -0
- package/src/redis/redlockImpl.ts +139 -0
- package/src/redis/utils.ts +117 -0
- package/src/security/encryption.ts +179 -0
- package/src/security/permissions.ts +158 -0
- package/src/security/roles.ts +389 -0
- package/src/security/sessions.ts +120 -0
- package/src/security/tests/encryption.spec.ts +31 -0
- package/src/security/tests/permissions.spec.ts +145 -0
- package/src/security/tests/sessions.spec.ts +12 -0
- package/src/tenancy/db.ts +6 -0
- package/src/tenancy/index.ts +2 -0
- package/src/tenancy/tenancy.ts +140 -0
- package/src/tenancy/tests/tenancy.spec.ts +184 -0
- package/src/timers/index.ts +1 -0
- package/src/timers/timers.ts +22 -0
- package/src/users/db.ts +484 -0
- package/src/users/events.ts +176 -0
- package/src/users/index.ts +4 -0
- package/src/users/lookup.ts +102 -0
- package/src/users/users.ts +276 -0
- package/src/users/utils.ts +55 -0
- package/src/utils/hashing.ts +14 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/stringUtils.ts +8 -0
- package/src/utils/tests/utils.spec.ts +191 -0
- package/src/utils/utils.ts +239 -0
- package/tests/core/logging.ts +34 -0
- package/tests/core/utilities/index.ts +6 -0
- package/tests/core/utilities/jestUtils.ts +30 -0
- package/tests/core/utilities/mocks/alerts.ts +3 -0
- package/tests/core/utilities/mocks/date.ts +2 -0
- package/tests/core/utilities/mocks/events.ts +131 -0
- package/tests/core/utilities/mocks/fetch.ts +17 -0
- package/tests/core/utilities/mocks/index.ts +10 -0
- package/tests/core/utilities/mocks/licenses.ts +115 -0
- package/tests/core/utilities/mocks/posthog.ts +7 -0
- package/tests/core/utilities/structures/Chance.ts +20 -0
- package/tests/core/utilities/structures/accounts.ts +115 -0
- package/tests/core/utilities/structures/apps.ts +21 -0
- package/tests/core/utilities/structures/common.ts +7 -0
- package/tests/core/utilities/structures/db.ts +12 -0
- package/tests/core/utilities/structures/documents/index.ts +1 -0
- package/tests/core/utilities/structures/documents/platform/index.ts +1 -0
- package/tests/core/utilities/structures/documents/platform/installation.ts +12 -0
- package/tests/core/utilities/structures/generator.ts +2 -0
- package/tests/core/utilities/structures/index.ts +15 -0
- package/tests/core/utilities/structures/koa.ts +16 -0
- package/tests/core/utilities/structures/licenses.ts +167 -0
- package/tests/core/utilities/structures/plugins.ts +19 -0
- package/tests/core/utilities/structures/quotas.ts +67 -0
- package/tests/core/utilities/structures/scim.ts +80 -0
- package/tests/core/utilities/structures/shared.ts +19 -0
- package/tests/core/utilities/structures/sso.ts +119 -0
- package/tests/core/utilities/structures/tenants.ts +5 -0
- package/tests/core/utilities/structures/userGroups.ts +10 -0
- package/tests/core/utilities/structures/users.ts +73 -0
- package/tests/core/utilities/testContainerUtils.ts +85 -0
- package/tests/core/utilities/utils/index.ts +1 -0
- package/tests/core/utilities/utils/time.ts +3 -0
- package/tests/extra/DBTestConfiguration.ts +36 -0
- package/tests/extra/index.ts +2 -0
- package/tests/extra/testEnv.ts +95 -0
- package/tests/index.ts +1 -0
- package/tests/jestEnv.ts +6 -0
- package/tests/jestSetup.ts +28 -0
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/backend-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.1",
|
|
4
4
|
"description": "Budibase backend core libraries used in server and worker",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@budibase/nano": "10.1.2",
|
|
25
25
|
"@budibase/pouchdb-replication-stream": "1.2.10",
|
|
26
|
-
"@budibase/shared-core": "2.
|
|
27
|
-
"@budibase/types": "2.
|
|
26
|
+
"@budibase/shared-core": "2.10.1",
|
|
27
|
+
"@budibase/types": "2.10.1",
|
|
28
28
|
"@techpass/passport-openidconnect": "0.3.2",
|
|
29
29
|
"aws-cloudfront-sign": "2.2.0",
|
|
30
30
|
"aws-sdk": "2.1030.0",
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"@types/jest": "29.5.3",
|
|
69
69
|
"@types/koa": "2.13.4",
|
|
70
70
|
"@types/lodash": "4.14.180",
|
|
71
|
-
"@types/node": "18.
|
|
72
|
-
"@types/node-fetch": "2.6.
|
|
71
|
+
"@types/node": "14.18.20",
|
|
72
|
+
"@types/node-fetch": "2.6.1",
|
|
73
73
|
"@types/pouchdb": "6.4.0",
|
|
74
74
|
"@types/redlock": "4.0.3",
|
|
75
75
|
"@types/semver": "7.3.7",
|
|
@@ -104,5 +104,5 @@
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "8f5a104e9d1e6edc2ed58bf0ca16a2aec8980be8"
|
|
108
108
|
}
|
|
@@ -59,7 +59,7 @@ function getAppMetadata(appId) {
|
|
|
59
59
|
throw err;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
// needed for some scenarios where the caching happens
|
|
62
|
+
// needed for cypress/some scenarios where the caching happens
|
|
63
63
|
// so quickly the requests can get slightly out of sync
|
|
64
64
|
// might store its invalid just before it stores its valid
|
|
65
65
|
if (isInvalid(metadata)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appMetadata.js","sourceRoot":"","sources":["../../../src/cache/appMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA4C;AAC5C,8BAA8C;AAG9C,IAAY,QAEX;AAFD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;AACrB,CAAC,EAFW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAEnB;AAMD,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;GAEG;AACH,SAAe,cAAc,CAAC,KAAa;;QACzC,OAAO,IAAA,aAAQ,EACb,KAAK,EACL,CAAC,EAAY,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,GAAG,CAAC,iBAAY,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAA;IACH,CAAC;CAAA;AAED,SAAS,SAAS,CAAC,QAA4B;IAC7C,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAsB,cAAc,CAAC,KAAa;;QAChD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,YAAY;QACZ,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,MAAM,GAAuB,cAAc,CAAA;YAC/C,IAAI;gBACF,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;aACvC;YAAC,OAAO,GAAQ,EAAE;gBACjB,qDAAqD;gBACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC7B,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;oBACtC,8DAA8D;oBAC9D,0EAA0E;oBAC1E,MAAM,GAAG,SAAS,CAAA;iBACnB;qBAAM;oBACL,MAAM,GAAG,CAAA;iBACV;aACF;YACD,
|
|
1
|
+
{"version":3,"file":"appMetadata.js","sourceRoot":"","sources":["../../../src/cache/appMetadata.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA4C;AAC5C,8BAA8C;AAG9C,IAAY,QAEX;AAFD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;AACrB,CAAC,EAFW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAEnB;AAMD,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;GAEG;AACH,SAAe,cAAc,CAAC,KAAa;;QACzC,OAAO,IAAA,aAAQ,EACb,KAAK,EACL,CAAC,EAAY,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,GAAG,CAAC,iBAAY,CAAC,YAAY,CAAC,CAAA;QAC1C,CAAC,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAA;IACH,CAAC;CAAA;AAED,SAAS,SAAS,CAAC,QAA4B;IAC7C,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,OAAO,CAAA;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAsB,cAAc,CAAC,KAAa;;QAChD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,YAAY;QACZ,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,MAAM,GAAuB,cAAc,CAAA;YAC/C,IAAI;gBACF,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAA;aACvC;YAAC,OAAO,GAAQ,EAAE;gBACjB,qDAAqD;gBACrD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;oBAC7B,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAA;oBACtC,8DAA8D;oBAC9D,0EAA0E;oBAC1E,MAAM,GAAG,SAAS,CAAA;iBACnB;qBAAM;oBACL,MAAM,GAAG,CAAA;iBACV;aACF;YACD,8DAA8D;YAC9D,uDAAuD;YACvD,0DAA0D;YAC1D,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACpC,IAAI,IAAI,EAAE;oBACR,QAAQ,GAAG,IAAI,CAAA;iBAChB;aACF;YACD,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;SAC5C;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;CAAA;AAhCD,wCAgCC;AAED;;;;;GAKG;AACH,SAAsB,qBAAqB,CAAC,KAAa,EAAE,WAAiB;;QAC1E,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,0CAA0C,CAAA;SACjD;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAY,GAAE,CAAA;QACnC,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,WAAW,EAAE;YACf,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;SACvD;IACH,CAAC;CAAA;AATD,sDASC"}
|
|
@@ -20,8 +20,6 @@ export declare enum Header {
|
|
|
20
20
|
TENANT_ID = "x-budibase-tenant-id",
|
|
21
21
|
VERIFICATION_CODE = "x-budibase-verification-code",
|
|
22
22
|
RETURN_VERIFICATION_CODE = "x-budibase-return-verification-code",
|
|
23
|
-
RESET_PASSWORD_CODE = "x-budibase-reset-password-code",
|
|
24
|
-
RETURN_RESET_PASSWORD_CODE = "x-budibase-return-reset-password-code",
|
|
25
23
|
TOKEN = "x-budibase-token",
|
|
26
24
|
CSRF_TOKEN = "x-csrf-token",
|
|
27
25
|
CORRELATION_ID = "x-budibase-correlation-id",
|
|
@@ -26,8 +26,6 @@ var Header;
|
|
|
26
26
|
Header["TENANT_ID"] = "x-budibase-tenant-id";
|
|
27
27
|
Header["VERIFICATION_CODE"] = "x-budibase-verification-code";
|
|
28
28
|
Header["RETURN_VERIFICATION_CODE"] = "x-budibase-return-verification-code";
|
|
29
|
-
Header["RESET_PASSWORD_CODE"] = "x-budibase-reset-password-code";
|
|
30
|
-
Header["RETURN_RESET_PASSWORD_CODE"] = "x-budibase-return-reset-password-code";
|
|
31
29
|
Header["TOKEN"] = "x-budibase-token";
|
|
32
30
|
Header["CSRF_TOKEN"] = "x-csrf-token";
|
|
33
31
|
Header["CORRELATION_ID"] = "x-budibase-correlation-id";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/constants/misc.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,gCAAsB,CAAA;IACtB,gCAAsB,CAAA;IACtB,2DAAiD,CAAA;IACjD,oDAA0C,CAAA;IAC1C,8CAAoC,CAAA;AACtC,CAAC,EANW,MAAM,GAAN,cAAM,KAAN,cAAM,QAMjB;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../../src/constants/misc.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;AACvB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,IAAY,MAMX;AAND,WAAY,MAAM;IAChB,gCAAsB,CAAA;IACtB,gCAAsB,CAAA;IACtB,2DAAiD,CAAA;IACjD,oDAA0C,CAAA;IAC1C,8CAAoC,CAAA;AACtC,CAAC,EANW,MAAM,GAAN,cAAM,KAAN,cAAM,QAMjB;AAED,IAAY,MAeX;AAfD,WAAY,MAAM;IAChB,wCAA8B,CAAA;IAC9B,gDAAsC,CAAA;IACtC,4CAAkC,CAAA;IAClC,sCAA4B,CAAA;IAC5B,8CAAoC,CAAA;IACpC,kCAAwB,CAAA;IACxB,0CAAgC,CAAA;IAChC,4CAAkC,CAAA;IAClC,4DAAkD,CAAA;IAClD,0EAAgE,CAAA;IAChE,oCAA0B,CAAA;IAC1B,qCAA2B,CAAA;IAC3B,sDAA4C,CAAA;IAC5C,yCAA+B,CAAA;AACjC,CAAC,EAfW,MAAM,GAAN,cAAM,KAAN,cAAM,QAejB;AAED,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,qDAAuC,CAAA;AACzC,CAAC,EALW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAKrB;AAED,IAAY,MAQX;AARD,WAAY,MAAM;IAChB,+BAAqB,CAAA;IACrB,6BAAmB,CAAA;IACnB,uBAAa,CAAA;IACb,2BAAiB,CAAA;IACjB,uBAAa,CAAA;IACb,mCAAyB,CAAA;IACzB,uBAAa,CAAA;AACf,CAAC,EARW,MAAM,GAAN,cAAM,KAAN,cAAM,QAQjB;AAEY,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;AACzC,QAAA,cAAc,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAA;AACxC,QAAA,iBAAiB,GAAG,SAAS,CAAA"}
|
package/dist/src/environment.js
CHANGED
|
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const fs_1 = require("fs");
|
|
4
4
|
const types_1 = require("@budibase/types");
|
|
5
5
|
function isTest() {
|
|
6
|
-
return isJest();
|
|
6
|
+
return isCypress() || isJest();
|
|
7
7
|
}
|
|
8
8
|
function isJest() {
|
|
9
|
-
return (process.env.NODE_ENV === "jest" ||
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
return !!(process.env.NODE_ENV === "jest" || process.env.JEST_WORKER_ID);
|
|
10
|
+
}
|
|
11
|
+
function isCypress() {
|
|
12
|
+
return process.env.NODE_ENV === "cypress";
|
|
12
13
|
}
|
|
13
14
|
function isDev() {
|
|
14
15
|
return process.env.NODE_ENV !== "production";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":";;AAAA,2BAA6C;AAC7C,2CAA6C;AAE7C,SAAS,MAAM;IACb,OAAO,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
export declare function set(callback: () => any, period: number): NodeJS.
|
|
2
|
+
export declare function set(callback: () => any, period: number): NodeJS.Timeout;
|
|
3
3
|
export declare function clear(interval: NodeJS.Timeout): void;
|
|
4
4
|
export declare function cleanup(): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/backend-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.1",
|
|
4
4
|
"description": "Budibase backend core libraries used in server and worker",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@budibase/nano": "10.1.2",
|
|
25
25
|
"@budibase/pouchdb-replication-stream": "1.2.10",
|
|
26
|
-
"@budibase/shared-core": "2.
|
|
27
|
-
"@budibase/types": "2.
|
|
26
|
+
"@budibase/shared-core": "2.10.1",
|
|
27
|
+
"@budibase/types": "2.10.1",
|
|
28
28
|
"@techpass/passport-openidconnect": "0.3.2",
|
|
29
29
|
"aws-cloudfront-sign": "2.2.0",
|
|
30
30
|
"aws-sdk": "2.1030.0",
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"@types/jest": "29.5.3",
|
|
69
69
|
"@types/koa": "2.13.4",
|
|
70
70
|
"@types/lodash": "4.14.180",
|
|
71
|
-
"@types/node": "18.
|
|
72
|
-
"@types/node-fetch": "2.6.
|
|
71
|
+
"@types/node": "14.18.20",
|
|
72
|
+
"@types/node-fetch": "2.6.1",
|
|
73
73
|
"@types/pouchdb": "6.4.0",
|
|
74
74
|
"@types/redlock": "4.0.3",
|
|
75
75
|
"@types/semver": "7.3.7",
|
|
@@ -104,5 +104,5 @@
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "8f5a104e9d1e6edc2ed58bf0ca16a2aec8980be8"
|
|
108
108
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import API from "./api"
|
|
2
|
+
import env from "../environment"
|
|
3
|
+
import { Header } from "../constants"
|
|
4
|
+
import { CloudAccount, HealthStatusResponse } from "@budibase/types"
|
|
5
|
+
|
|
6
|
+
const api = new API(env.ACCOUNT_PORTAL_URL)
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* This client is intended to be used in a cloud hosted deploy only.
|
|
10
|
+
* Rather than relying on each consumer to perform the necessary environmental checks
|
|
11
|
+
* we use the following check to exit early with a undefined response which should be
|
|
12
|
+
* handled by the caller.
|
|
13
|
+
*/
|
|
14
|
+
const EXIT_EARLY = env.SELF_HOSTED || env.DISABLE_ACCOUNT_PORTAL
|
|
15
|
+
|
|
16
|
+
export const getAccount = async (
|
|
17
|
+
email: string
|
|
18
|
+
): Promise<CloudAccount | undefined> => {
|
|
19
|
+
if (EXIT_EARLY) {
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
const payload = {
|
|
23
|
+
email,
|
|
24
|
+
}
|
|
25
|
+
const response = await api.post(`/api/accounts/search`, {
|
|
26
|
+
body: payload,
|
|
27
|
+
headers: {
|
|
28
|
+
[Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
if (response.status !== 200) {
|
|
33
|
+
throw new Error(`Error getting account by email ${email}`)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const json: CloudAccount[] = await response.json()
|
|
37
|
+
return json[0]
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const getAccountByTenantId = async (
|
|
41
|
+
tenantId: string
|
|
42
|
+
): Promise<CloudAccount | undefined> => {
|
|
43
|
+
if (EXIT_EARLY) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
const payload = {
|
|
47
|
+
tenantId,
|
|
48
|
+
}
|
|
49
|
+
const response = await api.post(`/api/accounts/search`, {
|
|
50
|
+
body: payload,
|
|
51
|
+
headers: {
|
|
52
|
+
[Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
if (response.status !== 200) {
|
|
57
|
+
throw new Error(`Error getting account by tenantId ${tenantId}`)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const json: CloudAccount[] = await response.json()
|
|
61
|
+
return json[0]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const getStatus = async (): Promise<
|
|
65
|
+
HealthStatusResponse | undefined
|
|
66
|
+
> => {
|
|
67
|
+
if (EXIT_EARLY) {
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
const response = await api.get(`/api/status`, {
|
|
71
|
+
headers: {
|
|
72
|
+
[Header.API_KEY]: env.ACCOUNT_PORTAL_API_KEY,
|
|
73
|
+
},
|
|
74
|
+
})
|
|
75
|
+
const json = await response.json()
|
|
76
|
+
|
|
77
|
+
if (response.status !== 200) {
|
|
78
|
+
throw new Error(`Error getting status`)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return json
|
|
82
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import fetch from "node-fetch"
|
|
2
|
+
import * as logging from "../logging"
|
|
3
|
+
|
|
4
|
+
export default class API {
|
|
5
|
+
host: string
|
|
6
|
+
|
|
7
|
+
constructor(host: string) {
|
|
8
|
+
this.host = host
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
async apiCall(method: string, url: string, options?: any) {
|
|
12
|
+
if (!options.headers) {
|
|
13
|
+
options.headers = {}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (!options.headers["Content-Type"]) {
|
|
17
|
+
options.headers = {
|
|
18
|
+
"Content-Type": "application/json",
|
|
19
|
+
Accept: "application/json",
|
|
20
|
+
...options.headers,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let json = options.headers["Content-Type"] === "application/json"
|
|
25
|
+
|
|
26
|
+
// add x-budibase-correlation-id header
|
|
27
|
+
logging.correlation.setHeader(options.headers)
|
|
28
|
+
|
|
29
|
+
const requestOptions = {
|
|
30
|
+
method: method,
|
|
31
|
+
body: json ? JSON.stringify(options.body) : options.body,
|
|
32
|
+
headers: options.headers,
|
|
33
|
+
// TODO: See if this is necessary
|
|
34
|
+
credentials: "include",
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return await fetch(`${this.host}${url}`, requestOptions)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async post(url: string, options?: any) {
|
|
41
|
+
return this.apiCall("POST", url, options)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async get(url: string, options?: any) {
|
|
45
|
+
return this.apiCall("GET", url, options)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async patch(url: string, options?: any) {
|
|
49
|
+
return this.apiCall("PATCH", url, options)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async del(url: string, options?: any) {
|
|
53
|
+
return this.apiCall("DELETE", url, options)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async put(url: string, options?: any) {
|
|
57
|
+
return this.apiCall("PUT", url, options)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./accounts"
|
package/src/auth/auth.ts
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
const _passport = require("koa-passport")
|
|
2
|
+
const LocalStrategy = require("passport-local").Strategy
|
|
3
|
+
import { getGlobalDB } from "../context"
|
|
4
|
+
import { Cookie } from "../constants"
|
|
5
|
+
import { getSessionsForUser, invalidateSessions } from "../security/sessions"
|
|
6
|
+
import {
|
|
7
|
+
authenticated,
|
|
8
|
+
csrf,
|
|
9
|
+
google,
|
|
10
|
+
local,
|
|
11
|
+
oidc,
|
|
12
|
+
tenancy,
|
|
13
|
+
} from "../middleware"
|
|
14
|
+
import * as userCache from "../cache/user"
|
|
15
|
+
import { invalidateUser } from "../cache/user"
|
|
16
|
+
import {
|
|
17
|
+
ConfigType,
|
|
18
|
+
GoogleInnerConfig,
|
|
19
|
+
OIDCInnerConfig,
|
|
20
|
+
PlatformLogoutOpts,
|
|
21
|
+
SSOProviderType,
|
|
22
|
+
} from "@budibase/types"
|
|
23
|
+
import * as events from "../events"
|
|
24
|
+
import * as configs from "../configs"
|
|
25
|
+
import { clearCookie, getCookie } from "../utils"
|
|
26
|
+
import { ssoSaveUserNoOp } from "../middleware/passport/sso/sso"
|
|
27
|
+
|
|
28
|
+
const refresh = require("passport-oauth2-refresh")
|
|
29
|
+
export {
|
|
30
|
+
auditLog,
|
|
31
|
+
authError,
|
|
32
|
+
internalApi,
|
|
33
|
+
ssoCallbackUrl,
|
|
34
|
+
adminOnly,
|
|
35
|
+
builderOnly,
|
|
36
|
+
builderOrAdmin,
|
|
37
|
+
joiValidator,
|
|
38
|
+
google,
|
|
39
|
+
oidc,
|
|
40
|
+
} from "../middleware"
|
|
41
|
+
export const buildAuthMiddleware = authenticated
|
|
42
|
+
export const buildTenancyMiddleware = tenancy
|
|
43
|
+
export const buildCsrfMiddleware = csrf
|
|
44
|
+
export const passport = _passport
|
|
45
|
+
export const jwt = require("jsonwebtoken")
|
|
46
|
+
|
|
47
|
+
// Strategies
|
|
48
|
+
_passport.use(new LocalStrategy(local.options, local.authenticate))
|
|
49
|
+
|
|
50
|
+
async function refreshOIDCAccessToken(
|
|
51
|
+
chosenConfig: OIDCInnerConfig,
|
|
52
|
+
refreshToken: string
|
|
53
|
+
): Promise<RefreshResponse> {
|
|
54
|
+
const callbackUrl = await oidc.getCallbackUrl()
|
|
55
|
+
let enrichedConfig: any
|
|
56
|
+
let strategy: any
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
enrichedConfig = await oidc.fetchStrategyConfig(chosenConfig, callbackUrl)
|
|
60
|
+
if (!enrichedConfig) {
|
|
61
|
+
throw new Error("OIDC Config contents invalid")
|
|
62
|
+
}
|
|
63
|
+
strategy = await oidc.strategyFactory(enrichedConfig, ssoSaveUserNoOp)
|
|
64
|
+
} catch (err) {
|
|
65
|
+
console.error(err)
|
|
66
|
+
throw new Error("Could not refresh OAuth Token")
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
refresh.use(strategy, {
|
|
70
|
+
setRefreshOAuth2() {
|
|
71
|
+
return strategy._getOAuth2Client(enrichedConfig)
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
return new Promise(resolve => {
|
|
76
|
+
refresh.requestNewAccessToken(
|
|
77
|
+
ConfigType.OIDC,
|
|
78
|
+
refreshToken,
|
|
79
|
+
(err: any, accessToken: string, refreshToken: any, params: any) => {
|
|
80
|
+
resolve({ err, accessToken, refreshToken, params })
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function refreshGoogleAccessToken(
|
|
87
|
+
config: GoogleInnerConfig,
|
|
88
|
+
refreshToken: any
|
|
89
|
+
): Promise<RefreshResponse> {
|
|
90
|
+
let callbackUrl = await google.getCallbackUrl(config)
|
|
91
|
+
|
|
92
|
+
let strategy
|
|
93
|
+
try {
|
|
94
|
+
strategy = await google.strategyFactory(
|
|
95
|
+
config,
|
|
96
|
+
callbackUrl,
|
|
97
|
+
ssoSaveUserNoOp
|
|
98
|
+
)
|
|
99
|
+
} catch (err: any) {
|
|
100
|
+
console.error(err)
|
|
101
|
+
throw new Error(
|
|
102
|
+
`Error constructing OIDC refresh strategy: message=${err.message}`
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
refresh.use(strategy)
|
|
107
|
+
|
|
108
|
+
return new Promise(resolve => {
|
|
109
|
+
refresh.requestNewAccessToken(
|
|
110
|
+
ConfigType.GOOGLE,
|
|
111
|
+
refreshToken,
|
|
112
|
+
(err: any, accessToken: string, refreshToken: string, params: any) => {
|
|
113
|
+
resolve({ err, accessToken, refreshToken, params })
|
|
114
|
+
}
|
|
115
|
+
)
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
interface RefreshResponse {
|
|
120
|
+
err?: {
|
|
121
|
+
data?: string
|
|
122
|
+
}
|
|
123
|
+
accessToken?: string
|
|
124
|
+
refreshToken?: string
|
|
125
|
+
params?: any
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export async function refreshOAuthToken(
|
|
129
|
+
refreshToken: string,
|
|
130
|
+
providerType: SSOProviderType,
|
|
131
|
+
configId?: string
|
|
132
|
+
): Promise<RefreshResponse> {
|
|
133
|
+
switch (providerType) {
|
|
134
|
+
case SSOProviderType.OIDC:
|
|
135
|
+
if (!configId) {
|
|
136
|
+
return { err: { data: "OIDC config id not provided" } }
|
|
137
|
+
}
|
|
138
|
+
const oidcConfig = await configs.getOIDCConfigById(configId)
|
|
139
|
+
if (!oidcConfig) {
|
|
140
|
+
return { err: { data: "OIDC configuration not found" } }
|
|
141
|
+
}
|
|
142
|
+
return refreshOIDCAccessToken(oidcConfig, refreshToken)
|
|
143
|
+
case SSOProviderType.GOOGLE:
|
|
144
|
+
let googleConfig = await configs.getGoogleConfig()
|
|
145
|
+
if (!googleConfig) {
|
|
146
|
+
return { err: { data: "Google configuration not found" } }
|
|
147
|
+
}
|
|
148
|
+
return refreshGoogleAccessToken(googleConfig, refreshToken)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// TODO: Refactor to use user save function instead to prevent the need for
|
|
153
|
+
// manually saving and invalidating on callback
|
|
154
|
+
export async function updateUserOAuth(userId: string, oAuthConfig: any) {
|
|
155
|
+
const details = {
|
|
156
|
+
accessToken: oAuthConfig.accessToken,
|
|
157
|
+
refreshToken: oAuthConfig.refreshToken,
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
const db = getGlobalDB()
|
|
162
|
+
const dbUser = await db.get<any>(userId)
|
|
163
|
+
|
|
164
|
+
//Do not overwrite the refresh token if a valid one is not provided.
|
|
165
|
+
if (typeof details.refreshToken !== "string") {
|
|
166
|
+
delete details.refreshToken
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
dbUser.oauth2 = {
|
|
170
|
+
...dbUser.oauth2,
|
|
171
|
+
...details,
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
await db.put(dbUser)
|
|
175
|
+
|
|
176
|
+
await invalidateUser(userId)
|
|
177
|
+
} catch (e) {
|
|
178
|
+
console.error("Could not update OAuth details for current user", e)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Logs a user out from budibase. Re-used across account portal and builder.
|
|
184
|
+
*/
|
|
185
|
+
export async function platformLogout(opts: PlatformLogoutOpts) {
|
|
186
|
+
const ctx = opts.ctx
|
|
187
|
+
const userId = opts.userId
|
|
188
|
+
const keepActiveSession = opts.keepActiveSession
|
|
189
|
+
|
|
190
|
+
if (!ctx) throw new Error("Koa context must be supplied to logout.")
|
|
191
|
+
|
|
192
|
+
const currentSession = getCookie(ctx, Cookie.Auth)
|
|
193
|
+
let sessions = await getSessionsForUser(userId)
|
|
194
|
+
|
|
195
|
+
if (keepActiveSession) {
|
|
196
|
+
sessions = sessions.filter(
|
|
197
|
+
session => session.sessionId !== currentSession.sessionId
|
|
198
|
+
)
|
|
199
|
+
} else {
|
|
200
|
+
// clear cookies
|
|
201
|
+
clearCookie(ctx, Cookie.Auth)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const sessionIds = sessions.map(({ sessionId }) => sessionId)
|
|
205
|
+
await invalidateSessions(userId, { sessionIds, reason: "logout" })
|
|
206
|
+
await events.auth.logout(ctx.user?.email)
|
|
207
|
+
await userCache.invalidateUser(userId)
|
|
208
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./auth"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { structures } from "../../../tests"
|
|
2
|
+
import { testEnv } from "../../../tests/extra"
|
|
3
|
+
import * as auth from "../auth"
|
|
4
|
+
import * as events from "../../events"
|
|
5
|
+
|
|
6
|
+
describe("platformLogout", () => {
|
|
7
|
+
it("should call platform logout", async () => {
|
|
8
|
+
await testEnv.withTenant(async () => {
|
|
9
|
+
const ctx = structures.koa.newContext()
|
|
10
|
+
await auth.platformLogout({ ctx, userId: "test" })
|
|
11
|
+
expect(events.auth.logout).toBeCalledTimes(1)
|
|
12
|
+
})
|
|
13
|
+
})
|
|
14
|
+
})
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import dns from "dns"
|
|
2
|
+
import net from "net"
|
|
3
|
+
import env from "../environment"
|
|
4
|
+
import { promisify } from "util"
|
|
5
|
+
|
|
6
|
+
let blackListArray: string[] | undefined
|
|
7
|
+
const performLookup = promisify(dns.lookup)
|
|
8
|
+
|
|
9
|
+
async function lookup(address: string): Promise<string[]> {
|
|
10
|
+
if (!net.isIP(address)) {
|
|
11
|
+
// need this for URL parsing simply
|
|
12
|
+
if (!address.startsWith("http")) {
|
|
13
|
+
address = `https://${address}`
|
|
14
|
+
}
|
|
15
|
+
address = new URL(address).hostname
|
|
16
|
+
}
|
|
17
|
+
const addresses = await performLookup(address, {
|
|
18
|
+
all: true,
|
|
19
|
+
})
|
|
20
|
+
return addresses.map(addr => addr.address)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function refreshBlacklist() {
|
|
24
|
+
const blacklist = env.BLACKLIST_IPS
|
|
25
|
+
const list = blacklist?.split(",") || []
|
|
26
|
+
let final: string[] = []
|
|
27
|
+
for (let addr of list) {
|
|
28
|
+
const trimmed = addr.trim()
|
|
29
|
+
if (!net.isIP(trimmed)) {
|
|
30
|
+
const addresses = await lookup(trimmed)
|
|
31
|
+
final = final.concat(addresses)
|
|
32
|
+
} else {
|
|
33
|
+
final.push(trimmed)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
blackListArray = final
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function isBlacklisted(address: string): Promise<boolean> {
|
|
40
|
+
if (!blackListArray) {
|
|
41
|
+
await refreshBlacklist()
|
|
42
|
+
}
|
|
43
|
+
if (blackListArray?.length === 0) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
// no need for DNS
|
|
47
|
+
let ips: string[]
|
|
48
|
+
if (!net.isIP(address)) {
|
|
49
|
+
ips = await lookup(address)
|
|
50
|
+
} else {
|
|
51
|
+
ips = [address]
|
|
52
|
+
}
|
|
53
|
+
return !!blackListArray?.find(addr => ips.includes(addr))
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./blacklist"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { refreshBlacklist, isBlacklisted } from ".."
|
|
2
|
+
import env from "../../environment"
|
|
3
|
+
|
|
4
|
+
describe("blacklist", () => {
|
|
5
|
+
beforeAll(async () => {
|
|
6
|
+
env._set(
|
|
7
|
+
"BLACKLIST_IPS",
|
|
8
|
+
"www.google.com,192.168.1.1, 1.1.1.1,2.2.2.2/something"
|
|
9
|
+
)
|
|
10
|
+
await refreshBlacklist()
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it("should blacklist 192.168.1.1", async () => {
|
|
14
|
+
expect(await isBlacklisted("192.168.1.1")).toBe(true)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it("should allow 192.168.1.2", async () => {
|
|
18
|
+
expect(await isBlacklisted("192.168.1.2")).toBe(false)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it("should blacklist www.google.com", async () => {
|
|
22
|
+
expect(await isBlacklisted("www.google.com")).toBe(true)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it("should handle a complex domain", async () => {
|
|
26
|
+
expect(
|
|
27
|
+
await isBlacklisted("https://www.google.com/derp/?something=1")
|
|
28
|
+
).toBe(true)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it("should allow www.microsoft.com", async () => {
|
|
32
|
+
expect(await isBlacklisted("www.microsoft.com")).toBe(false)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it("should blacklist an IP that needed trimming", async () => {
|
|
36
|
+
expect(await isBlacklisted("1.1.1.1")).toBe(true)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it("should blacklist 1.1.1.1/something", async () => {
|
|
40
|
+
expect(await isBlacklisted("1.1.1.1/something")).toBe(true)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it("should blacklist 2.2.2.2", async () => {
|
|
44
|
+
expect(await isBlacklisted("2.2.2.2")).toBe(true)
|
|
45
|
+
})
|
|
46
|
+
})
|