Skip to content

Commit f97705d

Browse files
committed
Merge branch 'main' into bugfix/e2e
2 parents ba61cd1 + 61902f5 commit f97705d

35 files changed

+1752
-2472
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
"@types/express": "^4.17.3",
143143
"@types/html-entities": "^1.3.4",
144144
"@types/ioredis": "^4.26.0",
145+
"@types/is-glob": "^4.0.2",
145146
"@types/jest": "^26.0.15",
146147
"@types/lodash": "^4.14.171",
147148
"@types/node": "14.14.10",
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {MigrationInterface, QueryRunner} from "typeorm";
2+
3+
export class sni1650278664000 implements MigrationInterface {
4+
name = 'sni1650278664000'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TABLE "temporary_database_instance" ("id" varchar PRIMARY KEY NOT NULL, "host" varchar NOT NULL, "port" integer NOT NULL, "name" varchar NOT NULL, "username" varchar, "password" varchar, "tls" boolean NOT NULL, "verifyServerCert" boolean NOT NULL, "lastConnection" datetime, "caCertId" varchar, "clientCertId" varchar, "connectionType" varchar NOT NULL DEFAULT ('STANDALONE'), "nodes" varchar, "nameFromProvider" varchar, "sentinelMasterName" varchar, "sentinelMasterUsername" varchar, "sentinelMasterPassword" varchar, "provider" varchar DEFAULT ('UNKNOWN'), "modules" varchar NOT NULL DEFAULT ('[]'), "db" integer, "encryption" varchar, "tlsServername" varchar, CONSTRAINT "FK_3b9b625266c00feb2d66a9f36e4" FOREIGN KEY ("clientCertId") REFERENCES "client_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_d1bc747b5938e22b4b708d8e9a5" FOREIGN KEY ("caCertId") REFERENCES "ca_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION)`);
8+
await queryRunner.query(`INSERT INTO "temporary_database_instance"("id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption") SELECT "id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption" FROM "database_instance"`);
9+
await queryRunner.query(`DROP TABLE "database_instance"`);
10+
await queryRunner.query(`ALTER TABLE "temporary_database_instance" RENAME TO "database_instance"`);
11+
}
12+
13+
public async down(queryRunner: QueryRunner): Promise<void> {
14+
await queryRunner.query(`ALTER TABLE "database_instance" RENAME TO "temporary_database_instance"`);
15+
await queryRunner.query(`CREATE TABLE "database_instance" ("id" varchar PRIMARY KEY NOT NULL, "host" varchar NOT NULL, "port" integer NOT NULL, "name" varchar NOT NULL, "username" varchar, "password" varchar, "tls" boolean NOT NULL, "verifyServerCert" boolean NOT NULL, "lastConnection" datetime, "caCertId" varchar, "clientCertId" varchar, "connectionType" varchar NOT NULL DEFAULT ('STANDALONE'), "nodes" varchar, "nameFromProvider" varchar, "sentinelMasterName" varchar, "sentinelMasterUsername" varchar, "sentinelMasterPassword" varchar, "provider" varchar DEFAULT ('UNKNOWN'), "modules" varchar NOT NULL DEFAULT ('[]'), "db" integer, "encryption" varchar, CONSTRAINT "FK_3b9b625266c00feb2d66a9f36e4" FOREIGN KEY ("clientCertId") REFERENCES "client_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION, CONSTRAINT "FK_d1bc747b5938e22b4b708d8e9a5" FOREIGN KEY ("caCertId") REFERENCES "ca_certificate" ("id") ON DELETE SET NULL ON UPDATE NO ACTION)`);
16+
await queryRunner.query(`INSERT INTO "database_instance"("id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption") SELECT "id", "host", "port", "name", "username", "password", "tls", "verifyServerCert", "lastConnection", "caCertId", "clientCertId", "connectionType", "nodes", "nameFromProvider", "sentinelMasterName", "sentinelMasterUsername", "sentinelMasterPassword", "provider", "modules", "db", "encryption" FROM "temporary_database_instance"`);
17+
await queryRunner.query(`DROP TABLE "temporary_database_instance"`);
18+
}
19+
20+
}

