feat: add friend add and curfew controls
This commit is contained in:
@@ -211,6 +211,99 @@ func (c *cConfig) ModerationPolicy(ctx context.Context, req *api.ModerationPolic
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (c *cConfig) SecurityPolicy(ctx context.Context, req *api.SecurityPolicyReq) (res *api.SecurityPolicyRes, err error) {
|
||||
tenant, err := getTenant(ctx, dao.ImTenant.Columns().Code, strings.TrimSpace(req.Code))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &api.SecurityPolicyRes{
|
||||
TenantID: tenant.Id,
|
||||
TenantCode: tenant.Code,
|
||||
GlobalFriendEnabled: true,
|
||||
FriendDisabledPolicy: map[string]interface{}{},
|
||||
MessageCurfewEnabled: false,
|
||||
CurfewRules: []*api.SecurityCurfewRuleRes{},
|
||||
}
|
||||
columns := dao.ImSecurityPolicy.Columns()
|
||||
record, err := imtenant.RegistryDB().Model(dao.ImSecurityPolicy.Table()).Safe().Ctx(ctx).
|
||||
Fields(columns.Id, columns.PolicyVersion, columns.GlobalFriendEnabled, "CAST("+columns.FriendDisabledPolicy+" AS CHAR) friend_disabled_policy", columns.MessageCurfewEnabled).
|
||||
Where(columns.TenantId, tenant.Id).Where(columns.PublishStatus, consts.ImSecurityPublishPublished).
|
||||
WhereNull(columns.DeletedAt).OrderDesc(columns.PolicyVersion).One()
|
||||
if err != nil {
|
||||
return nil, gerror.Wrap(err, "获取商户安全策略失败")
|
||||
}
|
||||
if record.IsEmpty() {
|
||||
return res, nil
|
||||
}
|
||||
policyID := record[columns.Id].Int64()
|
||||
res.PolicyVersion = record[columns.PolicyVersion].Uint()
|
||||
res.GlobalFriendEnabled = record[columns.GlobalFriendEnabled].Int() == 1
|
||||
res.MessageCurfewEnabled = record[columns.MessageCurfewEnabled].Int() == 1
|
||||
if raw := strings.TrimSpace(record["friend_disabled_policy"].String()); raw != "" && raw != "null" {
|
||||
_ = json.Unmarshal([]byte(raw), &res.FriendDisabledPolicy)
|
||||
}
|
||||
ruleColumns := dao.ImMessageCurfewRules.Columns()
|
||||
var rows []struct {
|
||||
RuleCode string `json:"rule_code"`
|
||||
RuleName string `json:"rule_name"`
|
||||
DateType string `json:"date_type"`
|
||||
CustomDates string `json:"custom_dates"`
|
||||
Weekdays string `json:"weekdays"`
|
||||
Timezone string `json:"timezone"`
|
||||
StartTime string `json:"start_time"`
|
||||
EndTime string `json:"end_time"`
|
||||
Scope string `json:"scope"`
|
||||
WhitelistUserIds string `json:"whitelist_user_ids"`
|
||||
WhitelistGroupIds string `json:"whitelist_group_ids"`
|
||||
Message string `json:"message"`
|
||||
Status int `json:"status"`
|
||||
Sort int `json:"sort"`
|
||||
}
|
||||
if err = imtenant.RegistryDB().Model(dao.ImMessageCurfewRules.Table()).Safe().Ctx(ctx).
|
||||
Fields(ruleColumns.RuleCode, ruleColumns.RuleName, ruleColumns.DateType, "CAST("+ruleColumns.CustomDates+" AS CHAR) custom_dates", "CAST("+ruleColumns.Weekdays+" AS CHAR) weekdays", ruleColumns.Timezone, "TIME_FORMAT("+ruleColumns.StartTime+",'%H:%i') start_time", "TIME_FORMAT("+ruleColumns.EndTime+",'%H:%i') end_time", ruleColumns.Scope, "CAST("+ruleColumns.WhitelistUserIds+" AS CHAR) whitelist_user_ids", "CAST("+ruleColumns.WhitelistGroupIds+" AS CHAR) whitelist_group_ids", ruleColumns.Message, ruleColumns.Status, ruleColumns.Sort).
|
||||
Where(ruleColumns.PolicyId, policyID).Where(ruleColumns.Status, consts.StatusEnabled).
|
||||
WhereNull(ruleColumns.DeletedAt).OrderAsc(ruleColumns.Sort).OrderAsc(ruleColumns.Id).Scan(&rows); err != nil {
|
||||
return nil, gerror.Wrap(err, "获取商户宵禁规则失败")
|
||||
}
|
||||
for _, row := range rows {
|
||||
res.CurfewRules = append(res.CurfewRules, &api.SecurityCurfewRuleRes{
|
||||
RuleCode: row.RuleCode,
|
||||
RuleName: row.RuleName,
|
||||
DateType: row.DateType,
|
||||
CustomDates: parseStringArray(row.CustomDates),
|
||||
Weekdays: parseIntArray(row.Weekdays),
|
||||
Timezone: row.Timezone,
|
||||
StartTime: row.StartTime,
|
||||
EndTime: row.EndTime,
|
||||
Scope: row.Scope,
|
||||
WhitelistUserIds: parseStringArray(row.WhitelistUserIds),
|
||||
WhitelistGroupIds: parseStringArray(row.WhitelistGroupIds),
|
||||
Message: row.Message,
|
||||
Status: row.Status,
|
||||
Sort: row.Sort,
|
||||
})
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func parseStringArray(raw string) []string {
|
||||
values := []string{}
|
||||
if strings.TrimSpace(raw) == "" {
|
||||
return values
|
||||
}
|
||||
_ = json.Unmarshal([]byte(raw), &values)
|
||||
return values
|
||||
}
|
||||
|
||||
func parseIntArray(raw string) []int {
|
||||
values := []int{}
|
||||
if strings.TrimSpace(raw) == "" {
|
||||
return values
|
||||
}
|
||||
_ = json.Unmarshal([]byte(raw), &values)
|
||||
return values
|
||||
}
|
||||
|
||||
func (c *cConfig) SensitiveWords(ctx context.Context, req *api.SensitiveWordsReq) (res *api.SensitiveWordsRes, err error) {
|
||||
tenant, err := getTenant(ctx, dao.ImTenant.Columns().Code, strings.TrimSpace(req.Code))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user