(c *gin.Context)
| 175 | } |
| 176 | |
| 177 | func UpdateToken(c *gin.Context) { |
| 178 | userId := c.GetInt("id") |
| 179 | statusOnly := c.Query("status_only") |
| 180 | token := model.Token{} |
| 181 | err := c.ShouldBindJSON(&token) |
| 182 | if err != nil { |
| 183 | common.ApiError(c, err) |
| 184 | return |
| 185 | } |
| 186 | if len(token.Name) > 30 { |
| 187 | c.JSON(http.StatusOK, gin.H{ |
| 188 | "success": false, |
| 189 | "message": "令牌名称过长", |
| 190 | }) |
| 191 | return |
| 192 | } |
| 193 | cleanToken, err := model.GetTokenByIds(token.Id, userId) |
| 194 | if err != nil { |
| 195 | common.ApiError(c, err) |
| 196 | return |
| 197 | } |
| 198 | if token.Status == common.TokenStatusEnabled { |
| 199 | if cleanToken.Status == common.TokenStatusExpired && cleanToken.ExpiredTime <= common.GetTimestamp() && cleanToken.ExpiredTime != -1 { |
| 200 | c.JSON(http.StatusOK, gin.H{ |
| 201 | "success": false, |
| 202 | "message": "令牌已过期,无法启用,请先修改令牌过期时间,或者设置为永不过期", |
| 203 | }) |
| 204 | return |
| 205 | } |
| 206 | if cleanToken.Status == common.TokenStatusExhausted && cleanToken.RemainQuota <= 0 && !cleanToken.UnlimitedQuota { |
| 207 | c.JSON(http.StatusOK, gin.H{ |
| 208 | "success": false, |
| 209 | "message": "令牌可用额度已用尽,无法启用,请先修改令牌剩余额度,或者设置为无限额度", |
| 210 | }) |
| 211 | return |
| 212 | } |
| 213 | } |
| 214 | if statusOnly != "" { |
| 215 | cleanToken.Status = token.Status |
| 216 | } else { |
| 217 | // If you add more fields, please also update token.Update() |
| 218 | cleanToken.Name = token.Name |
| 219 | cleanToken.ExpiredTime = token.ExpiredTime |
| 220 | cleanToken.RemainQuota = token.RemainQuota |
| 221 | cleanToken.UnlimitedQuota = token.UnlimitedQuota |
| 222 | cleanToken.ModelLimitsEnabled = token.ModelLimitsEnabled |
| 223 | cleanToken.ModelLimits = token.ModelLimits |
| 224 | cleanToken.AllowIps = token.AllowIps |
| 225 | cleanToken.Group = token.Group |
| 226 | cleanToken.RateLimitPerMinute = token.RateLimitPerMinute |
| 227 | cleanToken.RateLimitPerDay = token.RateLimitPerDay |
| 228 | cleanToken.ChannelTag = token.ChannelTag |
| 229 | cleanToken.TotalUsageLimit = token.TotalUsageLimit |
| 230 | } |
| 231 | err = cleanToken.Update() |
| 232 | if err != nil { |
| 233 | common.ApiError(c, err) |
| 234 | return |
nothing calls this directly
no test coverage detected