Fix channel model length issue
Fixes #691 --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/Calcium-Ion/new-api/issues/691?shareId=XXXX-XXXX-XXXX-XXXX).
This commit is contained in:
@@ -274,6 +274,17 @@ func AddChannel(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
localChannel := channel
|
localChannel := channel
|
||||||
localChannel.Key = key
|
localChannel.Key = key
|
||||||
|
// Validate the length of the model name
|
||||||
|
models := strings.Split(localChannel.Models, ",")
|
||||||
|
for _, model := range models {
|
||||||
|
if len(model) > 256 {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"success": false,
|
||||||
|
"message": fmt.Sprintf("模型名称过长: %s", model),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
channels = append(channels, localChannel)
|
channels = append(channels, localChannel)
|
||||||
}
|
}
|
||||||
err = model.BatchInsertChannels(channels)
|
err = model.BatchInsertChannels(channels)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
type Ability struct {
|
type Ability struct {
|
||||||
Group string `json:"group" gorm:"type:varchar(64);primaryKey;autoIncrement:false"`
|
Group string `json:"group" gorm:"type:varchar(64);primaryKey;autoIncrement:false"`
|
||||||
Model string `json:"model" gorm:"type:varchar(64);primaryKey;autoIncrement:false"`
|
Model string `json:"model" gorm:"type:varchar(256);primaryKey;autoIncrement:false"`
|
||||||
ChannelId int `json:"channel_id" gorm:"primaryKey;autoIncrement:false;index"`
|
ChannelId int `json:"channel_id" gorm:"primaryKey;autoIncrement:false;index"`
|
||||||
Enabled bool `json:"enabled"`
|
Enabled bool `json:"enabled"`
|
||||||
Priority *int64 `json:"priority" gorm:"bigint;default:0;index"`
|
Priority *int64 `json:"priority" gorm:"bigint;default:0;index"`
|
||||||
|
|||||||
180
model/cache.go
180
model/cache.go
@@ -14,102 +14,102 @@ import (
|
|||||||
//func CacheGetUserGroup(id int) (group string, err error) {
|
//func CacheGetUserGroup(id int) (group string, err error) {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return GetUserGroup(id)
|
// return GetUserGroup(id)
|
||||||
// }
|
// }
|
||||||
// group, err = common.RedisGet(fmt.Sprintf("user_group:%d", id))
|
// group, err = common.RedisGet(fmt.Sprintf("user_group:%d", id))
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// group, err = GetUserGroup(id)
|
// group, err = GetUserGroup(id)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return "", err
|
// return "", err
|
||||||
// }
|
// }
|
||||||
// err = common.RedisSet(fmt.Sprintf("user_group:%d", id), group, time.Duration(constant.UserId2GroupCacheSeconds)*time.Second)
|
// err = common.RedisSet(fmt.Sprintf("user_group:%d", id), group, time.Duration(constant.UserId2GroupCacheSeconds)*time.Second)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// common.SysError("Redis set user group error: " + err.Error())
|
// common.SysError("Redis set user group error: " + err.Error())
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// return group, err
|
// return group, err
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func CacheGetUsername(id int) (username string, err error) {
|
//func CacheGetUsername(id int) (username string, err error) {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return GetUsernameById(id)
|
// return GetUsernameById(id)
|
||||||
// }
|
// }
|
||||||
// username, err = common.RedisGet(fmt.Sprintf("user_name:%d", id))
|
// username, err = common.RedisGet(fmt.Sprintf("user_name:%d", id))
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// username, err = GetUsernameById(id)
|
// username, err = GetUsernameById(id)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return "", err
|
// return "", err
|
||||||
// }
|
// }
|
||||||
// err = common.RedisSet(fmt.Sprintf("user_name:%d", id), username, time.Duration(constant.UserId2GroupCacheSeconds)*time.Second)
|
// err = common.RedisSet(fmt.Sprintf("user_name:%d", id), username, time.Duration(constant.UserId2GroupCacheSeconds)*time.Second)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// common.SysError("Redis set user group error: " + err.Error())
|
// common.SysError("Redis set user group error: " + err.Error())
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// return username, err
|
// return username, err
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func CacheGetUserQuota(id int) (quota int, err error) {
|
//func CacheGetUserQuota(id int) (quota int, err error) {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return GetUserQuota(id)
|
// return GetUserQuota(id)
|
||||||
// }
|
// }
|
||||||
// quotaString, err := common.RedisGet(fmt.Sprintf("user_quota:%d", id))
|
// quotaString, err := common.RedisGet(fmt.Sprintf("user_quota:%d", id))
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// quota, err = GetUserQuota(id)
|
// quota, err = GetUserQuota(id)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return 0, err
|
// return 0, err
|
||||||
// }
|
// }
|
||||||
// return quota, nil
|
// return quota, nil
|
||||||
// }
|
// }
|
||||||
// quota, err = strconv.Atoi(quotaString)
|
// quota, err = strconv.Atoi(quotaString)
|
||||||
// return quota, nil
|
// return quota, nil
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func CacheUpdateUserQuota(id int) error {
|
//func CacheUpdateUserQuota(id int) error {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return nil
|
// return nil
|
||||||
// }
|
// }
|
||||||
// quota, err := GetUserQuota(id)
|
// quota, err := GetUserQuota(id)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return err
|
// return err
|
||||||
// }
|
// }
|
||||||
// return cacheSetUserQuota(id, quota)
|
// return cacheSetUserQuota(id, quota)
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func cacheSetUserQuota(id int, quota int) error {
|
//func cacheSetUserQuota(id int, quota int) error {
|
||||||
// err := common.RedisSet(fmt.Sprintf("user_quota:%d", id), fmt.Sprintf("%d", quota), time.Duration(constant.UserId2QuotaCacheSeconds)*time.Second)
|
// err := common.RedisSet(fmt.Sprintf("user_quota:%d", id), fmt.Sprintf("%d", quota), time.Duration(constant.UserId2QuotaCacheSeconds)*time.Second)
|
||||||
// return err
|
// return err
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func CacheDecreaseUserQuota(id int, quota int) error {
|
//func CacheDecreaseUserQuota(id int, quota int) error {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return nil
|
// return nil
|
||||||
// }
|
// }
|
||||||
// err := common.RedisDecrease(fmt.Sprintf("user_quota:%d", id), int64(quota))
|
// err := common.RedisDecrease(fmt.Sprintf("user_quota:%d", id), int64(quota))
|
||||||
// return err
|
// return err
|
||||||
//}
|
//}
|
||||||
//
|
//
|
||||||
//func CacheIsUserEnabled(userId int) (bool, error) {
|
//func CacheIsUserEnabled(userId int) (bool, error) {
|
||||||
// if !common.RedisEnabled {
|
// if !common.RedisEnabled {
|
||||||
// return IsUserEnabled(userId)
|
// return IsUserEnabled(userId)
|
||||||
// }
|
// }
|
||||||
// enabled, err := common.RedisGet(fmt.Sprintf("user_enabled:%d", userId))
|
// enabled, err := common.RedisGet(fmt.Sprintf("user_enabled:%d", userId))
|
||||||
// if err == nil {
|
// if err == nil {
|
||||||
// return enabled == "1", nil
|
// return enabled == "1", nil
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// userEnabled, err := IsUserEnabled(userId)
|
// userEnabled, err := IsUserEnabled(userId)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// return false, err
|
// return false, err
|
||||||
// }
|
// }
|
||||||
// enabled = "0"
|
// enabled = "0"
|
||||||
// if userEnabled {
|
// if userEnabled {
|
||||||
// enabled = "1"
|
// enabled = "1"
|
||||||
// }
|
// }
|
||||||
// err = common.RedisSet(fmt.Sprintf("user_enabled:%d", userId), enabled, time.Duration(constant.UserId2StatusCacheSeconds)*time.Second)
|
// err = common.RedisSet(fmt.Sprintf("user_enabled:%d", userId), enabled, time.Duration(constant.UserId2StatusCacheSeconds)*time.Second)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// common.SysError("Redis set user enabled error: " + err.Error())
|
// common.SysError("Redis set user enabled error: " + err.Error())
|
||||||
// }
|
// }
|
||||||
// return userEnabled, err
|
// return userEnabled, err
|
||||||
//}
|
//}
|
||||||
|
|
||||||
var group2model2channels map[string]map[string][]*Channel
|
var group2model2channels map[string]map[string][]*Channel
|
||||||
var channelsIDM map[int]*Channel
|
var channelsIDM map[int]*Channel
|
||||||
@@ -181,7 +181,7 @@ func CacheGetRandomSatisfiedChannel(group string, model string, retry int) (*Cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if memory cache is disabled, get channel directly from database
|
// if memory cache is disabled, get channel directly from database
|
||||||
if !common.MemoryCacheEnabled {
|
if (!common.MemoryCacheEnabled) {
|
||||||
return GetRandomSatisfiedChannel(group, model, retry)
|
return GetRandomSatisfiedChannel(group, model, retry)
|
||||||
}
|
}
|
||||||
channelSyncLock.RLock()
|
channelSyncLock.RLock()
|
||||||
|
|||||||
Reference in New Issue
Block a user