From 8ad4ea0aa6ba2884212a296169c98a6cca2def53 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Thu, 10 Jul 2025 16:26:22 +0330 Subject: [PATCH] fix: prevent danakcorp.com domain to register --- src/common/enums/message.enum.ts | 1 + src/modules/domains/services/dns.service.ts | 2 +- src/modules/domains/services/domains.service.ts | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 3812ea9..49feb8c 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -393,6 +393,7 @@ export const enum DomainMessage { RECORD_PENDING_VERIFICATION_DETAIL = "رکورد [type] برای [name] هنوز در انتظار تایید است. لطفا مطمئن شوید که انتشار DNS کامل شده است.", RECORD_DESCRIPTION_EMAIL_FUNCTIONALITY = "رکورد [type] برای عملکرد ایمیل", BUSINESS_ALREADY_HAS_DOMAIN = "این کسب و کار قبلا دامنه ای دارد", + CAN_NOT_USE_THIS_DOMAIN = "این دامنه نمیتواند ثبت شود", } export const enum MailServerMessage { diff --git a/src/modules/domains/services/dns.service.ts b/src/modules/domains/services/dns.service.ts index eed6afe..b177ddc 100644 --- a/src/modules/domains/services/dns.service.ts +++ b/src/modules/domains/services/dns.service.ts @@ -21,7 +21,7 @@ export class DnsService { private readonly mailServerDomain: string = "mail.danakcorp.com"; private readonly serverDomain: string = "danakcorp.com"; - private readonly spfRecord: string = `v=spf1 mx include:${this.serverDomain} ~all`; + private readonly spfRecord: string = `v=spf1 a mx include:${this.serverDomain} ~all`; // private readonly dmarcRecord: string = `v=DMARC1; p=quarantine; rua=mailto:dmarc@${this.serverDomain}; ruf=mailto:dmarc@${this.serverDomain}`; private readonly resolveTxt = promisify(dns.resolveTxt); diff --git a/src/modules/domains/services/domains.service.ts b/src/modules/domains/services/domains.service.ts index 3253014..d0c777e 100644 --- a/src/modules/domains/services/domains.service.ts +++ b/src/modules/domains/services/domains.service.ts @@ -18,6 +18,7 @@ import { DomainRepository } from "../repositories/domain.repository"; @Injectable() export class DomainsService { private readonly logger = new Logger(DomainsService.name); + private readonly businessDomain = "danakcorp.com"; constructor( private readonly domainRepository: DomainRepository, @@ -33,6 +34,9 @@ export class DomainsService { async createDomain(createDomainDto: CreateDomainDto, businessId: string) { const { name, notes } = createDomainDto; + // security check + if (name.toLowerCase() === this.businessDomain) throw new BadRequestException(DomainMessage.CAN_NOT_USE_THIS_DOMAIN); + const existBusinessDomain = await this.domainRepository.findOne({ business: { id: businessId }, deletedAt: null }); if (existBusinessDomain) throw new BadRequestException(DomainMessage.BUSINESS_ALREADY_HAS_DOMAIN);