| 248 | } |
| 249 | |
| 250 | func UpdateToken(c *gin.Context) { |
| 251 | userId := c.GetInt("id") |
| 252 | statusOnly := c.Query("status_only") |
| 253 | token := model.Token{} |
| 254 | err := c.ShouldBindJSON(&token) |
| 255 | if err != nil { |
| 256 | common.ApiError(c, err) |
| 257 | return |
| 258 | } |
| 259 | if len(token.Name) > 50 { |
| 260 | common.ApiErrorI18n(c, i18n.MsgTokenNameTooLong) |
| 261 | return |
| 262 | } |
| 263 | if !token.UnlimitedQuota { |
| 264 | if token.RemainQuota < 0 { |
| 265 | common.ApiErrorI18n(c, i18n.MsgTokenQuotaNegative) |
| 266 | return |
| 267 | } |
| 268 | maxQuotaValue := int((1000000000 * common.QuotaPerUnit)) |
| 269 | if token.RemainQuota > maxQuotaValue { |
| 270 | common.ApiErrorI18n(c, i18n.MsgTokenQuotaExceedMax, map[string]any{"Max": maxQuotaValue}) |
| 271 | return |
| 272 | } |
| 273 | } |
| 274 | cleanToken, err := model.GetTokenByIds(token.Id, userId) |
| 275 | if err != nil { |
| 276 | common.ApiError(c, err) |
| 277 | return |
| 278 | } |
| 279 | if token.Status == common.TokenStatusEnabled { |
| 280 | if cleanToken.Status == common.TokenStatusExpired && cleanToken.ExpiredTime <= common.GetTimestamp() && cleanToken.ExpiredTime != -1 { |
| 281 | common.ApiErrorI18n(c, i18n.MsgTokenExpiredCannotEnable) |
| 282 | return |
| 283 | } |
| 284 | if cleanToken.Status == common.TokenStatusExhausted && cleanToken.RemainQuota <= 0 && !cleanToken.UnlimitedQuota { |
| 285 | common.ApiErrorI18n(c, i18n.MsgTokenExhaustedCannotEable) |
| 286 | return |
| 287 | } |
| 288 | } |
| 289 | if statusOnly != "" { |
| 290 | cleanToken.Status = token.Status |
| 291 | } else { |
| 292 | // If you add more fields, please also update token.Update() |
| 293 | cleanToken.Name = token.Name |
| 294 | cleanToken.ExpiredTime = token.ExpiredTime |
| 295 | cleanToken.RemainQuota = token.RemainQuota |
| 296 | cleanToken.UnlimitedQuota = token.UnlimitedQuota |
| 297 | cleanToken.ModelLimitsEnabled = token.ModelLimitsEnabled |
| 298 | cleanToken.ModelLimits = token.ModelLimits |
| 299 | cleanToken.AllowIps = token.AllowIps |
| 300 | cleanToken.Group = token.Group |
| 301 | cleanToken.CrossGroupRetry = token.CrossGroupRetry |
| 302 | } |
| 303 | err = cleanToken.Update() |
| 304 | if err != nil { |
| 305 | common.ApiError(c, err) |
| 306 | return |
| 307 | } |