mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 14:46:01 +00:00
basic cloud signin workflow
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
// import { shouldWaitForElectronInitialize } from './utility/getElectron';
|
||||
import { subscribeConnectionPingers } from './utility/connectionsPinger';
|
||||
import { subscribePermissionCompiler } from './utility/hasPermission';
|
||||
import { apiCall, installNewVolatileConnectionListener } from './utility/api';
|
||||
import { apiCall, installNewCloudTokenListener, installNewVolatileConnectionListener } from './utility/api';
|
||||
import { getConfig, getSettings, getUsedApps } from './utility/metadataLoaders';
|
||||
import AppTitleProvider from './utility/AppTitleProvider.svelte';
|
||||
import getElectron from './utility/getElectron';
|
||||
@@ -51,6 +51,7 @@
|
||||
subscribeConnectionPingers();
|
||||
subscribePermissionCompiler();
|
||||
installNewVolatileConnectionListener();
|
||||
installNewCloudTokenListener();
|
||||
initializeAppUpdates();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
cloudSigninToken,
|
||||
currentDatabase,
|
||||
currentTheme,
|
||||
emptyConnectionGroupNames,
|
||||
@@ -662,6 +663,15 @@ if (hasPermission('settings/change')) {
|
||||
});
|
||||
}
|
||||
|
||||
registerCommand({
|
||||
id: 'cloud.logout',
|
||||
category: 'Cloud',
|
||||
name: 'Logout',
|
||||
onClick: () => {
|
||||
cloudSigninToken.set(null);
|
||||
},
|
||||
});
|
||||
|
||||
registerCommand({
|
||||
id: 'file.exit',
|
||||
category: 'File',
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
'icon minus-thick': 'mdi mdi-minus-thick',
|
||||
'icon invisible-box': 'mdi mdi-minus-box-outline icon-invisible',
|
||||
'icon cloud-upload': 'mdi mdi-cloud-upload',
|
||||
'icon cloud': 'mdi mdi-cloud',
|
||||
'icon import': 'mdi mdi-application-import',
|
||||
'icon export': 'mdi mdi-application-export',
|
||||
'icon new-connection': 'mdi mdi-database-plus',
|
||||
|
||||
@@ -182,6 +182,8 @@ export const focusedConnectionOrDatabase = writable<{ conid: string; database?:
|
||||
|
||||
export const focusedTreeDbKey = writable<{ key: string; root: string; type: string; text: string }>(null);
|
||||
|
||||
export const cloudSigninToken = writableWithStorage(null, 'cloudSigninToken');
|
||||
|
||||
export const DEFAULT_OBJECT_SEARCH_SETTINGS = {
|
||||
pureName: true,
|
||||
schemaName: false,
|
||||
|
||||
@@ -14,6 +14,7 @@ import { batchDispatchCacheTriggers, dispatchCacheChange } from './cache';
|
||||
import { isAdminPage, isOneOfPage } from './pageDefs';
|
||||
import { openWebLink } from './simpleTools';
|
||||
import { serializeJsTypesReplacer } from 'dbgate-tools';
|
||||
import { cloudSigninToken } from '../stores';
|
||||
|
||||
export const strmid = uuidv1();
|
||||
|
||||
@@ -279,6 +280,12 @@ export function installNewVolatileConnectionListener() {
|
||||
});
|
||||
}
|
||||
|
||||
export function installNewCloudTokenListener() {
|
||||
apiOn('got-cloud-token', async ({ token }) => {
|
||||
cloudSigninToken.set(token);
|
||||
});
|
||||
}
|
||||
|
||||
export function getAuthCategory(config) {
|
||||
if (config.isBasicAuth) {
|
||||
return 'basic';
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
visibleHamburgerMenuWidget,
|
||||
lockedDatabaseMode,
|
||||
getCurrentConfig,
|
||||
cloudSigninToken,
|
||||
} from '../stores';
|
||||
import mainMenuDefinition from '../../../../app/src/mainMenuDefinition';
|
||||
import hasPermission from '../utility/hasPermission';
|
||||
@@ -18,6 +19,7 @@
|
||||
import getElectron from '../utility/getElectron';
|
||||
|
||||
let domSettings;
|
||||
let domCloudAccount;
|
||||
let domMainMenu;
|
||||
|
||||
const widgets = [
|
||||
@@ -61,9 +63,10 @@
|
||||
title: 'Selected cell data detail view',
|
||||
},
|
||||
{
|
||||
icon: 'icon app',
|
||||
name: 'app',
|
||||
title: 'Application layers',
|
||||
icon: 'icon cloud',
|
||||
name: 'cloud',
|
||||
title: 'DbGate Cloud',
|
||||
isCloud: true,
|
||||
},
|
||||
{
|
||||
icon: 'icon premium',
|
||||
@@ -95,7 +98,26 @@
|
||||
const rect = domSettings.getBoundingClientRect();
|
||||
const left = rect.right;
|
||||
const top = rect.bottom;
|
||||
const items = [{ command: 'settings.show' }, { command: 'theme.changeTheme' }, { command: 'settings.commands' }];
|
||||
const items = [
|
||||
{ command: 'settings.show' },
|
||||
{ command: 'theme.changeTheme' },
|
||||
{ command: 'settings.commands' },
|
||||
{
|
||||
text: 'View applications',
|
||||
onClick: () => {
|
||||
$selectedWidget = 'app';
|
||||
$visibleWidgetSideBar = true;
|
||||
},
|
||||
},
|
||||
];
|
||||
currentDropDownMenu.set({ left, top, items });
|
||||
}
|
||||
|
||||
function handleCloudAccountMenu() {
|
||||
const rect = domCloudAccount.getBoundingClientRect();
|
||||
const left = rect.right;
|
||||
const top = rect.bottom;
|
||||
const items = [{ command: 'cloud.logout' }];
|
||||
currentDropDownMenu.set({ left, top, items });
|
||||
}
|
||||
|
||||
@@ -121,6 +143,7 @@
|
||||
{/if}
|
||||
{#each widgets
|
||||
.filter(x => x && hasPermission(`widgets/${x.name}`))
|
||||
.filter(x => !x.isCloud || $cloudSigninToken)
|
||||
.filter(x => !x.isPremiumPromo || !isProApp()) as item}
|
||||
<div
|
||||
class="wrapper"
|
||||
@@ -148,9 +171,20 @@
|
||||
<FontIcon icon={$lockedDatabaseMode ? 'icon locked-database-mode' : 'icon unlocked-database-mode'} />
|
||||
</div> -->
|
||||
|
||||
<div class="wrapper" on:click={handleOpenCloudLogin} data-testid="WidgetIconPanel_cloudAccount">
|
||||
<FontIcon icon="icon cloud-account" />
|
||||
</div>
|
||||
{#if $cloudSigninToken}
|
||||
<div
|
||||
class="wrapper"
|
||||
on:click={handleCloudAccountMenu}
|
||||
bind:this={domCloudAccount}
|
||||
data-testid="WidgetIconPanel_cloudAccount"
|
||||
>
|
||||
<FontIcon icon="icon cloud-account-connected" />
|
||||
</div>
|
||||
{:else}
|
||||
<div class="wrapper" on:click={handleOpenCloudLogin} data-testid="WidgetIconPanel_cloudAccount">
|
||||
<FontIcon icon="icon cloud-account" />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="wrapper" on:click={handleSettingsMenu} bind:this={domSettings} data-testid="WidgetIconPanel_settings">
|
||||
<FontIcon icon="icon settings" />
|
||||
|
||||
Reference in New Issue
Block a user