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