From 1d8d5f51d9c5cc0f2c78478eaeab800492c7a48b Mon Sep 17 00:00:00 2001 From: yyhuni Date: Tue, 6 Jan 2026 17:08:51 +0800 Subject: [PATCH] feat(blacklist): add mock data and service integration for blacklist management - Create new blacklist mock data module with global and target-specific patterns - Add mock functions for getting and updating global blacklist rules - Add mock functions for getting and updating target-specific blacklist rules - Integrate mock blacklist endpoints into global-blacklist.service.ts - Integrate mock blacklist endpoints into target.service.ts - Export blacklist mock functions from main mock index - Enable testing of blacklist management UI without backend API --- frontend/mock/data/blacklist.ts | 69 +++++++++++++++++++ frontend/mock/index.ts | 8 +++ frontend/services/global-blacklist.service.ts | 9 +++ frontend/services/target.service.ts | 11 ++- 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 frontend/mock/data/blacklist.ts diff --git a/frontend/mock/data/blacklist.ts b/frontend/mock/data/blacklist.ts new file mode 100644 index 00000000..dd34c259 --- /dev/null +++ b/frontend/mock/data/blacklist.ts @@ -0,0 +1,69 @@ +/** + * Blacklist Mock Data + * + * 黑名单规则 mock 数据 + * - 全局黑名单:适用于所有 Target + * - Target 黑名单:仅适用于特定 Target + */ + +export interface BlacklistResponse { + patterns: string[] +} + +export interface UpdateBlacklistRequest { + patterns: string[] +} + +// 全局黑名单 mock 数据 +let mockGlobalBlacklistPatterns: string[] = [ + '*.gov', + '*.edu', + '*.mil', + '10.0.0.0/8', + '172.16.0.0/12', + '192.168.0.0/16', +] + +// Target 黑名单 mock 数据(按 targetId 存储) +const mockTargetBlacklistPatterns: Record = { + 1: ['*.internal.example.com', '192.168.1.0/24'], + 2: ['cdn.example.com', '*.cdn.*'], +} + +/** + * 获取全局黑名单 + */ +export function getMockGlobalBlacklist(): BlacklistResponse { + return { + patterns: [...mockGlobalBlacklistPatterns], + } +} + +/** + * 更新全局黑名单(全量替换) + */ +export function updateMockGlobalBlacklist(data: UpdateBlacklistRequest): BlacklistResponse { + mockGlobalBlacklistPatterns = [...data.patterns] + return { + patterns: mockGlobalBlacklistPatterns, + } +} + +/** + * 获取 Target 黑名单 + */ +export function getMockTargetBlacklist(targetId: number): BlacklistResponse { + return { + patterns: mockTargetBlacklistPatterns[targetId] ? [...mockTargetBlacklistPatterns[targetId]] : [], + } +} + +/** + * 更新 Target 黑名单(全量替换) + */ +export function updateMockTargetBlacklist(targetId: number, data: UpdateBlacklistRequest): BlacklistResponse { + mockTargetBlacklistPatterns[targetId] = [...data.patterns] + return { + patterns: mockTargetBlacklistPatterns[targetId], + } +} diff --git a/frontend/mock/index.ts b/frontend/mock/index.ts index 97e3a5b2..07cd437e 100644 --- a/frontend/mock/index.ts +++ b/frontend/mock/index.ts @@ -182,3 +182,11 @@ export { getMockNotificationSettings, updateMockNotificationSettings, } from './data/notification-settings' + +// Blacklist +export { + getMockGlobalBlacklist, + updateMockGlobalBlacklist, + getMockTargetBlacklist, + updateMockTargetBlacklist, +} from './data/blacklist' diff --git a/frontend/services/global-blacklist.service.ts b/frontend/services/global-blacklist.service.ts index bbef0948..9e3190cf 100644 --- a/frontend/services/global-blacklist.service.ts +++ b/frontend/services/global-blacklist.service.ts @@ -1,4 +1,5 @@ import { api } from '@/lib/api-client' +import { USE_MOCK, mockDelay, getMockGlobalBlacklist, updateMockGlobalBlacklist } from '@/mock' export interface GlobalBlacklistResponse { patterns: string[] @@ -12,6 +13,10 @@ export interface UpdateGlobalBlacklistRequest { * Get global blacklist rules */ export async function getGlobalBlacklist(): Promise { + if (USE_MOCK) { + await mockDelay() + return getMockGlobalBlacklist() + } const res = await api.get('/blacklist/rules/') return res.data } @@ -20,6 +25,10 @@ export async function getGlobalBlacklist(): Promise { * Update global blacklist rules (full replace) */ export async function updateGlobalBlacklist(data: UpdateGlobalBlacklistRequest): Promise { + if (USE_MOCK) { + await mockDelay() + return updateMockGlobalBlacklist(data) + } const res = await api.put('/blacklist/rules/', data) return res.data } diff --git a/frontend/services/target.service.ts b/frontend/services/target.service.ts index e287151c..d8a3e3cc 100644 --- a/frontend/services/target.service.ts +++ b/frontend/services/target.service.ts @@ -12,7 +12,7 @@ import type { BatchCreateTargetsRequest, BatchCreateTargetsResponse, } from '@/types/target.types' -import { USE_MOCK, mockDelay, getMockTargets, getMockTargetById } from '@/mock' +import { USE_MOCK, mockDelay, getMockTargets, getMockTargetById, getMockTargetBlacklist, updateMockTargetBlacklist } from '@/mock' /** * Get all targets list (paginated) @@ -163,6 +163,10 @@ export async function getTargetEndpoints( * Get target's blacklist rules */ export async function getTargetBlacklist(id: number): Promise<{ patterns: string[] }> { + if (USE_MOCK) { + await mockDelay() + return getMockTargetBlacklist(id) + } const response = await api.get<{ patterns: string[] }>(`/targets/${id}/blacklist/`) return response.data } @@ -174,6 +178,11 @@ export async function updateTargetBlacklist( id: number, patterns: string[] ): Promise<{ count: number }> { + if (USE_MOCK) { + await mockDelay() + const result = updateMockTargetBlacklist(id, { patterns }) + return { count: result.patterns.length } + } const response = await api.put<{ count: number }>(`/targets/${id}/blacklist/`, { patterns }) return response.data }