Skip to content

Commit 8e19040

Browse files
authored
RI-6884: RDI connect - make username and password optional (#4399)
* RI-6884: RDI connect - make username and password optional * RI-6884: update rdi db model * update migration * update migration script * update integration tests
1 parent b909aec commit 8e19040

File tree

6 files changed

+33
-17
lines changed

6 files changed

+33
-17
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 RdiOptionalAuth1740579711635 implements MigrationInterface {
4+
name = 'RdiOptionalAuth1740579711635'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TABLE "temporary_rdi" ("id" varchar PRIMARY KEY NOT NULL, "url" varchar, "name" varchar NOT NULL, "username" varchar, "password" varchar, "lastConnection" datetime, "version" varchar NOT NULL, "encryption" varchar)`);
8+
await queryRunner.query(`INSERT INTO "temporary_rdi"("id", "url", "name", "username", "password", "lastConnection", "version", "encryption") SELECT "id", "url", "name", "username", "password", "lastConnection", "version", "encryption" FROM "rdi"`);
9+
await queryRunner.query(`DROP TABLE "rdi"`);
10+
await queryRunner.query(`ALTER TABLE "temporary_rdi" RENAME TO "rdi"`);
11+
}
12+
13+
public async down(queryRunner: QueryRunner): Promise<void> {
14+
await queryRunner.query(`ALTER TABLE "rdi" RENAME TO "temporary_rdi"`);
15+
await queryRunner.query(`CREATE TABLE "rdi" ("id" varchar PRIMARY KEY NOT NULL, "url" varchar, "name" varchar NOT NULL, "username" varchar NOT NULL, "password" varchar NOT NULL, "lastConnection" datetime, "version" varchar NOT NULL, "encryption" varchar)`);
16+
await queryRunner.query(`INSERT INTO "rdi"("id", "url", "name", "username", "password", "lastConnection", "version", "encryption") SELECT "id", "url", "name", "username", "password", "lastConnection", "version", "encryption" FROM "temporary_rdi"`);
17+
await queryRunner.query(`DROP TABLE "temporary_rdi"`);
18+
}
19+
20+
}

redisinsight/api/migration/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import { CommandExecution1726058563737 } from './1726058563737-command-execution
4747
import { DatabaseCreatedAt1733740794737 } from './1733740794737-database-createdAt';
4848
import { DbSettings1737362130798 } from './1737362130798-db-settings';
4949
import { DatabaseForceStandalone1738829743482 } from './1738829743482-database-forceStandalone';
50+
import { RdiOptionalAuth1740579711635 } from './1740579711635-rdi-optional-auth';
5051

5152
export default [
5253
initialMigration1614164490968,
@@ -98,4 +99,5 @@ export default [
9899
DatabaseCreatedAt1733740794737,
99100
DbSettings1737362130798,
100101
DatabaseForceStandalone1738829743482,
102+
RdiOptionalAuth1740579711635,
101103
];

redisinsight/api/src/modules/rdi/entities/rdi.entity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ export class RdiEntity {
1616
name: string;
1717

1818
@Expose()
19-
@Column({ nullable: false })
19+
@Column({ nullable: true })
2020
username: string;
2121

2222
@Expose()
23-
@Column({ nullable: false })
23+
@Column({ nullable: true })
2424
password: string;
2525

2626
@Expose()

redisinsight/api/src/modules/rdi/models/rdi.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,19 @@ export class Rdi {
3636
description: 'RDI or API username',
3737
type: String,
3838
})
39+
@IsOptional()
3940
@Expose()
4041
@IsString()
41-
username: string;
42+
username?: string;
4243

4344
@ApiPropertyOptional({
4445
description: 'RDI or API password',
4546
type: String,
4647
})
48+
@IsOptional()
4749
@Expose()
4850
@IsString()
49-
@IsNotEmpty()
50-
password: string;
51+
password?: string;
5152

5253
@ApiProperty({
5354
description: 'Time of the last connection to RDI.',

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ const endpoint = () => request(server).post(`/${constants.API.RDI}`);
1515
const dataSchema = Joi.object().keys({
1616
url: Joi.string().required(),
1717
name: Joi.string().max(500).required(),
18-
username: Joi.string(),
19-
password: Joi.string().required(),
18+
username: Joi.string().allow(null),
19+
password: Joi.string().allow(null),
2020
}).messages({ 'any.required': '{#label} should not be empty' }).strict(true);
2121

2222
const validInputData = {

redisinsight/ui/src/pages/rdi/home/connection-form/ConnectionForm.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export interface Props {
4747
const getInitialValues = (values: RdiInstance | null): ConnectionFormValues => ({
4848
name: values?.name || '',
4949
url: values?.url || '',
50-
username: values?.username || 'default',
50+
username: values ? (values.username ?? '') : 'default',
5151
password: values ? null : ''
5252
})
5353

@@ -83,13 +83,6 @@ const ConnectionForm = (props: Props) => {
8383
if (!values.url) {
8484
errors.url = 'URL'
8585
}
86-
if (!values.username) {
87-
errors.username = 'Username'
88-
}
89-
// password is security field we did not received it from BE
90-
if (!values.password && !isNull(values.password)) {
91-
errors.password = 'Password'
92-
}
9386

9487
return errors
9588
}
@@ -191,7 +184,7 @@ const ConnectionForm = (props: Props) => {
191184
<EuiFormRow>
192185
<EuiFlexGroup responsive={false}>
193186
<EuiFlexItem grow={1}>
194-
<EuiFormRow label="Username*">
187+
<EuiFormRow label="Username">
195188
<Field name="username">
196189
{({ field }: { field: FieldInputProps<string> }) => (
197190
<EuiFieldText
@@ -207,7 +200,7 @@ const ConnectionForm = (props: Props) => {
207200
</EuiFormRow>
208201
</EuiFlexItem>
209202
<EuiFlexItem grow={1}>
210-
<EuiFormRow label="Password*">
203+
<EuiFormRow label="Password">
211204
<Field name="password">
212205
{({ field, form, meta }: {
213206
field: FieldInputProps<string>

0 commit comments

Comments
 (0)