From fa8738e1f6df8c5c6afb4daa3c3f098260eea0b8 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Mon, 28 Jul 2025 21:08:36 +0700 Subject: [PATCH] feat: public api valid extensions --- .../(site)/integrations/social/layout.tsx | 8 +++-- libraries/helpers/src/utils/valid.url.path.ts | 36 ++++++++++++++++--- .../src/dtos/media/media.dto.ts | 3 +- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/apps/frontend/src/app/(app)/(site)/integrations/social/layout.tsx b/apps/frontend/src/app/(app)/(site)/integrations/social/layout.tsx index 37bea8d8..124e0fec 100644 --- a/apps/frontend/src/app/(app)/(site)/integrations/social/layout.tsx +++ b/apps/frontend/src/app/(app)/(site)/integrations/social/layout.tsx @@ -8,9 +8,11 @@ export default async function IntegrationLayout({ const t = await getT(); return ( -
- {t('adding_channel_redirecting_you', 'Adding channel, Redirecting You')} - {children} +
+
+ {t('adding_channel_redirecting_you', 'Adding channel, Redirecting You')} + {children} +
); } diff --git a/libraries/helpers/src/utils/valid.url.path.ts b/libraries/helpers/src/utils/valid.url.path.ts index 8022ecc6..d7c18931 100644 --- a/libraries/helpers/src/utils/valid.url.path.ts +++ b/libraries/helpers/src/utils/valid.url.path.ts @@ -1,4 +1,28 @@ -import { ValidationArguments, ValidatorConstraintInterface, ValidatorConstraint } from "class-validator"; +import { + ValidationArguments, + ValidatorConstraintInterface, + ValidatorConstraint, +} from 'class-validator'; + +@ValidatorConstraint({ name: 'checkValidExtension', async: false }) +export class ValidUrlExtension implements ValidatorConstraintInterface { + validate(text: string, args: ValidationArguments) { + return ( + text.endsWith('.png') || + text.endsWith('.jpg') || + text.endsWith('.jpeg') || + text.endsWith('.gif') || + text.endsWith('.mp4') + ); + } + + defaultMessage(args: ValidationArguments) { + // here you can provide default error message if validation failed + return ( + 'File must have a valid extension: .png, .jpg, .jpeg, .gif, or .mp4' + ); + } +} @ValidatorConstraint({ name: 'checkValidPath', async: false }) export class ValidUrlPath implements ValidatorConstraintInterface { @@ -7,11 +31,15 @@ export class ValidUrlPath implements ValidatorConstraintInterface { return true; } - return (text || 'invalid url').indexOf(process.env.RESTRICT_UPLOAD_DOMAINS) > -1; + return ( + (text || 'invalid url').indexOf(process.env.RESTRICT_UPLOAD_DOMAINS) > -1 + ); } defaultMessage(args: ValidationArguments) { // here you can provide default error message if validation failed - return 'URL must contain the domain: ' + process.env.RESTRICT_UPLOAD_DOMAINS; + return ( + 'URL must contain the domain: ' + process.env.RESTRICT_UPLOAD_DOMAINS + ); } -} \ No newline at end of file +} diff --git a/libraries/nestjs-libraries/src/dtos/media/media.dto.ts b/libraries/nestjs-libraries/src/dtos/media/media.dto.ts index 2078921a..8d0ab7fc 100644 --- a/libraries/nestjs-libraries/src/dtos/media/media.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/media/media.dto.ts @@ -1,5 +1,5 @@ import { IsDefined, IsString, IsUrl, ValidateIf, Validate } from 'class-validator'; -import { ValidUrlPath } from '@gitroom/helpers/utils/valid.url.path'; +import { ValidUrlExtension, ValidUrlPath } from '@gitroom/helpers/utils/valid.url.path'; export class MediaDto { @IsString() @@ -9,6 +9,7 @@ export class MediaDto { @IsString() @IsDefined() @Validate(ValidUrlPath) + @Validate(ValidUrlExtension) path: string; @ValidateIf((o) => o.alt)