Skip to content

Commit 68702df

Browse files
committed
feat(web-domains-data): ds records - datagrid
ref:#DCE-28 Signed-off-by: Louis BENSI <[email protected]>
1 parent 909fb4d commit 68702df

File tree

16 files changed

+351
-4
lines changed

16 files changed

+351
-4
lines changed

packages/manager/apps/web-domains/public/translations/domain/Messages_fr_FR.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,5 +284,10 @@
284284
"domain_tab_hosts_modal_delete_title": "Supprimer l'hôte {{hostname}}",
285285
"domain_tab_hosts_modal_delete_information_message": "Êtes-vous sur de voulour supprimer cet hôte ?",
286286
"domain_tab_hosts_modal_delete_success_message": "L'hôte est en cours de suppression",
287-
"domain_tab_hosts_modal_delete_error_message": "Une erreur a été détectée lors de la suppression de l'hôte"
287+
"domain_tab_hosts_modal_delete_error_message": "Une erreur est survenue lors de la suppression de l'hôte",
288+
"domain_dsrecords_table_header_keyTag": "Key tag",
289+
"domain_dsrecords_table_header_flags": "Flag",
290+
"domain_dsrecords_table_header_algo": "Algorithme",
291+
"domain_dsrecords_table_header_publicKey": "Clé publique (encodée base64)",
292+
"domain_dsrecords_table_key_signing_ksk": "Key Signing Key (KSK)"
288293
}

packages/manager/apps/web-domains/src/domain/__mocks__/dnsDetails.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { supportedAlgorithms } from '../constants/dsRecords';
12
import { DnsConfigurationTypeEnum } from '../enum/dnsConfigurationType.enum';
23
import { DomainStateEnum } from '../enum/domainState.enum';
34
import { ProtectionStateEnum } from '../enum/protectionState.enum';
@@ -65,6 +66,19 @@ export const baseDomainResource: TDomainResource = {
6566
},
6667
authInfoManagedByOVHcloud: true,
6768
authInfoSupported: true,
69+
dnssecConfiguration: {
70+
dnssecSupported: true,
71+
dsData: [
72+
{
73+
algorithm: 8,
74+
keyTag: 0,
75+
flags: 0,
76+
publicKey:
77+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
78+
},
79+
],
80+
supportedAlgorithms,
81+
},
6882
createdAt: '2025-10-11T11:00:00',
6983
},
7084
currentTasks: [],

packages/manager/apps/web-domains/src/domain/__mocks__/serviceInfoDetail.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DnsConfigurationTypeEnum } from '@/domain/enum/dnsConfigurationType.enu
66
import { ResourceStatusEnum } from '@/domain/enum/resourceStatus.enum';
77
import { AdditionalDomainStateEnum } from '../enum/domainState.enum';
88
import { StatusEnum } from '@/domain/enum/Status.enum';
9+
import { supportedAlgorithms } from '../constants/dsRecords';
910

