|
@@ -1101,8 +1101,8 @@ func CopyChannel(c *gin.Context) {
|
|
|
// MultiKeyManageRequest represents the request for multi-key management operations
|
|
// MultiKeyManageRequest represents the request for multi-key management operations
|
|
|
type MultiKeyManageRequest struct {
|
|
type MultiKeyManageRequest struct {
|
|
|
ChannelId int `json:"channel_id"`
|
|
ChannelId int `json:"channel_id"`
|
|
|
- Action string `json:"action"` // "disable_key", "enable_key", "delete_disabled_keys", "get_key_status"
|
|
|
|
|
- KeyIndex *int `json:"key_index,omitempty"` // for disable_key and enable_key actions
|
|
|
|
|
|
|
+ Action string `json:"action"` // "disable_key", "enable_key", "delete_key", "delete_disabled_keys", "get_key_status"
|
|
|
|
|
+ KeyIndex *int `json:"key_index,omitempty"` // for disable_key, enable_key, and delete_key actions
|
|
|
Page int `json:"page,omitempty"` // for get_key_status pagination
|
|
Page int `json:"page,omitempty"` // for get_key_status pagination
|
|
|
PageSize int `json:"page_size,omitempty"` // for get_key_status pagination
|
|
PageSize int `json:"page_size,omitempty"` // for get_key_status pagination
|
|
|
Status *int `json:"status,omitempty"` // for get_key_status filtering: 1=enabled, 2=manual_disabled, 3=auto_disabled, nil=all
|
|
Status *int `json:"status,omitempty"` // for get_key_status filtering: 1=enabled, 2=manual_disabled, 3=auto_disabled, nil=all
|
|
@@ -1430,6 +1430,86 @@ func ManageMultiKeys(c *gin.Context) {
|
|
|
})
|
|
})
|
|
|
return
|
|
return
|
|
|
|
|
|
|
|
|
|
+ case "delete_key":
|
|
|
|
|
+ if request.KeyIndex == nil {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{
|
|
|
|
|
+ "success": false,
|
|
|
|
|
+ "message": "未指定要删除的密钥索引",
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ keyIndex := *request.KeyIndex
|
|
|
|
|
+ if keyIndex < 0 || keyIndex >= channel.ChannelInfo.MultiKeySize {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{
|
|
|
|
|
+ "success": false,
|
|
|
|
|
+ "message": "密钥索引超出范围",
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ keys := channel.GetKeys()
|
|
|
|
|
+ var remainingKeys []string
|
|
|
|
|
+ var newStatusList = make(map[int]int)
|
|
|
|
|
+ var newDisabledTime = make(map[int]int64)
|
|
|
|
|
+ var newDisabledReason = make(map[int]string)
|
|
|
|
|
+
|
|
|
|
|
+ newIndex := 0
|
|
|
|
|
+ for i, key := range keys {
|
|
|
|
|
+ // 跳过要删除的密钥
|
|
|
|
|
+ if i == keyIndex {
|
|
|
|
|
+ continue
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ remainingKeys = append(remainingKeys, key)
|
|
|
|
|
+
|
|
|
|
|
+ // 保留其他密钥的状态信息,重新索引
|
|
|
|
|
+ if channel.ChannelInfo.MultiKeyStatusList != nil {
|
|
|
|
|
+ if status, exists := channel.ChannelInfo.MultiKeyStatusList[i]; exists && status != 1 {
|
|
|
|
|
+ newStatusList[newIndex] = status
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if channel.ChannelInfo.MultiKeyDisabledTime != nil {
|
|
|
|
|
+ if t, exists := channel.ChannelInfo.MultiKeyDisabledTime[i]; exists {
|
|
|
|
|
+ newDisabledTime[newIndex] = t
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if channel.ChannelInfo.MultiKeyDisabledReason != nil {
|
|
|
|
|
+ if r, exists := channel.ChannelInfo.MultiKeyDisabledReason[i]; exists {
|
|
|
|
|
+ newDisabledReason[newIndex] = r
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ newIndex++
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if len(remainingKeys) == 0 {
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{
|
|
|
|
|
+ "success": false,
|
|
|
|
|
+ "message": "不能删除最后一个密钥",
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Update channel with remaining keys
|
|
|
|
|
+ channel.Key = strings.Join(remainingKeys, "\n")
|
|
|
|
|
+ channel.ChannelInfo.MultiKeySize = len(remainingKeys)
|
|
|
|
|
+ channel.ChannelInfo.MultiKeyStatusList = newStatusList
|
|
|
|
|
+ channel.ChannelInfo.MultiKeyDisabledTime = newDisabledTime
|
|
|
|
|
+ channel.ChannelInfo.MultiKeyDisabledReason = newDisabledReason
|
|
|
|
|
+
|
|
|
|
|
+ err = channel.Update()
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ common.ApiError(c, err)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ model.InitChannelCache()
|
|
|
|
|
+ c.JSON(http.StatusOK, gin.H{
|
|
|
|
|
+ "success": true,
|
|
|
|
|
+ "message": "密钥已删除",
|
|
|
|
|
+ })
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
case "delete_disabled_keys":
|
|
case "delete_disabled_keys":
|
|
|
keys := channel.GetKeys()
|
|
keys := channel.GetKeys()
|
|
|
var remainingKeys []string
|
|
var remainingKeys []string
|