diff --git a/packages/api/src/controllers/cloud.js b/packages/api/src/controllers/cloud.js index 9561ca71e..b56a4affd 100644 --- a/packages/api/src/controllers/cloud.js +++ b/packages/api/src/controllers/cloud.js @@ -8,9 +8,10 @@ const { } = require('../utility/cloudIntf'); const connections = require('./connections'); const socket = require('../utility/socket'); -const { decryptConnection, recryptConnection, getInternalEncryptor } = require('../utility/crypting'); +const { recryptConnection, getInternalEncryptor } = require('../utility/crypting'); const { getConnectionLabel, getLogger, extractErrorLogData } = require('dbgate-tools'); const logger = getLogger('cloud'); +const _ = require('lodash'); module.exports = { publicFiles_meta: true, @@ -47,8 +48,8 @@ module.exports = { getContent_meta: true, async getContent({ folid, cntid }) { - const resp = await callCloudApiGet(`content/${folid}/${cntid}`); - return resp; + const { content, name, type } = await callCloudApiGet(`content/${folid}/${cntid}`); + return { content, name, type }; }, putContent_meta: true, @@ -95,10 +96,11 @@ module.exports = { const conn = await connections.getCore({ conid }); const folderEncryptor = getCloudFolderEncryptor(folid); const recryptedConn = recryptConnection(conn, getInternalEncryptor(), folderEncryptor); + const connToSend = _.omit(recryptedConn, ['_id']); await this.putContent({ folid, - cntid: conid, - content: JSON.stringify(recryptedConn), + cntid: undefined, + content: JSON.stringify(connToSend), name: getConnectionLabel(conn), type: 'connection', }); diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index e221e8411..b2c82eed7 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -423,6 +423,16 @@ module.exports = { return volatile; } + const cloudMatch = conid.match(/^cloud\:\/\/(.+)\/(.+)$/); + if (cloudMatch) { + const cloud = require('./cloud'); + const { content } = await cloud.getContent({ folid: cloudMatch[1], cntid: cloudMatch[2] }); + return { + ...JSON.parse(content), + _id: conid, + }; + } + const storage = require('./storage'); const storageConnection = await storage.getConnection({ conid }); diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index 9bfe37013..4f50b1085 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -148,6 +148,9 @@ module.exports = { const existing = this.opened.find(x => x.conid == conid && x.database == database); if (existing) return existing; const connection = await connections.getCore({ conid }); + if (!connection) { + throw new Error(`databaseConnections: Connection with conid="${conid}" not found`); + } if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') { throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode }); } diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index d9a065bd9..68e89e477 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -52,7 +52,7 @@ module.exports = { if (existing) return existing; const connection = await connections.getCore({ conid }); if (!connection) { - throw new Error(`Connection with conid="${conid}" not found`); + throw new Error(`serverConnections: Connection with conid="${conid}" not found`); } if (connection.singleDatabase) { return null; diff --git a/packages/web/src/appobj/CloudContentAppObject.svelte b/packages/web/src/appobj/CloudContentAppObject.svelte index 9a9b75a62..d83e26ea5 100644 --- a/packages/web/src/appobj/CloudContentAppObject.svelte +++ b/packages/web/src/appobj/CloudContentAppObject.svelte @@ -1,4 +1,6 @@ - +{#if data.conid && $cloudConnectionsStore[data.conid]} + +{:else} + +{/if}