diff --git a/packages/api/.env b/packages/api/.env index dc654e025..790defd5d 100644 --- a/packages/api/.env +++ b/packages/api/.env @@ -1,5 +1,6 @@ DEVMODE=1 SHELL_SCRIPTING=1 +# LOCAL_DBGATE_IDENTITY=1 # CLOUD_UPGRADE_FILE=c:\test\upg\upgrade.zip diff --git a/packages/api/src/controllers/auth.js b/packages/api/src/controllers/auth.js index 15600f156..0d3b81a00 100644 --- a/packages/api/src/controllers/auth.js +++ b/packages/api/src/controllers/auth.js @@ -13,6 +13,7 @@ const { } = require('../auth/authProvider'); const storage = require('./storage'); const { decryptPasswordString } = require('../utility/crypting'); +const { createDbGateIdentitySession, getIdentitySigninUrl } = require('../utility/cloudIntf'); const logger = getLogger('auth'); @@ -135,5 +136,13 @@ module.exports = { return getAuthProviderById(amoid).redirect(params); }, + createCloudLoginSession_meta: true, + async createCloudLoginSession({ client }) { + const sid = await createDbGateIdentitySession(client); + return { + url: getIdentitySigninUrl(sid), + }; + }, + authMiddleware, }; diff --git a/packages/api/src/utility/authProxy.js b/packages/api/src/utility/authProxy.js index 0d998fec2..744536177 100644 --- a/packages/api/src/utility/authProxy.js +++ b/packages/api/src/utility/authProxy.js @@ -36,6 +36,14 @@ async function callRefactorSqlQueryApi(query, task, structure, dialect) { return null; } +function getExternalParamsWithLicense() { + return { + headers: { + 'Content-Type': 'application/json', + }, + }; +} + module.exports = { isAuthProxySupported, authProxyGetRedirectUrl, @@ -47,4 +55,5 @@ module.exports = { callTextToSqlApi, callCompleteOnCursorApi, callRefactorSqlQueryApi, + getExternalParamsWithLicense, }; diff --git a/packages/api/src/utility/cloudIntf.js b/packages/api/src/utility/cloudIntf.js new file mode 100644 index 000000000..3258167e3 --- /dev/null +++ b/packages/api/src/utility/cloudIntf.js @@ -0,0 +1,34 @@ +const axios = require('axios'); +const { getExternalParamsWithLicense } = require('./authProxy'); + +const DBGATE_IDENTITY_URL = process.env.LOCAL_DBGATE_IDENTITY + ? 'http://localhost:3001' + : process.env.DEVWEB || process.env.DEVMODE + ? 'https://identity.dbgate.udolni.net' + : 'https://identity.dbgate.io'; + +const DBGATE_CLOUD_URL = process.env.LOCAL_DBGATE_CLOUD + ? 'http://localhost:3109' + : process.env.DEVWEB || process.env.DEVMODE + ? 'https://cloud.dbgate.udolni.net' + : 'https://cloud.dbgate.io'; + +async function createDbGateIdentitySession(client) { + const resp = await axios.default.post( + `${DBGATE_IDENTITY_URL}/api/create-session`, + { + client, + }, + getExternalParamsWithLicense() + ); + return resp.data.sid; +} + +function getIdentitySigninUrl(sid) { + return `${DBGATE_IDENTITY_URL}/signin/${sid}`; +} + +module.exports = { + createDbGateIdentitySession, + getIdentitySigninUrl, +}; diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 86bee43eb..1dc0f9e98 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -112,6 +112,9 @@ 'icon square': 'mdi mdi-square', 'icon data-deploy': 'mdi mdi-database-settings', + 'icon cloud-account': 'mdi mdi-account-remove-outline', + 'icon cloud-account-connected': 'mdi mdi-account-check-outline', + 'icon edit': 'mdi mdi-pencil', 'icon delete': 'mdi mdi-delete', 'icon arrow-up': 'mdi mdi-arrow-up', diff --git a/packages/web/src/widgets/WidgetIconPanel.svelte b/packages/web/src/widgets/WidgetIconPanel.svelte index dec384ed0..0245a5f28 100644 --- a/packages/web/src/widgets/WidgetIconPanel.svelte +++ b/packages/web/src/widgets/WidgetIconPanel.svelte @@ -13,6 +13,9 @@ import mainMenuDefinition from '../../../../app/src/mainMenuDefinition'; import hasPermission from '../utility/hasPermission'; import { isProApp } from '../utility/proTools'; + import { openWebLink } from '../utility/simpleTools'; + import { apiCall } from '../utility/api'; + import getElectron from '../utility/getElectron'; let domSettings; let domMainMenu; @@ -103,6 +106,11 @@ const items = mainMenuDefinition({ editMenu: false }); currentDropDownMenu.set({ left, top, items }); } + + async function handleOpenCloudLogin() { + const { url, sid } = await apiCall('auth/create-cloud-login-session', { client: getElectron() ? 'app' : 'web' }); + openWebLink(url); + }
@@ -129,7 +137,7 @@
 
-
{ @@ -138,6 +146,10 @@ data-testid="WidgetIconPanel_lockDb" > +
--> + +
+