Skip to content

Commit c1064db

Browse files
author
Artem
committed
add SNI
1 parent c282ec1 commit c1064db

File tree

7 files changed

+44
-1
lines changed

7 files changed

+44
-1
lines changed
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
}

0 commit comments

Comments
 (0)