1011
export const domainResourceOK: TDomainResource = {
1112
checksum: 'example-checksum',
@@ -44,6 +45,19 @@ export const domainResourceOK: TDomainResource = {
4445
},
4546
authInfoManagedByOVHcloud: true,
4647
authInfoSupported: true,
48+
dnssecConfiguration: {
49+
dnssecSupported: true,
50+
dsData: [
51+
{
52+
algorithm: 8,
53+
keyTag: 0,
54+
flags: 0,
55+
publicKey:
56+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
57+
},
58+
],
59+
supportedAlgorithms,
60+
},
4761
extension: '.com',
4862
mainState: DomainStateEnum.OK,
4963
protectionState: ProtectionStateEnum.PROTECTED,
@@ -107,6 +121,19 @@ export const serviceInfoDetail: TDomainResource = {
107121
},
108122
],
109123
},
124+
dnssecConfiguration: {
125+
dnssecSupported: true,
126+
dsData: [
127+
{
128+
algorithm: 8,
129+
keyTag: 0,
130+
flags: 0,
131+
publicKey:
132+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
133+
},
134+
],
135+
supportedAlgorithms,
136+
},
110137
contactsConfiguration: {
111138
contactOwner: { id: 'owner-id' },
112139
contactAdministrator: { id: 'admin-id' },

packages/manager/apps/web-domains/src/domain/__mocks__/serviceList.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { SuspensionStateEnum } from '../enum/suspensionState.enum';
55
import { TDomainResource } from '../types/domainResource';
66
import { ResourceStatusEnum } from '../enum/resourceStatus.enum';
77
import { StatusEnum } from '../enum/Status.enum';
8+
import { supportedAlgorithms } from '../constants/dsRecords';
89

910
export const serviceList: TDomainResource[] = [
1011
{
@@ -51,6 +52,19 @@ export const serviceList: TDomainResource[] = [
5152
},
5253
authInfoManagedByOVHcloud: true,
5354
authInfoSupported: true,
55+
dnssecConfiguration: {
56+
dnssecSupported: true,
57+
dsData: [
58+
{
59+
algorithm: 8,
60+
keyTag: 0,
61+
flags: 0,
62+
publicKey:
63+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
64+
},
65+
],
66+
supportedAlgorithms,
67+
},
5468
contactsConfiguration: {
5569
contactAdministrator: { id: 'admin-id' },
5670
contactBilling: {

packages/manager/apps/web-domains/src/domain/components/ConfigurationCards/ConfigurationCards.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { SuspensionStateEnum } from '@/domain/enum/suspensionState.enum';
2121
import { ResourceStatusEnum } from '@/domain/enum/resourceStatus.enum';
2222
import { TDomainResource } from '@/domain/types/domainResource';
2323
import { StatusEnum } from '@/domain/enum/Status.enum';
24+
import { supportedAlgorithms } from '@/domain/constants/dsRecords';
2425

2526
vi.mock('@/domain/hooks/data/query');
2627
vi.mock('@ovh-ux/manager-react-components', async () => {
@@ -69,6 +70,19 @@ describe('ConfigurationCards component', () => {
6970
},
7071
],
7172
},
73+
dnssecConfiguration: {
74+
dnssecSupported: true,
75+
dsData: [
76+
{
77+
algorithm: 8,
78+
keyTag: 0,
79+
flags: 0,
80+
publicKey:
81+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
82+
},
83+
],
84+
supportedAlgorithms,
85+
},
7286
extension: '.com',
7387
mainState: DomainStateEnum.OK,
7488
name: 'example.com',

packages/manager/apps/web-domains/src/domain/components/ConfigurationCards/DnssecToggleStatus.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { ProtectionStateEnum } from '@/domain/enum/protectionState.enum';
1313
import { SuspensionStateEnum } from '@/domain/enum/suspensionState.enum';
1414
import { ResourceStatusEnum } from '@/domain/enum/resourceStatus.enum';
1515
import { StatusEnum } from '@/domain/enum/Status.enum';
16+
import { supportedAlgorithms } from '@/domain/constants/dsRecords';
1617

1718
describe('DnssecToggleStatus component', () => {
1819
const mockDomainResource: TDomainResource = {
@@ -48,6 +49,19 @@ describe('DnssecToggleStatus component', () => {
4849
},
4950
],
5051
},
52+
dnssecConfiguration: {
53+
dnssecSupported: true,
54+
dsData: [
55+
{
56+
algorithm: 8,
57+
keyTag: 0,
58+
flags: 0,
59+
publicKey:
60+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
61+
},
62+
],
63+
supportedAlgorithms,
64+
},
5165
extension: '.com',
5266
mainState: DomainStateEnum.OK,
5367
name: 'example.com',

packages/manager/apps/web-domains/src/domain/components/ConfigurationCards/TransferToggleStatus.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { ProtectionStateEnum } from '@/domain/enum/protectionState.enum';
1212
import { SuspensionStateEnum } from '@/domain/enum/suspensionState.enum';
1313
import { ResourceStatusEnum } from '@/domain/enum/resourceStatus.enum';
1414
import { StatusEnum } from '@/domain/enum/Status.enum';
15+
import { supportedAlgorithms } from '@/domain/constants/dsRecords';
1516

1617
describe('TransferToggleStatus component', () => {
1718
const mockDomainResource: TDomainResource = {
@@ -53,6 +54,19 @@ describe('TransferToggleStatus component', () => {
5354
},
5455
],
5556
},
57+
dnssecConfiguration: {
58+
dnssecSupported: true,
59+
dsData: [
60+
{
61+
algorithm: 8,
62+
keyTag: 0,
63+
flags: 0,
64+
publicKey:
65+
'MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGlVDb17VQPrH7bOLBGc6N+/D84tbly3RQ/kQLPq73H6nhCI+vg1euNvnZaFBDiHktGRDlmayzoo5k/j/65V5TkoFE/x5yaiPGHXKIb+QsZCbHeNkEx/di4meHY7sETyla97uBM5BJUBc7ZhCoR2+Jc+HHdBLrQ5/9LpR0nEsfn7AgMBAAE=',
66+
},
67+
],
68+
supportedAlgorithms,
69+
},
5670
extension: '.com',
5771
mainState: DomainStateEnum.OK,
5872
name: 'example.com',
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
export const algorithm_3 = { name: 'RSASHZA3457', number: 3 };
2+
export const supportedAlgorithms = [
3+
{
4+
name: 'RSASHA1',
5+
number: 5,
6+
},
7+
{
8+
name: 'RSASHA1-NSEC3-SHA1',
9+
number: 7,
10+
},
11+
{
12+
name: 'RSASHA256',
13+
number: 8,
14+
},
15+
{
16+
name: 'RSASHA512',
17+
number: 10,
18+
},
19+
{
20+
name: 'ECDSAP256SHA256',
21+
number: 13,
22+
},
23+
{
24+
name: 'ECDSAP384SHA384',
25+
number: 14,
26+
},
27+
{
28+
name: 'ED25519',
29+
number: 15,
30+
},
31+
];

packages/manager/apps/web-domains/src/domain/constants/serviceDetail.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ export const ServiceDetailTabsProps: DashboardTabItemProps[] = [
5252
value: 'hosts',
5353
},
5454
{
55-
id: 'dnssec',
55+
id: 'ds-records',
5656
name: 'domain_tab_name_ds_records',
57-
value: 'dnssec',
57+
value: 'ds-records',
5858
},
5959
{
6060
id: 'contact-management',
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import { NAMESPACES } from '@ovh-ux/manager-common-translations';
2+
import { ActionMenu, DataGridTextCell } from '@ovh-ux/manager-react-components';
3+
import { ODS_BUTTON_COLOR, ODS_BUTTON_VARIANT } from '@ovhcloud/ods-components';
4+
import { useTranslation } from 'react-i18next';
5+
import { TDsDataInterface } from '@/domain/types/dnssecConfiguration';
6+
import { useState } from 'react';
7+
8+
export const useDomainDsRecordsDatagridColumns = () => {
9+
const { t } = useTranslation('domain');
10+
const [isPublicKeyExpanded, setisPublicKeyExpanded] = useState<boolean>(true);
11+
const columns = [
12+
{
13+
id: 'keyTag',
14+
cell: (props: TDsDataInterface) => (
15+
<DataGridTextCell>{props.keyTag}</DataGridTextCell>
16+
),
17+
label: t('domain_dsrecords_table_header_keyTag'),
18+
},
19+
{
20+
id: 'flags',
21+
cell: (props: TDsDataInterface) => (
22+
<DataGridTextCell>
23+
{props.flags} - {t('domain_dsrecords_table_key_signing_ksk')}
24+
</DataGridTextCell>
25+
),
26+
label: t('domain_dsrecords_table_header_flags'),
27+
},
28+
{
29+
id: 'algorithm',
30+
cell: (props: TDsDataInterface) => (
31+
<DataGridTextCell>{`${props.supportedAlgorithm.number} - ${props.supportedAlgorithm.name}`}</DataGridTextCell>
32+
),
33+
label: t('domain_dsrecords_table_header_algo'),
34+
},
35+
{
36+
id: 'publicKey',
37+
cell: (props: TDsDataInterface) => (
38+
<DataGridTextCell>
39+
<div
40+
onClick={() => setisPublicKeyExpanded(!isPublicKeyExpanded)}
41+
className={`max-w-sm break-all cursor-pointer ${isPublicKeyExpanded &&
42+
'truncate'}`}
43+
>
44+
<span>{props.publicKey}</span>
45+
</div>
46+
</DataGridTextCell>
47+
),
48+
label: t('domain_dsrecords_table_header_publicKey'),
49+
},
50+
{
51+
id: 'actions',
52+
cell: () => (
53+
<ActionMenu
54+
items={[
55+
{
56+
id: 1,
57+
label: t(`${NAMESPACES.ACTIONS}:modify`),
58+
},
59+
{
60+
id: 2,
61+
label: t(`${NAMESPACES.ACTIONS}:delete`),
62+
color: ODS_BUTTON_COLOR.critical,
63+
},
64+
]}
65+
id={'1'}
66+
isCompact
67+
variant={ODS_BUTTON_VARIANT.ghost}
68+
/>
69+
),
70+
label: '',
71+
},
72+
];
73+
return columns;
74+
};

0 commit comments

Comments
 (0)