validate_dingtalk.go 1.1 KB

123456789101112131415161718192021222324252627282930
  1. // Package config 包含钉钉连接配置的校验逻辑。
  2. //
  3. // internal_only 模式安全模型(方案 A):
  4. // 不再要求 admin 填写 InternalCorpID 做二次 corpID 比对。
  5. // 安全边界由钉钉"企业内部应用"类型本身保证——只有应用所属企业的员工才能完成 OAuth,
  6. // 因此 ValidateDingTalkConfig 只要求 app_type=internal(V1),不再要求 InternalCorpID 非空(原 V3 已删除)。
  7. // InternalCorpID 字段保留,admin 可选填;若填写,checkDingTalkCorpAllowed 不会使用它做约束。
  8. package config
  9. import "errors"
  10. var (
  11. ErrDingTalkV1AppTypeMismatch = errors.New("dingtalk: internal_only requires app_type=internal")
  12. ErrDingTalkV4InvalidAppKind = errors.New("dingtalk: dingtalk_app_kind must be internal_app")
  13. )
  14. func ValidateDingTalkConfig(cfg DingTalkConnectConfig) error {
  15. if !cfg.Enabled {
  16. return nil
  17. }
  18. if cfg.DingTalkAppKind != "internal_app" {
  19. return ErrDingTalkV4InvalidAppKind
  20. }
  21. if cfg.CorpRestrictionPolicy == "internal_only" {
  22. if cfg.AppType != "internal" {
  23. return ErrDingTalkV1AppTypeMismatch
  24. }
  25. }
  26. return nil
  27. }