redisinsight/api/migration/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { databaseDbIndex1634219846022 } from './1634219846022-database-db-index'
1212
import { encryption1634557312500 } from './1634557312500-encryption';
1313
import { commandExecution1641795882696 } from './1641795882696-command-execution';
1414
import { pluginState1641805606399 } from './1641805606399-plugin-state';
15+
import { sni1650278664000 } from "./1650278664000-sni";
1516

1617
export default [
1718
initialMigration1614164490968,
@@ -28,4 +29,5 @@ export default [
2829
encryption1634557312500,
2930
commandExecution1641795882696,
3031
pluginState1641805606399,
32+
sni1650278664000,
3133
];

redisinsight/api/src/modules/core/models/database-instance.entity.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ export class DatabaseInstanceEntity {
103103
@Column({ nullable: false })
104104
tls: boolean;
105105

106+
@ApiPropertyOptional({
107+
description: 'SNI servername',
108+
type: String,
109+
})
110+
@Column({ nullable: true })
111+
tlsServername?: string;
112+
106113
@ApiProperty({
107114
description: 'The certificate returned by the server needs to be verified.',
108115
type: Boolean,

redisinsight/api/src/modules/core/services/redis/redis.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ export class RedisService {
295295
config = {
296296
rejectUnauthorized: tls.verifyServerCert,
297297
checkServerIdentity: () => undefined,
298+
servername: tls.servername || undefined,
298299
};
299300
if (tls.caCertId || tls.newCaCert) {
300301
const caCertConfig = await this.getCaCertConfig(tls);

redisinsight/api/src/modules/instances/dto/database-instance.dto.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,15 @@ export class BasicTlsDto {
139139
@IsString({ always: true })
140140
@IsOptional()
141141
clientCertPairId?: string;
142+
143+
@ApiPropertyOptional({
144+
description: 'SNI servername',
145+
type: String,
146+
})
147+
@Type(() => String)
148+
@IsString()
149+
@IsOptional()
150+
servername?: string;
142151
}
143152

144153
export class TlsDto extends BasicTlsDto {

redisinsight/api/src/modules/shared/services/instances-business/instances-business.service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ export class InstancesBusinessService {
575575
...rest,
576576
});
577577
database.tls = !!tls;
578+
if (tls?.servername) {
579+
database.tlsServername = tls.servername;
580+
}
578581
if (storeCert && database.tls) {
579582
database.verifyServerCert = tls.verifyServerCert;
580583
if (tls.newCaCert) {

redisinsight/api/src/modules/shared/utils/database-entity-converter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const convertEntityToDto = (database: DatabaseInstanceEntity): DatabaseIn
55
if (database) {
66
const {
77
tls,
8+
tlsServername,
89
verifyServerCert,
910
caCert,
1011
clientCert,
@@ -31,7 +32,7 @@ export const convertEntityToDto = (database: DatabaseInstanceEntity): DatabaseIn
3132
};
3233
}
3334
if (tls) {
34-
result.tls = { verifyServerCert: verifyServerCert || false };
35+
result.tls = { verifyServerCert: verifyServerCert || false, servername: tlsServername };
3536
if (caCert) {
3637
result.tls.caCertId = caCert.id;
3738
}

redisinsight/api/test/api/instance/GET-instance.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const responseSchema = Joi.array().items(Joi.object().keys({
1818
lastConnection: Joi.date().allow(null).required(),
1919
provider: Joi.string().required(),
2020
tls: Joi.object().keys({
21+
servername: Joi.string().allow(null),
2122
verifyServerCert: Joi.boolean().required(),
2223
caCertId: Joi.string(),
2324
clientCertPairId: Joi.string(),

redisinsight/api/test/api/instance/POST-instance.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const responseSchema = Joi.object().keys({
1616
lastConnection: Joi.date().allow(null).required(),
1717
provider: Joi.string().valid('LOCALHOST', 'UNKNOWN', 'RE_CLOUD', 'RE_CLUSTER').required(),
1818
tls: Joi.object().keys({
19+
servername: Joi.string().allow(null),
1920
verifyServerCert: Joi.boolean().required(),
2021
caCertId: Joi.string(),
2122
clientCertPairId: Joi.string(),

0 commit comments

Comments
 (0)