forked from Yara724/api
Fixed resendCarParts label_fa's + OTP
This commit is contained in:
@@ -5,7 +5,9 @@ import {
|
||||
UserAuthErrorCode,
|
||||
throwUserAuthError,
|
||||
} from "src/auth/auth-services/user-auth-error";
|
||||
import { ClaimCase } from "src/claim-request-management/entites/schema/claim-cases.schema";
|
||||
import { ClaimRequestManagementModel } from "src/claim-request-management/entites/schema/claim-request-management.schema";
|
||||
import { normalizeIranMobile } from "src/helpers/iran-mobile";
|
||||
import { BlameRequest } from "src/request-management/entities/schema/blame-cases.schema";
|
||||
import { PartyRole } from "src/request-management/entities/schema/partyRole.enum";
|
||||
import { RequestManagementModel } from "src/request-management/entities/schema/request-management.schema";
|
||||
@@ -20,6 +22,8 @@ export class UserLinkAccessService {
|
||||
private readonly blameRequestModel: Model<BlameRequest>,
|
||||
@InjectModel(ClaimRequestManagementModel.name)
|
||||
private readonly claimRequestManagementModel: Model<ClaimRequestManagementModel>,
|
||||
@InjectModel(ClaimCase.name)
|
||||
private readonly claimCaseModel: Model<ClaimCase>,
|
||||
private readonly userDbService: UserDbService,
|
||||
) {}
|
||||
|
||||
@@ -39,10 +43,12 @@ export class UserLinkAccessService {
|
||||
throwUserAuthError(UserAuthErrorCode.LINK_NOT_FOUND);
|
||||
}
|
||||
|
||||
const normalizedMobile = this.normalizePhone(params.mobile);
|
||||
const normalizedMobile = normalizeIranMobile(params.mobile);
|
||||
if (
|
||||
!normalizedMobile ||
|
||||
!allowedMobiles.some((mobile) => this.normalizePhone(mobile) === normalizedMobile)
|
||||
!allowedMobiles.some(
|
||||
(mobile) => normalizeIranMobile(mobile) === normalizedMobile,
|
||||
)
|
||||
) {
|
||||
throwUserAuthError(UserAuthErrorCode.LINK_MOBILE_MISMATCH);
|
||||
}
|
||||
@@ -58,15 +64,18 @@ export class UserLinkAccessService {
|
||||
const context = this.normalizeContext(linkContext);
|
||||
const allowedMobiles = new Set<string>();
|
||||
|
||||
const [legacyRequest, blameRequest, claimRequest] = await Promise.all([
|
||||
this.requestManagementModel.findById(id).lean().exec(),
|
||||
this.blameRequestModel.findById(id).lean().exec(),
|
||||
this.claimRequestManagementModel.findById(id).lean().exec(),
|
||||
]);
|
||||
const [legacyRequest, blameRequest, legacyClaim, claimCase] =
|
||||
await Promise.all([
|
||||
this.requestManagementModel.findById(id).lean().exec(),
|
||||
this.blameRequestModel.findById(id).lean().exec(),
|
||||
this.claimRequestManagementModel.findById(id).lean().exec(),
|
||||
this.claimCaseModel.findById(id).lean().exec(),
|
||||
]);
|
||||
|
||||
this.addLegacyRequestPhones(allowedMobiles, legacyRequest, context);
|
||||
this.addBlameRequestPhones(allowedMobiles, blameRequest, context);
|
||||
await this.addClaimOwnerPhone(allowedMobiles, claimRequest);
|
||||
await this.addLegacyClaimOwnerPhone(allowedMobiles, legacyClaim);
|
||||
await this.addClaimCaseOwnerPhone(allowedMobiles, claimCase);
|
||||
|
||||
return Array.from(allowedMobiles);
|
||||
}
|
||||
@@ -119,7 +128,7 @@ export class UserLinkAccessService {
|
||||
}
|
||||
}
|
||||
|
||||
private async addClaimOwnerPhone(
|
||||
private async addLegacyClaimOwnerPhone(
|
||||
allowedMobiles: Set<string>,
|
||||
claimRequest: any,
|
||||
) {
|
||||
@@ -146,29 +155,51 @@ export class UserLinkAccessService {
|
||||
_id: new Types.ObjectId(ownerUserIdText),
|
||||
});
|
||||
this.addPhone(allowedMobiles, user?.mobile);
|
||||
this.addPhone(allowedMobiles, user?.username);
|
||||
}
|
||||
}
|
||||
|
||||
/** V2 `claimCases` — token in `/caseClaim?token=...` SMS links. */
|
||||
private async addClaimCaseOwnerPhone(
|
||||
allowedMobiles: Set<string>,
|
||||
claimCase: any,
|
||||
) {
|
||||
if (!claimCase?.owner?.userId) return;
|
||||
|
||||
const ownerUserIdText = String(claimCase.owner.userId);
|
||||
if (claimCase.blameRequestId) {
|
||||
const blameRequest = await this.blameRequestModel
|
||||
.findById(claimCase.blameRequestId)
|
||||
.lean()
|
||||
.exec();
|
||||
const ownerParty = (blameRequest?.parties || []).find(
|
||||
(party: any) =>
|
||||
party?.person?.userId && String(party.person.userId) === ownerUserIdText,
|
||||
);
|
||||
this.addPhone(allowedMobiles, ownerParty?.person?.phoneNumber);
|
||||
}
|
||||
|
||||
if (Types.ObjectId.isValid(ownerUserIdText)) {
|
||||
const user = await this.userDbService.findOne({
|
||||
_id: new Types.ObjectId(ownerUserIdText),
|
||||
});
|
||||
this.addPhone(allowedMobiles, user?.mobile);
|
||||
this.addPhone(allowedMobiles, user?.username);
|
||||
}
|
||||
}
|
||||
|
||||
private addPhone(allowedMobiles: Set<string>, phone?: string) {
|
||||
const normalized = this.normalizePhone(phone);
|
||||
const normalized = normalizeIranMobile(phone);
|
||||
if (normalized) allowedMobiles.add(normalized);
|
||||
}
|
||||
|
||||
private normalizePhone(phone?: string): string | undefined {
|
||||
if (!phone) return undefined;
|
||||
|
||||
const digits = String(phone).replace(/\D/g, "");
|
||||
if (!digits) return undefined;
|
||||
if (digits.startsWith("0098")) return `0${digits.slice(4)}`;
|
||||
if (digits.startsWith("98") && digits.length === 12) {
|
||||
return `0${digits.slice(2)}`;
|
||||
}
|
||||
if (digits.length === 10 && digits.startsWith("9")) return `0${digits}`;
|
||||
return digits;
|
||||
}
|
||||
|
||||
private normalizeContext(linkContext?: string): string | undefined {
|
||||
return linkContext?.trim().toUpperCase();
|
||||
const ctx = linkContext?.trim().toUpperCase();
|
||||
if (!ctx) return undefined;
|
||||
if (ctx === "USER" || ctx === "USER1") return "FIRST";
|
||||
if (ctx === "USER2") return "SECOND";
|
||||
if (ctx === "CASECLAIM" || ctx === "CLAIM") return undefined;
|
||||
return ctx;
|
||||
}
|
||||
|
||||
private matchesRoleContext(context: string, role?: string): boolean {
|
||||
|
||||
Reference in New Issue
Block a user