Skip to content

Commit 3904a0e

Browse files
committed
Merge remote-tracking branch 'origin/main' into ri-explain-plugin
2 parents 9d2e65c + 9936d2c commit 3904a0e

File tree

96 files changed

+1688
-216
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1688
-216
lines changed

configs/webpack.config.renderer.dev.babel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ export default merge(baseConfig, {
223223

224224
new ReactRefreshWebpackPlugin(),
225225

226-
new MonacoWebpackPlugin({ languages: [], features: ['!rename'] }),
226+
new MonacoWebpackPlugin({ languages: ['json'], features: ['!rename'] }),
227227
],
228228

229229
node: {

configs/webpack.config.renderer.prod.babel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export default merge(baseConfig, {
187187
},
188188

189189
plugins: [
190-
new MonacoWebpackPlugin({ languages: [], features: ['!rename'] }),
190+
new MonacoWebpackPlugin({ languages: ['json'], features: ['!rename'] }),
191191

192192
new webpack.EnvironmentPlugin({
193193
NODE_ENV: 'production',

configs/webpack.config.web.common.babel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export default {
7171
plugins: [
7272
new HtmlWebpackPlugin({ template: 'index.html.ejs' }),
7373

74-
new MonacoWebpackPlugin({ languages: [], features: ['!rename'] }),
74+
new MonacoWebpackPlugin({ languages: ['json'], features: ['!rename'] }),
7575

7676
new webpack.IgnorePlugin({
7777
checkResource(resource) {

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@
126126
"@types/node": "14.14.10",
127127
"@types/react": "^18.0.20",
128128
"@types/react-dom": "^18.0.5",
129-
"@types/react-monaco-editor": "^0.16.0",
130129
"@types/react-redux": "^7.1.12",
131130
"@types/react-router-dom": "^5.1.6",
132131
"@types/react-virtualized": "^9.21.10",
@@ -243,7 +242,7 @@
243242
"react-hotkeys-hook": "^3.3.1",
244243
"react-json-pretty": "^2.2.0",
245244
"react-jsx-parser": "^1.28.4",
246-
"react-monaco-editor": "^0.44.0",
245+
"react-monaco-editor": "^0.45.0",
247246
"react-redux": "^7.2.2",
248247
"react-rnd": "^10.3.5",
249248
"react-router-dom": "^5.2.0",

redisinsight/__mocks__/monacoMock.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ export default function MonacoEditor(props) {
1515
createContextKey: jest.fn(),
1616
focus: jest.fn(),
1717
onDidChangeCursorPosition: jest.fn(),
18-
executeEdits: jest.fn()
18+
executeEdits: jest.fn(),
19+
updateOptions: jest.fn()
1920
},
2021
// monaco
2122
{
@@ -31,12 +32,21 @@ export default function MonacoEditor(props) {
3132
}),
3233
setLanguageConfiguration: jest.fn(),
3334
setMonarchTokensProvider: jest.fn(),
35+
json: {
36+
jsonDefaults:{
37+
setDiagnosticsOptions: jest.fn()
38+
}
39+
}
3440
},
3541
KeyMod: {},
3642
KeyCode: {}
3743
})
3844
}, [])
39-
return <input {...props} data-testid="monaco"/>;
45+
return <textarea
46+
{...props}
47+
onChange={(e) => props.onChange && props.onChange(e.target.value)}
48+
data-testid={props['data-testid'] ? props['data-testid'] : 'monaco'}
49+
/>;
4050
}
4151

4252
export const languages = {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm";
2+
3+
export class workbenchAndAnalysisDbIndex1673934231410 implements MigrationInterface {
4+
name = 'workbenchAndAnalysisDbIndex1673934231410'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`DROP INDEX "IDX_5cd90dd6def1fd7c521e53fb2c"`);
8+
await queryRunner.query(`CREATE TABLE "temporary_command_execution" ("id" varchar PRIMARY KEY NOT NULL, "databaseId" varchar NOT NULL, "command" text NOT NULL, "result" text NOT NULL, "role" varchar, "nodeOptions" varchar, "encryption" varchar, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "mode" varchar, "resultsMode" varchar, "summary" varchar, "executionTime" integer, "db" integer, CONSTRAINT "FK_ea8adfe9aceceb79212142206b8" FOREIGN KEY ("databaseId") REFERENCES "database_instance" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
9+
await queryRunner.query(`INSERT INTO "temporary_command_execution"("id", "databaseId", "command", "result", "role", "nodeOptions", "encryption", "createdAt", "mode", "resultsMode", "summary", "executionTime") SELECT "id", "databaseId", "command", "result", "role", "nodeOptions", "encryption", "createdAt", "mode", "resultsMode", "summary", "executionTime" FROM "command_execution"`);
10+
await queryRunner.query(`DROP TABLE "command_execution"`);
11+
await queryRunner.query(`ALTER TABLE "temporary_command_execution" RENAME TO "command_execution"`);
12+
await queryRunner.query(`CREATE INDEX "IDX_5cd90dd6def1fd7c521e53fb2c" ON "command_execution" ("createdAt") `);
13+
await queryRunner.query(`DROP INDEX "IDX_d174a8edc2201d6c5781f0126a"`);
14+
await queryRunner.query(`DROP INDEX "IDX_fdd0daeb4d8f226cf1ff79bebb"`);
15+
await queryRunner.query(`CREATE TABLE "temporary_database_analysis" ("id" varchar PRIMARY KEY NOT NULL, "databaseId" varchar NOT NULL, "filter" blob, "delimiter" varchar NOT NULL, "progress" blob, "totalKeys" blob, "totalMemory" blob, "topKeysNsp" blob, "topMemoryNsp" blob, "topKeysLength" blob, "topKeysMemory" blob, "encryption" varchar, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "expirationGroups" blob, "db" integer, CONSTRAINT "FK_d174a8edc2201d6c5781f0126ae" FOREIGN KEY ("databaseId") REFERENCES "database_instance" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
16+
await queryRunner.query(`INSERT INTO "temporary_database_analysis"("id", "databaseId", "filter", "delimiter", "progress", "totalKeys", "totalMemory", "topKeysNsp", "topMemoryNsp", "topKeysLength", "topKeysMemory", "encryption", "createdAt", "expirationGroups") SELECT "id", "databaseId", "filter", "delimiter", "progress", "totalKeys", "totalMemory", "topKeysNsp", "topMemoryNsp", "topKeysLength", "topKeysMemory", "encryption", "createdAt", "expirationGroups" FROM "database_analysis"`);
17+
await queryRunner.query(`DROP TABLE "database_analysis"`);
18+
await queryRunner.query(`ALTER TABLE "temporary_database_analysis" RENAME TO "database_analysis"`);
19+
await queryRunner.query(`CREATE INDEX "IDX_d174a8edc2201d6c5781f0126a" ON "database_analysis" ("databaseId") `);
20+
await queryRunner.query(`CREATE INDEX "IDX_fdd0daeb4d8f226cf1ff79bebb" ON "database_analysis" ("createdAt") `);
21+
}
22+
23+
public async down(queryRunner: QueryRunner): Promise<void> {
24+
await queryRunner.query(`DROP INDEX "IDX_fdd0daeb4d8f226cf1ff79bebb"`);
25+
await queryRunner.query(`DROP INDEX "IDX_d174a8edc2201d6c5781f0126a"`);
26+
await queryRunner.query(`ALTER TABLE "database_analysis" RENAME TO "temporary_database_analysis"`);
27+
await queryRunner.query(`CREATE TABLE "database_analysis" ("id" varchar PRIMARY KEY NOT NULL, "databaseId" varchar NOT NULL, "filter" blob, "delimiter" varchar NOT NULL, "progress" blob, "totalKeys" blob, "totalMemory" blob, "topKeysNsp" blob, "topMemoryNsp" blob, "topKeysLength" blob, "topKeysMemory" blob, "encryption" varchar, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "expirationGroups" blob, CONSTRAINT "FK_d174a8edc2201d6c5781f0126ae" FOREIGN KEY ("databaseId") REFERENCES "database_instance" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
28+
await queryRunner.query(`INSERT INTO "database_analysis"("id", "databaseId", "filter", "delimiter", "progress", "totalKeys", "totalMemory", "topKeysNsp", "topMemoryNsp", "topKeysLength", "topKeysMemory", "encryption", "createdAt", "expirationGroups") SELECT "id", "databaseId", "filter", "delimiter", "progress", "totalKeys", "totalMemory", "topKeysNsp", "topMemoryNsp", "topKeysLength", "topKeysMemory", "encryption", "createdAt", "expirationGroups" FROM "temporary_database_analysis"`);
29+
await queryRunner.query(`DROP TABLE "temporary_database_analysis"`);
30+
await queryRunner.query(`CREATE INDEX "IDX_fdd0daeb4d8f226cf1ff79bebb" ON "database_analysis" ("createdAt") `);
31+
await queryRunner.query(`CREATE INDEX "IDX_d174a8edc2201d6c5781f0126a" ON "database_analysis" ("databaseId") `);
32+
await queryRunner.query(`DROP INDEX "IDX_5cd90dd6def1fd7c521e53fb2c"`);
33+
await queryRunner.query(`ALTER TABLE "command_execution" RENAME TO "temporary_command_execution"`);
34+
await queryRunner.query(`CREATE TABLE "command_execution" ("id" varchar PRIMARY KEY NOT NULL, "databaseId" varchar NOT NULL, "command" text NOT NULL, "result" text NOT NULL, "role" varchar, "nodeOptions" varchar, "encryption" varchar, "createdAt" datetime NOT NULL DEFAULT (datetime('now')), "mode" varchar, "resultsMode" varchar, "summary" varchar, "executionTime" integer, CONSTRAINT "FK_ea8adfe9aceceb79212142206b8" FOREIGN KEY ("databaseId") REFERENCES "database_instance" ("id") ON DELETE CASCADE ON UPDATE NO ACTION)`);
35+
await queryRunner.query(`INSERT INTO "command_execution"("id", "databaseId", "command", "result", "role", "nodeOptions", "encryption", "createdAt", "mode", "resultsMode", "summary", "executionTime") SELECT "id", "databaseId", "command", "result", "role", "nodeOptions", "encryption", "createdAt", "mode", "resultsMode", "summary", "executionTime" FROM "temporary_command_execution"`);
36+
await queryRunner.query(`DROP TABLE "temporary_command_execution"`);
37+
await queryRunner.query(`CREATE INDEX "IDX_5cd90dd6def1fd7c521e53fb2c" ON "command_execution" ("createdAt") `);
38+
}
39+
40+
}

redisinsight/api/migration/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { workbenchExecutionTime1667368983699 } from './1667368983699-workbench-e
2323
import { database1667477693934 } from './1667477693934-database';
2424
import { databaseNew1670252337342 } from './1670252337342-database-new';
2525
import { sshOptions1673035852335 } from './1673035852335-ssh-options';
26+
import { workbenchAndAnalysisDbIndex1673934231410 } from './1673934231410-workbench_and_analysis_db';
2627

2728
export default [
2829
initialMigration1614164490968,
@@ -50,4 +51,5 @@ export default [
5051
database1667477693934,
5152
databaseNew1670252337342,
5253
sshOptions1673035852335,
54+
workbenchAndAnalysisDbIndex1673934231410,
5355
];

redisinsight/api/src/__mocks__/database-import.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { mockCaCertificate, mockClientCertificate } from 'src/__mocks__/certific
66
import {
77
InvalidCaCertificateBodyException, InvalidCertificateNameException,
88
} from 'src/modules/database-import/exceptions';
9+
import { mockSshOptionsPrivateKey } from 'src/__mocks__/ssh';
910

1011
export const mockDatabasesToImportArray = new Array(10).fill(mockSentinelDatabaseWithTlsAuth);
1112

@@ -87,3 +88,10 @@ export const mockCertificateImportService = jest.fn(() => ({
8788
processCaCertificate: jest.fn().mockResolvedValue(mockCaCertificate),
8889
processClientCertificate: jest.fn().mockResolvedValue(mockClientCertificate),
8990
}));
91+
92+
export const mockSshImportService = jest.fn(() => ({
93+
processSshOptions: jest.fn().mockResolvedValue({
94+
...mockSshOptionsPrivateKey,
95+
id: undefined,
96+
}),
97+
}));

redisinsight/api/src/common/utils/certificate-import.util.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ import { readFileSync } from 'fs';
33

44
export const isValidPemCertificate = (cert: string): boolean => cert.startsWith('-----BEGIN CERTIFICATE-----');
55
export const isValidPemPrivateKey = (cert: string): boolean => cert.startsWith('-----BEGIN PRIVATE KEY-----');
6+
export const isValidSshPrivateKey = (cert: string): boolean => cert.startsWith('-----BEGIN OPENSSH PRIVATE KEY-----');
67
export const getPemBodyFromFileSync = (path: string): string => readFileSync(path).toString('utf8');
78
export const getCertNameFromFilename = (path: string): string => parse(path).name;

redisinsight/api/src/constants/error-messages.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export default {
1818

1919
CA_CERT_EXIST: 'This ca certificate name is already in use.',
2020
INVALID_CA_BODY: 'Invalid CA body',
21+
INVALID_SSH_PRIVATE_KEY_BODY: 'Invalid SSH private key body',
22+
SSH_AGENTS_ARE_NOT_SUPPORTED: 'SSH Agents are not supported',
23+
INVALID_SSH_BODY: 'Invalid SSH body',
2124
INVALID_CERTIFICATE_BODY: 'Invalid certificate body',
2225
INVALID_PRIVATE_KEY: 'Invalid private key',
2326
CERTIFICATE_NAME_IS_NOT_DEFINED: 'Certificate name is not defined',

0 commit comments

Comments
 (0)