Skip to content

feat(cyberhub): 支持加载待审核 / 草稿 / 未启用的 POC 与指纹#13

Open
wuchulonly wants to merge 1 commit into
masterfrom
feat/export-status-filter
Open

feat(cyberhub): 支持加载待审核 / 草稿 / 未启用的 POC 与指纹#13
wuchulonly wants to merge 1 commit into
masterfrom
feat/export-status-filter

Conversation

@wuchulonly
Copy link
Copy Markdown
Contributor

Summary

EN TL;DR: ExportFilter now carries Statuses + ReviewStatus, transparently applied to both POC and fingerprint exports. Old callers see no behavior change; new callers can opt in to pending/draft/inactive rules via WithStatuses(...) / WithReviewStatus(...).

中文:为客户端提供显式加载"待审核 / 草稿 / 未启用"规则的能力。

  • 老 SDK 调用方(不动 filter)行为完全不变 —— POC 仍只拿 active,指纹仍走后端默认语义。
  • 新调用方通过 ExportFilter.WithStatuses(...) / WithReviewStatus(...) 显式 opt-in,即可加载 pending / draft / inactive 等规则。

改动要点

POC 端

  • 去掉 ExportPOCs / ExportPOCsByNames 硬编码的 status=active;
  • 新增 applyDefaultPOCStatus,在调用方未指定任何状态条件(Statuses / status / review_status 全空)时兜底 status=active,保持向后兼容;
  • ExportPOCsByNames 保留原签名(避免破坏潜在的接口满足关系),新增 ExportPOCsByNamesWithFilter(ctx, names, filter) 承载 filter。

指纹端

  • ExportFingerprints 本就不强制 active,新字段经由共享的 applyFilterParams 自动透传,fingers.Engine 调用方零额外改动;
  • 后端对指纹的默认是"非 deleted"语义;草稿与空 pending 仍会被后端 shouldHideDraftOnlyFingerprints 隐去,客户端如需拿到要显式 WithStatuses("pending") 等。

ExportFilter

  • Statuses []string / ReviewStatus string 字段 + 链式 WithStatuses(...) / WithReviewStatus(...) 方法;
  • dedup 写法与现有 Tags / Sources 一致。

合法值

  • Statuses: active / pending / draft / inactive / deprecated
  • ReviewStatus: pending / approved / rejected / draft / none

杂项

  • FingerprintResponse.IsActive() 标记为 Deprecated(保留方法体避免源码级 breaking change),并加注解释 Status 不在 export payload 中;
  • 新增 examples/pending_pocs/examples/pending_fingerprints/ 演示客户端两类用法;
  • examples/README.md 增补两节,说明 POC 与指纹默认行为的差异。

客户端示例

// 加载待审核 + 草稿 POC
filter := cyberhub.NewExportFilter().WithStatuses("active", "pending", "draft")
config := neutron.NewConfig().WithCyberhub(url, key)
config.ExportFilter = filter
engine, _ := neutron.NewEngine(config)

// 只看正在待审核工单的指纹
filter := cyberhub.NewExportFilter().WithReviewStatus("pending")
config := fingers.NewConfig().WithCyberhub(url, key)
config.ExportFilter = filter
engine, _ := fingers.NewEngine(config)

// 按名称拉 pending POC(新方法)
client.ExportPOCsByNamesWithFilter(ctx, []string{"some-poc"},
    cyberhub.NewExportFilter().WithStatuses("pending"))

Test plan

  • pkg/cyberhub 单测全绿(11 个 test + 12 个 sub-test,含 httptest mock 端到端断言 URL query)
  • examples/pending_pocs / examples/pending_fingerprints 编译通过
  • 活体跑过 6 条代码路径(对 Cyberhub backend total 全部对齐):
    • ExportPOCs(nil filter) → 1(兜底 active)
    • ExportPOCsByNames(name) 默认 → 1(兜底 active)
    • ExportPOCsByNames(pending POC) 默认 → 0(预期,兜底 active 过滤掉)
    • ExportPOCsByNamesWithFilter(+ Statuses=pending) → 1(新方法走 filter)
    • ExportPOCs(WithStatuses=pending) → 956(等于后端 total)
    • ExportFingerprints 默认 → 155,IsActive() 仍可调
  • examples/pending_pocs × 3 模式 + examples/pending_fingerprints × 3 模式全部对齐基线(1 / 767 / 766 与 155 / 5496 / 5491)

兼容性

  • 接口签名:ExportPOCsByNames 不变。新方法 ExportPOCsByNamesWithFilter 是新增 API。
  • 默认行为:任何"原本不传 filter"的调用方,POC 仍只拿到 active;指纹仍走后端默认。
  • FingerprintResponse.IsActive():保留为 Deprecated,源码级兼容。

🤖 Generated with Claude Code

…portFilter

EN TL;DR: ExportFilter now carries Statuses + ReviewStatus, transparently
applied to both POC and fingerprint exports. Old callers see no behavior
change; new callers can opt in to pending/draft/inactive rules via
WithStatuses(...) / WithReviewStatus(...).

为客户端提供显式加载"待审核 / 草稿 / 未启用"规则的能力。

POC 端:
- 去掉 ExportPOCs / ExportPOCsByNames 硬编码的 status=active;
- 新增 applyDefaultPOCStatus 在调用方未指定任何状态条件(Statuses /
  status / review_status 全空)时兜底 status=active,保持老 SDK 调用
  行为不变;
- ExportPOCsByNames 保留原签名(避免破坏潜在的接口满足关系),新增
  ExportPOCsByNamesWithFilter(ctx, names, filter) 承载 filter;
- ExportFilter 加 Statuses / ReviewStatus 字段 + 链式 WithStatuses /
  WithReviewStatus 方法(dedup 写法与 Tags/Sources 一致)。

指纹端:
- ExportFingerprints 本来就不强制 active,因此新字段经由共享的
  applyFilterParams 自动透传,fingers.Engine 调用方零额外改动;
- 后端默认对指纹是"非 deleted"语义;草稿与空 pending 仍会被后端
  shouldHideDraftOnlyFingerprints 隐去,客户端如需拿到要显式
  WithStatuses("pending") 等。

合法值:
- Statuses: active / pending / draft / inactive / deprecated
- ReviewStatus: pending / approved / rejected / draft / none

杂项:
- FingerprintResponse.IsActive() 标记为 Deprecated(保留方法体避免源
  码级 breaking change),并加注解释 Status 不在 export payload 中;
- 新增 examples/pending_pocs 和 examples/pending_fingerprints,演示
  客户端两类用法;
- examples/README.md 增补两节,说明 POC 与指纹默认行为差异。

验证:
- pkg/cyberhub 单测全绿(含 4 个新增 sub-test + httptest mock 端到
  端断言 URL query 形态);
- 活体跑过 6 条代码路径(含 ExportPOCs nil filter、ExportPOCsByNames
  默认 + WithFilter、显式 WithStatuses 覆盖、ExportFingerprints 默
  认 + IsActive() 仍可调),数据与后端 total 对齐。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant