Skip to content

Commit

Permalink
fix(#2233): enforce validating metadata against the specified standard
Browse files Browse the repository at this point in the history
  • Loading branch information
MSzalowski committed Oct 25, 2024
1 parent b93da8a commit 06e716b
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 17 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ changes.

### Fixed

-
- Fix validating metadata against the CIP standard [Issue 2233](https://github.com/IntersectMBO/govtool/issues/2233)

### Changed

Expand Down
18 changes: 10 additions & 8 deletions govtool/frontend/src/components/molecules/GovernanceActionCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,16 @@ export const GovernanceActionCard: FC<ActionTypeProps> = ({ ...props }) => {
title={title}
isDataMissing={metadataStatus}
/>
<GovernanceActionCardElement
label={t("govActions.abstract")}
text={abstract}
textVariant="twoLines"
dataTestId="governance-action-abstract"
isSliderCard
isMarkdown
/>
{!metadataStatus && (
<GovernanceActionCardElement
label={t("govActions.abstract")}
text={abstract}
textVariant="twoLines"
dataTestId="governance-action-abstract"
isSliderCard
isMarkdown
/>
)}
<GovernanceActionCardElement
label={t("govActions.governanceActionType")}
text={getProposalTypeLabel(type)}
Expand Down
6 changes: 6 additions & 0 deletions govtool/frontend/src/models/metadataValidation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ export enum MetadataValidationStatus {
INCORRECT_FORMAT = "INCORRECT_FORMAT",
}

export enum MetadataStandard {
CIP108 = "CIP108",
CIP119 = "CIP119",
}

export type ValidateMetadataResult<MetadataType> = {
status?: MetadataValidationStatus;
valid: boolean;
Expand All @@ -15,6 +20,7 @@ export type ValidateMetadataResult<MetadataType> = {
export type MetadataValidationDTO = {
url: string;
hash: string;
standard?: MetadataStandard;
};

export type DRepMetadata = {
Expand Down
8 changes: 7 additions & 1 deletion govtool/frontend/src/utils/mapDtoToDrep.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { DRepData, DRepMetadata, DrepDataDTO } from "@/models";
import {
DRepData,
DRepMetadata,
DrepDataDTO,
MetadataStandard,
} from "@/models";
import { postValidate } from "@/services";
import { fixViewForScriptBasedDRep } from "./dRep";

Expand All @@ -23,6 +28,7 @@ export const mapDtoToDrep = async (dto: DrepDataDTO): Promise<DRepData> => {
const validationResponse = await postValidate<DRepMetadata>({
url: dto.url,
hash: dto.metadataHash,
standard: MetadataStandard.CIP119,
});
return {
...dto,
Expand Down
20 changes: 14 additions & 6 deletions govtool/frontend/src/utils/mapDtoToProposal.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { ProposalData, ProposalDataDTO, ProposalMetadata } from "@/models";
import {
MetadataStandard,
ProposalData,
ProposalDataDTO,
ProposalMetadata,
} from "@/models";
import { postValidate } from "@/services";

export const mapDtoToProposal = async (
Expand All @@ -8,15 +13,18 @@ export const mapDtoToProposal = async (
const validationResponse = await postValidate<ProposalMetadata>({
url: dto.url,
hash: dto.metadataHash,
standard: MetadataStandard.CIP108,
});

return {
...dto,
title: validationResponse.metadata?.title,
abstract: validationResponse.metadata?.abstract,
motivation: validationResponse.metadata?.motivation,
rationale: validationResponse.metadata?.rationale,
references: validationResponse.metadata?.references?.map(({ uri }) => uri),
title: dto.title || validationResponse.metadata?.title,
abstract: dto.abstract || validationResponse.metadata?.abstract,
motivation: dto.motivation || validationResponse.metadata?.motivation,
rationale: dto.rationale || validationResponse.metadata?.rationale,
references: validationResponse.metadata?.references?.map(
({ uri }) => uri,
),
metadataStatus: validationResponse.status || null,
metadataValid: validationResponse.valid,
};
Expand Down
6 changes: 5 additions & 1 deletion govtool/metadata-validation/src/app.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ export class AppService {
async validateMetadata({
hash,
url,
standard: paramStandard,
}: ValidateMetadataDTO): Promise<ValidateMetadataResult> {
let status: MetadataValidationStatus;
let metadata: Record<string, unknown>;
let standard = paramStandard;

try {
const { data: rawData } = await firstValueFrom(
Expand All @@ -42,7 +44,9 @@ export class AppService {
throw MetadataValidationStatus.INCORRECT_FORMAT;
}

const standard = getStandard(parsedData);
if (!standard) {
standard = getStandard(parsedData);
}

if (standard) {
await validateMetadataStandard(parsedData.body, standard);
Expand Down
4 changes: 4 additions & 0 deletions govtool/metadata-validation/src/dto/validateMetadata.dto.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { MetadataStandard } from '@/types';

export class ValidateMetadataDTO {
hash: string;

url: string;

standard?: MetadataStandard;
}

0 comments on commit 06e716b

Please sign in to comment.