diff --git a/lerna.json b/lerna.json index 7b46f17ce5..0603adfc2f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "npmClient": "yarn", "packages": [ "packages/*" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 983e82c5b0..34b6f1609e 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/backend-core", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase backend core libraries used in server and worker", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -20,7 +20,7 @@ "test:watch": "jest --watchAll" }, "dependencies": { - "@budibase/types": "1.4.8-alpha.5", + "@budibase/types": "1.4.8-alpha.6", "@shopify/jest-koa-mocks": "5.0.1", "@techpass/passport-openidconnect": "0.3.2", "aws-sdk": "2.1030.0", diff --git a/packages/bbui/package.json b/packages/bbui/package.json index b37635964c..23dd18988b 100644 --- a/packages/bbui/package.json +++ b/packages/bbui/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/bbui", "description": "A UI solution used in the different Budibase projects.", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "license": "MPL-2.0", "svelte": "src/index.js", "module": "dist/bbui.es.js", @@ -38,7 +38,7 @@ ], "dependencies": { "@adobe/spectrum-css-workflow-icons": "^1.2.1", - "@budibase/string-templates": "1.4.8-alpha.5", + "@budibase/string-templates": "1.4.8-alpha.6", "@spectrum-css/actionbutton": "^1.0.1", "@spectrum-css/actiongroup": "^1.0.1", "@spectrum-css/avatar": "^3.0.2", diff --git a/packages/builder/package.json b/packages/builder/package.json index 77a4f430d9..e6f60b1241 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/builder", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "license": "GPL-3.0", "private": true, "scripts": { @@ -71,10 +71,10 @@ } }, "dependencies": { - "@budibase/bbui": "1.4.8-alpha.5", - "@budibase/client": "1.4.8-alpha.5", - "@budibase/frontend-core": "1.4.8-alpha.5", - "@budibase/string-templates": "1.4.8-alpha.5", + "@budibase/bbui": "1.4.8-alpha.6", + "@budibase/client": "1.4.8-alpha.6", + "@budibase/frontend-core": "1.4.8-alpha.6", + "@budibase/string-templates": "1.4.8-alpha.6", "@sentry/browser": "5.19.1", "@spectrum-css/page": "^3.0.1", "@spectrum-css/vars": "^3.0.1", diff --git a/packages/builder/src/components/portal/licensing/DeleteLicenseKeyModal.svelte b/packages/builder/src/components/portal/licensing/DeleteLicenseKeyModal.svelte new file mode 100644 index 0000000000..e482d1c776 --- /dev/null +++ b/packages/builder/src/components/portal/licensing/DeleteLicenseKeyModal.svelte @@ -0,0 +1,31 @@ + + + + + Are you sure you want to delete this license key? + This license key cannot be re-activated. + + + + diff --git a/packages/builder/src/pages/builder/portal/manage/groups/index.svelte b/packages/builder/src/pages/builder/portal/manage/groups/index.svelte index f3b5cbee00..c9fdeb6cff 100644 --- a/packages/builder/src/pages/builder/portal/manage/groups/index.svelte +++ b/packages/builder/src/pages/builder/portal/manage/groups/index.svelte @@ -9,7 +9,7 @@ Tags, notifications, } from "@budibase/bbui" - import { groups, auth, licensing } from "stores/portal" + import { groups, auth, licensing, admin } from "stores/portal" import { onMount } from "svelte" import CreateEditGroupModal from "./_components/CreateEditGroupModal.svelte" import UserGroupsRow from "./_components/UserGroupsRow.svelte" @@ -53,6 +53,8 @@ onMount(async () => { try { + // always load latest + await licensing.init() if ($licensing.groupsEnabled) { await groups.actions.init() } @@ -77,7 +79,7 @@ {/if} Easily assign and manage your users access with User Groups - {#if !$auth.accountPortalAccess} + {#if !$auth.accountPortalAccess && $admin.cloud} Contact your account holder to upgrade {/if} @@ -90,7 +92,7 @@ {:else} +
+
+ +
+
+ {#if licenseInfo?.licenseKey} + + {/if} +
@@ -152,4 +181,10 @@ grid-gap: var(--spacing-l); align-items: center; } + .action-button { + margin-right: 10px; + } + .button-container { + display: flex; + } diff --git a/packages/cli/package.json b/packages/cli/package.json index 05b3a2d410..f15ecde936 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/cli", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase CLI, for developers, self hosting and migrations.", "main": "src/index.js", "bin": { @@ -26,9 +26,9 @@ "outputPath": "build" }, "dependencies": { - "@budibase/backend-core": "1.4.8-alpha.5", - "@budibase/string-templates": "1.4.8-alpha.5", - "@budibase/types": "1.4.8-alpha.5", + "@budibase/backend-core": "1.4.8-alpha.6", + "@budibase/string-templates": "1.4.8-alpha.6", + "@budibase/types": "1.4.8-alpha.6", "axios": "0.21.2", "chalk": "4.1.0", "cli-progress": "3.11.2", diff --git a/packages/client/package.json b/packages/client/package.json index e5c3871dc3..a4d9865716 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/client", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "license": "MPL-2.0", "module": "dist/budibase-client.js", "main": "dist/budibase-client.js", @@ -19,9 +19,9 @@ "dev:builder": "rollup -cw" }, "dependencies": { - "@budibase/bbui": "1.4.8-alpha.5", - "@budibase/frontend-core": "1.4.8-alpha.5", - "@budibase/string-templates": "1.4.8-alpha.5", + "@budibase/bbui": "1.4.8-alpha.6", + "@budibase/frontend-core": "1.4.8-alpha.6", + "@budibase/string-templates": "1.4.8-alpha.6", "@spectrum-css/button": "^3.0.3", "@spectrum-css/card": "^3.0.3", "@spectrum-css/divider": "^1.0.3", diff --git a/packages/frontend-core/package.json b/packages/frontend-core/package.json index 7cb9c91b79..8bbf353557 100644 --- a/packages/frontend-core/package.json +++ b/packages/frontend-core/package.json @@ -1,12 +1,12 @@ { "name": "@budibase/frontend-core", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase frontend core libraries used in builder and client", "author": "Budibase", "license": "MPL-2.0", "svelte": "src/index.js", "dependencies": { - "@budibase/bbui": "1.4.8-alpha.5", + "@budibase/bbui": "1.4.8-alpha.6", "lodash": "^4.17.21", "svelte": "^3.46.2" } diff --git a/packages/frontend-core/src/api/licensing.js b/packages/frontend-core/src/api/licensing.js index 16d65a20d7..c27d79d740 100644 --- a/packages/frontend-core/src/api/licensing.js +++ b/packages/frontend-core/src/api/licensing.js @@ -9,6 +9,15 @@ export const buildLicensingEndpoints = API => ({ }) }, + /** + * Delete a self hosted license key + */ + deleteLicenseKey: async () => { + return API.delete({ + url: `/api/global/license/info`, + }) + }, + /** * Get the license info - metadata about the license including the * obfuscated license key. diff --git a/packages/server/package.json b/packages/server/package.json index f149833ff1..cb8dd051c7 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/server", "email": "hi@budibase.com", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase Web Server", "main": "src/index.ts", "repository": { @@ -77,11 +77,11 @@ "license": "GPL-3.0", "dependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@budibase/backend-core": "1.4.8-alpha.5", - "@budibase/client": "1.4.8-alpha.5", - "@budibase/pro": "1.4.8-alpha.5", - "@budibase/string-templates": "1.4.8-alpha.5", - "@budibase/types": "1.4.8-alpha.5", + "@budibase/backend-core": "1.4.8-alpha.6", + "@budibase/client": "1.4.8-alpha.6", + "@budibase/pro": "1.4.8-alpha.6", + "@budibase/string-templates": "1.4.8-alpha.6", + "@budibase/types": "1.4.8-alpha.6", "@bull-board/api": "3.7.0", "@bull-board/koa": "3.9.4", "@elastic/elasticsearch": "7.10.0", diff --git a/packages/server/scripts/dev/manage.js b/packages/server/scripts/dev/manage.js index ac04780ada..e06c6308f8 100644 --- a/packages/server/scripts/dev/manage.js +++ b/packages/server/scripts/dev/manage.js @@ -59,6 +59,7 @@ async function init() { BB_ADMIN_USER_EMAIL: "", BB_ADMIN_USER_PASSWORD: "", PLUGINS_DIR: "", + TENANT_FEATURE_FLAGS: "*:LICENSING,*:USER_GROUPS", } let envFile = "" Object.keys(envFileJson).forEach(key => { diff --git a/packages/server/yarn.lock b/packages/server/yarn.lock index 9f6ceb7e0e..c2c7c2b298 100644 --- a/packages/server/yarn.lock +++ b/packages/server/yarn.lock @@ -1094,12 +1094,12 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.4.8-alpha.5.tgz#4ad0c37d2440214aaeb06ddd6c779a60046ecbf2" - integrity sha512-GwdWTluKYRzBt73JAeSJVRbbL2BM3qSPYYsVRvJl5nwvns2COvlK0LyuioR+HmTRsEIinPvMvsOuSJ795+gdtA== +"@budibase/backend-core@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.4.8-alpha.6.tgz#d0f1971abe8bf46ee194381e7ff3b197872305e4" + integrity sha512-ufDFSyG3DPIh+rfLCVlZDTU+UaJ2viMSIGz0k+/9S262wmpBAc4VIPgY4+6Aagxi7iiyphVxJ4rej0oWc6czmw== dependencies: - "@budibase/types" "1.4.8-alpha.5" + "@budibase/types" "1.4.8-alpha.6" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-sdk "2.1030.0" @@ -1180,13 +1180,13 @@ svelte-flatpickr "^3.2.3" svelte-portal "^1.0.0" -"@budibase/pro@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.4.8-alpha.5.tgz#8d9015a6ce36b21f336fe54a382ea51e169e989f" - integrity sha512-J3iUMIdO7RhrC24MbZafRRsANnnRh7XZvHwKuesZBHGFy9eHPzYtY3ZtIekk//X0xbUmCUp/l4BIVSFgAtGJ9Q== +"@budibase/pro@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.4.8-alpha.6.tgz#8754f9d656f518505c37ad3e5988bbf668a14563" + integrity sha512-b1X+kBI2S8viSpWa/lcU8a9IxYntTeCKyQ/4e8yX+ulEyqWjuG7eRPrd2DiiQSgMCQu2hmRYtJTTyQrgVm0QqA== dependencies: - "@budibase/backend-core" "1.4.8-alpha.5" - "@budibase/types" "1.4.8-alpha.5" + "@budibase/backend-core" "1.4.8-alpha.6" + "@budibase/types" "1.4.8-alpha.6" "@koa/router" "8.0.8" joi "17.6.0" node-fetch "^2.6.1" @@ -1209,10 +1209,10 @@ svelte-apexcharts "^1.0.2" svelte-flatpickr "^3.1.0" -"@budibase/types@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.4.8-alpha.5.tgz#2945af47862284a4becd4978891d64f4fef5c83a" - integrity sha512-6BXAUAaIkW9Q7C0blqNY+W5+yE1zFwqK7M1cUIfjo/+5OotOKgtrR3SN47w4BDFflixxTVdmpgWI/ELi7fZU4A== +"@budibase/types@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.4.8-alpha.6.tgz#f4f1e3be1d70a62b06ab70a22257d927c028cd48" + integrity sha512-DIXAJ3XxL3aEUiAcOfySV7NjhgxWwBEZ/1ls8En3UwT8mdlhVwHCb5tODSqEOF3Ib7Cyjzw1EI43uEyO8F1xdA== "@bull-board/api@3.7.0": version "3.7.0" diff --git a/packages/string-templates/package.json b/packages/string-templates/package.json index 0bad2045e4..7912b3717f 100644 --- a/packages/string-templates/package.json +++ b/packages/string-templates/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/string-templates", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Handlebars wrapper for Budibase templating.", "main": "src/index.cjs", "module": "dist/bundle.mjs", diff --git a/packages/types/package.json b/packages/types/package.json index f0ef094eac..53cb400338 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@budibase/types", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase types", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/worker/package.json b/packages/worker/package.json index d0ba056496..27f47ff656 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -1,7 +1,7 @@ { "name": "@budibase/worker", "email": "hi@budibase.com", - "version": "1.4.8-alpha.5", + "version": "1.4.8-alpha.6", "description": "Budibase background service", "main": "src/index.ts", "repository": { @@ -36,10 +36,10 @@ "author": "Budibase", "license": "GPL-3.0", "dependencies": { - "@budibase/backend-core": "1.4.8-alpha.5", - "@budibase/pro": "1.4.8-alpha.5", - "@budibase/string-templates": "1.4.8-alpha.5", - "@budibase/types": "1.4.8-alpha.5", + "@budibase/backend-core": "1.4.8-alpha.6", + "@budibase/pro": "1.4.8-alpha.6", + "@budibase/string-templates": "1.4.8-alpha.6", + "@budibase/types": "1.4.8-alpha.6", "@koa/router": "8.0.8", "@sentry/node": "6.17.7", "@techpass/passport-openidconnect": "0.3.2", diff --git a/packages/worker/scripts/dev/manage.js b/packages/worker/scripts/dev/manage.js index 96f5c29af4..a4eaf37162 100644 --- a/packages/worker/scripts/dev/manage.js +++ b/packages/worker/scripts/dev/manage.js @@ -28,6 +28,7 @@ async function init() { APPS_URL: "http://localhost:4001", SERVICE: "worker-service", DEPLOYMENT_ENVIRONMENT: "development", + TENANT_FEATURE_FLAGS: "*:LICENSING,*:USER_GROUPS", } let envFile = "" Object.keys(envFileJson).forEach(key => { diff --git a/packages/worker/src/api/controllers/global/license.ts b/packages/worker/src/api/controllers/global/license.ts index 1e5ca9beac..2bd173010f 100644 --- a/packages/worker/src/api/controllers/global/license.ts +++ b/packages/worker/src/api/controllers/global/license.ts @@ -24,6 +24,11 @@ export const getInfo = async (ctx: any) => { ctx.status = 200 } +export const deleteInfo = async (ctx: any) => { + await licensing.deleteLicenseInfo() + ctx.status = 200 +} + export const getQuotaUsage = async (ctx: any) => { ctx.body = await quotas.getQuotaUsage() } diff --git a/packages/worker/src/api/routes/global/license.ts b/packages/worker/src/api/routes/global/license.ts index b9f5aa3218..03908e052b 100644 --- a/packages/worker/src/api/routes/global/license.ts +++ b/packages/worker/src/api/routes/global/license.ts @@ -7,6 +7,7 @@ router .post("/api/global/license/activate", controller.activate) .post("/api/global/license/refresh", controller.refresh) .get("/api/global/license/info", controller.getInfo) + .delete("/api/global/license/info", controller.deleteInfo) .get("/api/global/license/usage", controller.getQuotaUsage) export = router diff --git a/packages/worker/yarn.lock b/packages/worker/yarn.lock index 300f22616e..91ca8deda2 100644 --- a/packages/worker/yarn.lock +++ b/packages/worker/yarn.lock @@ -291,12 +291,12 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@budibase/backend-core@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.4.8-alpha.5.tgz#4ad0c37d2440214aaeb06ddd6c779a60046ecbf2" - integrity sha512-GwdWTluKYRzBt73JAeSJVRbbL2BM3qSPYYsVRvJl5nwvns2COvlK0LyuioR+HmTRsEIinPvMvsOuSJ795+gdtA== +"@budibase/backend-core@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/backend-core/-/backend-core-1.4.8-alpha.6.tgz#d0f1971abe8bf46ee194381e7ff3b197872305e4" + integrity sha512-ufDFSyG3DPIh+rfLCVlZDTU+UaJ2viMSIGz0k+/9S262wmpBAc4VIPgY4+6Aagxi7iiyphVxJ4rej0oWc6czmw== dependencies: - "@budibase/types" "1.4.8-alpha.5" + "@budibase/types" "1.4.8-alpha.6" "@shopify/jest-koa-mocks" "5.0.1" "@techpass/passport-openidconnect" "0.3.2" aws-sdk "2.1030.0" @@ -327,21 +327,21 @@ uuid "8.3.2" zlib "1.0.5" -"@budibase/pro@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.4.8-alpha.5.tgz#8d9015a6ce36b21f336fe54a382ea51e169e989f" - integrity sha512-J3iUMIdO7RhrC24MbZafRRsANnnRh7XZvHwKuesZBHGFy9eHPzYtY3ZtIekk//X0xbUmCUp/l4BIVSFgAtGJ9Q== +"@budibase/pro@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-1.4.8-alpha.6.tgz#8754f9d656f518505c37ad3e5988bbf668a14563" + integrity sha512-b1X+kBI2S8viSpWa/lcU8a9IxYntTeCKyQ/4e8yX+ulEyqWjuG7eRPrd2DiiQSgMCQu2hmRYtJTTyQrgVm0QqA== dependencies: - "@budibase/backend-core" "1.4.8-alpha.5" - "@budibase/types" "1.4.8-alpha.5" + "@budibase/backend-core" "1.4.8-alpha.6" + "@budibase/types" "1.4.8-alpha.6" "@koa/router" "8.0.8" joi "17.6.0" node-fetch "^2.6.1" -"@budibase/types@1.4.8-alpha.5": - version "1.4.8-alpha.5" - resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.4.8-alpha.5.tgz#2945af47862284a4becd4978891d64f4fef5c83a" - integrity sha512-6BXAUAaIkW9Q7C0blqNY+W5+yE1zFwqK7M1cUIfjo/+5OotOKgtrR3SN47w4BDFflixxTVdmpgWI/ELi7fZU4A== +"@budibase/types@1.4.8-alpha.6": + version "1.4.8-alpha.6" + resolved "https://registry.yarnpkg.com/@budibase/types/-/types-1.4.8-alpha.6.tgz#f4f1e3be1d70a62b06ab70a22257d927c028cd48" + integrity sha512-DIXAJ3XxL3aEUiAcOfySV7NjhgxWwBEZ/1ls8En3UwT8mdlhVwHCb5tODSqEOF3Ib7Cyjzw1EI43uEyO8F1xdA== "@cspotcode/source-map-consumer@0.8.0": version "0.8.0"