feat: enforce tenant content moderation
This commit is contained in:
@@ -170,6 +170,9 @@ type AdminInternalConfigProvider interface {
|
||||
RegistrationSMSEnabled() (bool, error)
|
||||
ThirdPartyConfig(group string, keys ...string) (map[string]string, error)
|
||||
LatestAppRelease(platform, channel string) (*types.AppRelease, error)
|
||||
ModerationProvider() (*types.ModerationProviderConfig, error)
|
||||
ModerationPolicy(tenantCode string) (*types.ModerationPolicy, error)
|
||||
SensitiveWords(tenantCode string) (*types.SensitiveWordSet, error)
|
||||
}
|
||||
|
||||
var adminInternalConfigProvider AdminInternalConfigProvider
|
||||
@@ -178,6 +181,60 @@ func SetAdminInternalConfigProvider(provider AdminInternalConfigProvider) {
|
||||
adminInternalConfigProvider = provider
|
||||
}
|
||||
|
||||
type ModerationConfigPersistenceInterface interface {
|
||||
Provider() (*types.ModerationProviderConfig, error)
|
||||
Policy(tenantCode string) (*types.ModerationPolicy, error)
|
||||
Words(tenantCode string) (*types.SensitiveWordSet, error)
|
||||
}
|
||||
|
||||
type moderationConfigMapper struct{}
|
||||
|
||||
var ModerationConfig ModerationConfigPersistenceInterface = moderationConfigMapper{}
|
||||
|
||||
func (moderationConfigMapper) Provider() (*types.ModerationProviderConfig, error) {
|
||||
if value, ok := moderationProviderCache.get("provider"); ok {
|
||||
return value, nil
|
||||
}
|
||||
if adminInternalConfigProvider == nil {
|
||||
return nil, types.ErrUnsupported
|
||||
}
|
||||
value, err := adminInternalConfigProvider.ModerationProvider()
|
||||
if err == nil && value != nil {
|
||||
moderationProviderCache.set("provider", value)
|
||||
}
|
||||
return value, err
|
||||
}
|
||||
|
||||
func (moderationConfigMapper) Policy(tenantCode string) (*types.ModerationPolicy, error) {
|
||||
tenantCode = strings.TrimSpace(tenantCode)
|
||||
if value, ok := moderationPolicyCache.get(tenantCode); ok {
|
||||
return value, nil
|
||||
}
|
||||
if adminInternalConfigProvider == nil {
|
||||
return nil, types.ErrUnsupported
|
||||
}
|
||||
value, err := adminInternalConfigProvider.ModerationPolicy(tenantCode)
|
||||
if err == nil && value != nil {
|
||||
moderationPolicyCache.set(tenantCode, value)
|
||||
}
|
||||
return value, err
|
||||
}
|
||||
|
||||
func (moderationConfigMapper) Words(tenantCode string) (*types.SensitiveWordSet, error) {
|
||||
tenantCode = strings.TrimSpace(tenantCode)
|
||||
if value, ok := moderationWordsCache.get(tenantCode); ok {
|
||||
return value, nil
|
||||
}
|
||||
if adminInternalConfigProvider == nil {
|
||||
return nil, types.ErrUnsupported
|
||||
}
|
||||
value, err := adminInternalConfigProvider.SensitiveWords(tenantCode)
|
||||
if err == nil && value != nil {
|
||||
moderationWordsCache.set(tenantCode, value)
|
||||
}
|
||||
return value, err
|
||||
}
|
||||
|
||||
// RegistrationConfigPersistenceInterface exposes global registration policy.
|
||||
type RegistrationConfigPersistenceInterface interface {
|
||||
SMSEnabled() (bool, error)
|
||||
|
||||
Reference in New Issue
Block a user