feat(api, web): implement policy mode management for agents and rules
- Added support for policy modes ('blacklist' and 'whitelist') in agent and policy set management.
- Updated API endpoints to handle policy mode during agent assignment and rule operations.
- Enhanced the web UI to display and manage policy modes for agents and rules, ensuring all assigned sets share a consistent mode.
- Introduced new validation to enforce single policy mode across assigned sets for agents.
- Improved error handling for policy mode conflicts and updated documentation accordingly.
Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -61,6 +61,7 @@ export const policyRuleSchema = z.object({
|
||||
set_id: z.string(),
|
||||
priority: z.number().int(),
|
||||
action: policyActionSchema,
|
||||
enabled: z.boolean().optional().default(true),
|
||||
list_id: z.string().nullable().optional(),
|
||||
cidr: z.string().nullable().optional(),
|
||||
hostname: z.string().nullable().optional(),
|
||||
@@ -75,6 +76,7 @@ export const policySetSchema = z.object({
|
||||
name: z.string(),
|
||||
description: z.string().nullable().optional(),
|
||||
enabled: z.boolean(),
|
||||
policy_mode: policyModeSchema,
|
||||
rules_count: z.number().int().optional(),
|
||||
agents_count: z.number().int().optional(),
|
||||
created_at: z.string(),
|
||||
@@ -102,19 +104,22 @@ export const createPolicySetBodySchema = z.object({
|
||||
name: z.string().min(1),
|
||||
description: z.string().nullable().optional(),
|
||||
enabled: z.boolean().optional().default(true),
|
||||
policy_mode: policyModeSchema.optional().default('blacklist'),
|
||||
})
|
||||
|
||||
export const patchPolicySetBodySchema = z.object({
|
||||
name: z.string().min(1).optional(),
|
||||
description: z.string().nullable().optional(),
|
||||
enabled: z.boolean().optional(),
|
||||
policy_mode: policyModeSchema.optional(),
|
||||
})
|
||||
|
||||
export const createPolicyRuleBodySchema = z
|
||||
.object({
|
||||
set_id: z.string().min(1),
|
||||
priority: z.number().int().min(1).max(10000),
|
||||
priority: z.number().int().min(1).max(10000).optional(),
|
||||
action: policyActionSchema,
|
||||
enabled: z.boolean().optional().default(true),
|
||||
list_id: z.string().nullable().optional(),
|
||||
cidr: z.string().nullable().optional(),
|
||||
hostname: z.string().nullable().optional(),
|
||||
@@ -132,6 +137,17 @@ export const createPolicyRuleBodySchema = z
|
||||
}
|
||||
})
|
||||
|
||||
export const patchPolicyRuleBodySchema = z.object({
|
||||
enabled: z.boolean().optional(),
|
||||
action: policyActionSchema.optional(),
|
||||
comment: z.string().nullable().optional(),
|
||||
priority: z.number().int().min(1).max(10000).optional(),
|
||||
})
|
||||
|
||||
export const reorderPolicyRulesBodySchema = z.object({
|
||||
ordered_ids: z.array(z.string()).min(1),
|
||||
})
|
||||
|
||||
export const putAgentPolicySetsBodySchema = z.object({
|
||||
set_ids: z.array(z.string()),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user