Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
38c5e0e9
authored
Jul 14, 2025
by
Xyfacai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: format api page query and err result
parent
3338b1f5
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
229 additions
and
643 deletions
+229
-643
common/gin.go
+23
-0
common/page_info.go
+28
-8
controller/channel-billing.go
+6
-17
controller/channel-test.go
+3
-12
controller/channel.go
+23
-86
controller/github.go
+8
-22
controller/linuxdo.go
+4
-16
controller/log.go
+16
-61
controller/midjourney.go
+12
-40
controller/misc.go
+3
-12
controller/oidc.go
+4
-16
controller/option.go
+1
-4
controller/redemption.go
+21
-79
controller/task.go
+13
-42
controller/token.go
+19
-72
controller/usedata.go
+5
-9
controller/user.go
+35
-137
controller/wechat.go
+5
-10
No files found.
common/gin.go
View file @
38c5e0e9
...
...
@@ -4,6 +4,7 @@ import (
"bytes"
"github.com/gin-gonic/gin"
"io"
"net/http"
"one-api/constant"
"strings"
"time"
...
...
@@ -86,3 +87,25 @@ func GetContextKeyType[T any](c *gin.Context, key constant.ContextKey) (T, bool)
var
t
T
return
t
,
false
}
func
ApiError
(
c
*
gin
.
Context
,
err
error
)
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
}
func
ApiErrorMsg
(
c
*
gin
.
Context
,
msg
string
)
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
msg
,
})
}
func
ApiSuccess
(
c
*
gin
.
Context
,
data
any
)
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
data
,
})
}
common/page_info.go
View file @
38c5e0e9
package
common
import
(
"github.com/gin-gonic/gin"
"strconv"
"github.com/gin-gonic/gin"
)
type
PageInfo
struct
{
Page
int
`json:"page"`
// page num 页码
PageSize
int
`json:"page_size"`
// page size 页大小
StartTimestamp
int64
`json:"start_timestamp"`
// 秒级
EndTimestamp
int64
`json:"end_timestamp"`
// 秒级
Total
int
`json:"total"`
// 总条数,后设置
Items
any
`json:"items"`
// 数据,后设置
...
...
@@ -39,11 +38,14 @@ func (p *PageInfo) SetItems(items any) {
p
.
Items
=
items
}
func
GetPageQuery
(
c
*
gin
.
Context
)
(
*
PageInfo
,
error
)
{
func
GetPageQuery
(
c
*
gin
.
Context
)
*
PageInfo
{
pageInfo
:=
&
PageInfo
{}
err
:=
c
.
BindQuery
(
pageInfo
)
if
err
!=
nil
{
return
nil
,
err
// 手动获取并处理每个参数
if
page
,
err
:=
strconv
.
Atoi
(
c
.
Query
(
"page"
));
err
==
nil
{
pageInfo
.
Page
=
page
}
if
pageSize
,
err
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
));
err
==
nil
{
pageInfo
.
PageSize
=
pageSize
}
if
pageInfo
.
Page
<
1
{
// 兼容
...
...
@@ -56,7 +58,25 @@ func GetPageQuery(c *gin.Context) (*PageInfo, error) {
}
if
pageInfo
.
PageSize
==
0
{
// 兼容
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"ps"
))
if
pageSize
!=
0
{
pageInfo
.
PageSize
=
pageSize
}
if
pageInfo
.
PageSize
==
0
{
pageSize
,
_
=
strconv
.
Atoi
(
c
.
Query
(
"size"
))
// token page
if
pageSize
!=
0
{
pageInfo
.
PageSize
=
pageSize
}
}
if
pageInfo
.
PageSize
==
0
{
pageInfo
.
PageSize
=
ItemsPerPage
}
return
pageInfo
,
nil
}
if
pageInfo
.
PageSize
>
100
{
pageInfo
.
PageSize
=
100
}
return
pageInfo
}
controller/channel-billing.go
View file @
38c5e0e9
...
...
@@ -4,7 +4,6 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/shopspring/decimal"
"io"
"net/http"
"one-api/common"
...
...
@@ -16,6 +15,8 @@ import (
"strconv"
"time"
"github.com/shopspring/decimal"
"github.com/gin-gonic/gin"
)
...
...
@@ -410,18 +411,12 @@ func updateChannelBalance(channel *model.Channel) (float64, error) {
func
UpdateChannelBalance
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
channel
,
err
:=
model
.
CacheGetChannel
(
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
channel
.
ChannelInfo
.
IsMultiKey
{
...
...
@@ -433,10 +428,7 @@ func UpdateChannelBalance(c *gin.Context) {
}
balance
,
err
:=
updateChannelBalance
(
channel
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -480,10 +472,7 @@ func UpdateAllChannelsBalance(c *gin.Context) {
// TODO: make it async
err
:=
updateAllChannelsBalance
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/channel-test.go
View file @
38c5e0e9
...
...
@@ -306,18 +306,12 @@ func buildTestRequest(model string) *dto.GeneralOpenAIRequest {
func
TestChannel
(
c
*
gin
.
Context
)
{
channelId
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
channel
,
err
:=
model
.
CacheGetChannel
(
channelId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
//defer func() {
...
...
@@ -431,10 +425,7 @@ func testAllChannels(notify bool) error {
func
TestAllChannels
(
c
*
gin
.
Context
)
{
err
:=
testAllChannels
(
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/channel.go
View file @
38c5e0e9
...
...
@@ -53,14 +53,7 @@ func parseStatusFilter(statusParam string) int {
}
func
GetAllChannels
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
1
{
p
=
1
}
if
pageSize
<
1
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
channelData
:=
make
([]
*
model
.
Channel
,
0
)
idSort
,
_
:=
strconv
.
ParseBool
(
c
.
Query
(
"id_sort"
))
enableTagMode
,
_
:=
strconv
.
ParseBool
(
c
.
Query
(
"tag_mode"
))
...
...
@@ -79,7 +72,7 @@ func GetAllChannels(c *gin.Context) {
var
total
int64
if
enableTagMode
{
tags
,
err
:=
model
.
GetPaginatedTags
(
(
p
-
1
)
*
pageSize
,
pageSize
)
tags
,
err
:=
model
.
GetPaginatedTags
(
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
()})
return
...
...
@@ -126,7 +119,7 @@ func GetAllChannels(c *gin.Context) {
order
=
"id desc"
}
err
:=
baseQuery
.
Order
(
order
)
.
Limit
(
page
Size
)
.
Offset
((
p
-
1
)
*
pageSize
)
.
Omit
(
"key"
)
.
Find
(
&
channelData
)
.
Error
err
:=
baseQuery
.
Order
(
order
)
.
Limit
(
page
Info
.
GetPageSize
())
.
Offset
(
pageInfo
.
GetStartIdx
()
)
.
Omit
(
"key"
)
.
Find
(
&
channelData
)
.
Error
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
()})
return
...
...
@@ -148,17 +141,12 @@ func GetAllChannels(c *gin.Context) {
for
_
,
r
:=
range
results
{
typeCounts
[
r
.
Type
]
=
r
.
Count
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
common
.
ApiSuccess
(
c
,
gin
.
H
{
"items"
:
channelData
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
"page"
:
pageInfo
.
GetPage
()
,
"page_size"
:
pageInfo
.
GetPageSize
()
,
"type_counts"
:
typeCounts
,
},
})
return
}
...
...
@@ -166,19 +154,13 @@ func GetAllChannels(c *gin.Context) {
func
FetchUpstreamModels
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
channel
,
err
:=
model
.
GetChannelById
(
id
,
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -195,10 +177,7 @@ func FetchUpstreamModels(c *gin.Context) {
}
body
,
err
:=
GetResponseBody
(
"GET"
,
url
,
channel
,
GetAuthHeader
(
channel
.
Key
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -230,10 +209,7 @@ func FetchUpstreamModels(c *gin.Context) {
func
FixChannelsAbilities
(
c
*
gin
.
Context
)
{
success
,
fails
,
err
:=
model
.
FixAbility
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -358,18 +334,12 @@ func SearchChannels(c *gin.Context) {
func
GetChannel
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
channel
,
err
:=
model
.
GetChannelById
(
id
,
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -422,10 +392,7 @@ func AddChannel(c *gin.Context) {
addChannelRequest
:=
AddChannelRequest
{}
err
:=
c
.
ShouldBindJSON
(
&
addChannelRequest
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -547,10 +514,7 @@ func AddChannel(c *gin.Context) {
}
err
=
model
.
BatchInsertChannels
(
channels
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -565,10 +529,7 @@ func DeleteChannel(c *gin.Context) {
channel
:=
model
.
Channel
{
Id
:
id
}
err
:=
channel
.
Delete
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -581,10 +542,7 @@ func DeleteChannel(c *gin.Context) {
func
DeleteDisabledChannel
(
c
*
gin
.
Context
)
{
rows
,
err
:=
model
.
DeleteDisabledChannel
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -617,10 +575,7 @@ func DisableTagChannels(c *gin.Context) {
}
err
=
model
.
DisableChannelByTag
(
channelTag
.
Tag
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -642,10 +597,7 @@ func EnableTagChannels(c *gin.Context) {
}
err
=
model
.
EnableChannelByTag
(
channelTag
.
Tag
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -674,10 +626,7 @@ func EditTagChannels(c *gin.Context) {
}
err
=
model
.
EditChannelByTag
(
channelTag
.
Tag
,
channelTag
.
NewTag
,
channelTag
.
ModelMapping
,
channelTag
.
Models
,
channelTag
.
Groups
,
channelTag
.
Priority
,
channelTag
.
Weight
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -704,10 +653,7 @@ func DeleteChannelBatch(c *gin.Context) {
}
err
=
model
.
BatchDeleteChannels
(
channelBatch
.
Ids
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -727,10 +673,7 @@ func UpdateChannel(c *gin.Context) {
channel
:=
PatchChannel
{}
err
:=
c
.
ShouldBindJSON
(
&
channel
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
err
=
channel
.
ValidateSettings
()
...
...
@@ -781,10 +724,7 @@ func UpdateChannel(c *gin.Context) {
}
err
=
channel
.
Update
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
channel
.
Key
=
""
...
...
@@ -889,10 +829,7 @@ func BatchSetChannelTag(c *gin.Context) {
}
err
=
model
.
BatchSetChannelTag
(
channelBatch
.
Ids
,
channelBatch
.
Tag
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/github.go
View file @
38c5e0e9
...
...
@@ -5,13 +5,14 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"net/http"
"one-api/common"
"one-api/model"
"strconv"
"time"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
)
type
GitHubOAuthResponse
struct
{
...
...
@@ -103,10 +104,7 @@ func GitHubOAuth(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
githubUser
,
err
:=
getGitHubUserInfoByCode
(
code
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
:=
model
.
User
{
...
...
@@ -185,10 +183,7 @@ func GitHubBind(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
githubUser
,
err
:=
getGitHubUserInfoByCode
(
code
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
:=
model
.
User
{
...
...
@@ -207,19 +202,13 @@ func GitHubBind(c *gin.Context) {
user
.
Id
=
id
.
(
int
)
err
=
user
.
FillUserById
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
.
GitHubId
=
githubUser
.
Login
err
=
user
.
Update
(
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -239,10 +228,7 @@ func GenerateOAuthCode(c *gin.Context) {
session
.
Set
(
"oauth_state"
,
state
)
err
:=
session
.
Save
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/linuxdo.go
View file @
38c5e0e9
...
...
@@ -38,10 +38,7 @@ func LinuxDoBind(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
linuxdoUser
,
err
:=
getLinuxdoUserInfoByCode
(
code
,
c
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -63,20 +60,14 @@ func LinuxDoBind(c *gin.Context) {
err
=
user
.
FillUserById
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
.
LinuxDOId
=
strconv
.
Itoa
(
linuxdoUser
.
Id
)
err
=
user
.
Update
(
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -202,10 +193,7 @@ func LinuxdoOAuth(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
linuxdoUser
,
err
:=
getLinuxdoUserInfoByCode
(
code
,
c
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
controller/log.go
View file @
38c5e0e9
...
...
@@ -10,14 +10,7 @@ import (
)
func
GetAllLogs
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
1
{
p
=
1
}
if
pageSize
<
0
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
logType
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"type"
))
startTimestamp
,
_
:=
strconv
.
ParseInt
(
c
.
Query
(
"start_timestamp"
),
10
,
64
)
endTimestamp
,
_
:=
strconv
.
ParseInt
(
c
.
Query
(
"end_timestamp"
),
10
,
64
)
...
...
@@ -26,38 +19,19 @@ func GetAllLogs(c *gin.Context) {
modelName
:=
c
.
Query
(
"model_name"
)
channel
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"channel"
))
group
:=
c
.
Query
(
"group"
)
logs
,
total
,
err
:=
model
.
GetAllLogs
(
logType
,
startTimestamp
,
endTimestamp
,
modelName
,
username
,
tokenName
,
(
p
-
1
)
*
pageSize
,
pageSize
,
channel
,
group
)
logs
,
total
,
err
:=
model
.
GetAllLogs
(
logType
,
startTimestamp
,
endTimestamp
,
modelName
,
username
,
tokenName
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
channel
,
group
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
map
[
string
]
any
{
"items"
:
logs
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
logs
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
func
GetUserLogs
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
1
{
p
=
1
}
if
pageSize
<
0
{
pageSize
=
common
.
ItemsPerPage
}
if
pageSize
>
100
{
pageSize
=
100
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
userId
:=
c
.
GetInt
(
"id"
)
logType
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"type"
))
startTimestamp
,
_
:=
strconv
.
ParseInt
(
c
.
Query
(
"start_timestamp"
),
10
,
64
)
...
...
@@ -65,24 +39,14 @@ func GetUserLogs(c *gin.Context) {
tokenName
:=
c
.
Query
(
"token_name"
)
modelName
:=
c
.
Query
(
"model_name"
)
group
:=
c
.
Query
(
"group"
)
logs
,
total
,
err
:=
model
.
GetUserLogs
(
userId
,
logType
,
startTimestamp
,
endTimestamp
,
modelName
,
tokenName
,
(
p
-
1
)
*
pageSize
,
pageSize
,
group
)
logs
,
total
,
err
:=
model
.
GetUserLogs
(
userId
,
logType
,
startTimestamp
,
endTimestamp
,
modelName
,
tokenName
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
group
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
map
[
string
]
any
{
"items"
:
logs
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
logs
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
...
...
@@ -90,10 +54,7 @@ func SearchAllLogs(c *gin.Context) {
keyword
:=
c
.
Query
(
"keyword"
)
logs
,
err
:=
model
.
SearchAllLogs
(
keyword
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -109,10 +70,7 @@ func SearchUserLogs(c *gin.Context) {
userId
:=
c
.
GetInt
(
"id"
)
logs
,
err
:=
model
.
SearchUserLogs
(
userId
,
keyword
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -198,10 +156,7 @@ func DeleteHistoryLogs(c *gin.Context) {
}
count
,
err
:=
model
.
DeleteOldLog
(
c
.
Request
.
Context
(),
targetTimestamp
,
100
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/midjourney.go
View file @
38c5e0e9
...
...
@@ -5,7 +5,6 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"io"
"net/http"
"one-api/common"
...
...
@@ -13,8 +12,9 @@ import (
"one-api/model"
"one-api/service"
"one-api/setting"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
func
UpdateMidjourneyTaskBulk
()
{
...
...
@@ -213,14 +213,7 @@ func checkMjTaskNeedUpdate(oldTask *model.Midjourney, newTask dto.MidjourneyDto)
}
func
GetAllMidjourney
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
if
p
<
1
{
p
=
1
}
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
pageSize
<=
0
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
// 解析其他查询参数
queryParams
:=
model
.
TaskQueryParams
{
...
...
@@ -230,7 +223,7 @@ func GetAllMidjourney(c *gin.Context) {
EndTimestamp
:
c
.
Query
(
"end_timestamp"
),
}
items
:=
model
.
GetAllTasks
(
(
p
-
1
)
*
pageSize
,
pageSize
,
queryParams
)
items
:=
model
.
GetAllTasks
(
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
queryParams
)
total
:=
model
.
CountAllTasks
(
queryParams
)
if
setting
.
MjForwardUrlEnabled
{
...
...
@@ -239,27 +232,13 @@ func GetAllMidjourney(c *gin.Context) {
items
[
i
]
=
midjourney
}
}
c
.
JSON
(
200
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
items
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
items
)
common
.
ApiSuccess
(
c
,
pageInfo
)
}
func
GetUserMidjourney
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
if
p
<
1
{
p
=
1
}
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
pageSize
<=
0
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
userId
:=
c
.
GetInt
(
"id"
)
...
...
@@ -269,7 +248,7 @@ func GetUserMidjourney(c *gin.Context) {
EndTimestamp
:
c
.
Query
(
"end_timestamp"
),
}
items
:=
model
.
GetAllUserTask
(
userId
,
(
p
-
1
)
*
pageSize
,
pageSize
,
queryParams
)
items
:=
model
.
GetAllUserTask
(
userId
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
queryParams
)
total
:=
model
.
CountAllUserTask
(
userId
,
queryParams
)
if
setting
.
MjForwardUrlEnabled
{
...
...
@@ -278,14 +257,7 @@ func GetUserMidjourney(c *gin.Context) {
items
[
i
]
=
midjourney
}
}
c
.
JSON
(
200
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
items
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
items
)
common
.
ApiSuccess
(
c
,
pageInfo
)
}
controller/misc.go
View file @
38c5e0e9
...
...
@@ -214,10 +214,7 @@ func SendEmailVerification(c *gin.Context) {
"<p>验证码 %d 分钟内有效,如果不是本人操作,请忽略。</p>"
,
common
.
SystemName
,
code
,
common
.
VerificationValidMinutes
)
err
:=
common
.
SendEmail
(
subject
,
email
,
content
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -253,10 +250,7 @@ func SendPasswordResetEmail(c *gin.Context) {
"<p>重置链接 %d 分钟内有效,如果不是本人操作,请忽略。</p>"
,
common
.
SystemName
,
link
,
link
,
common
.
VerificationValidMinutes
)
err
:=
common
.
SendEmail
(
subject
,
email
,
content
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -291,10 +285,7 @@ func ResetPassword(c *gin.Context) {
password
:=
common
.
GenerateVerificationCode
(
12
)
err
=
model
.
ResetUserPasswordByEmail
(
req
.
Email
,
password
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
common
.
DeleteKey
(
req
.
Email
,
common
.
PasswordResetPurpose
)
...
...
controller/oidc.go
View file @
38c5e0e9
...
...
@@ -126,10 +126,7 @@ func OidcAuth(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
oidcUser
,
err
:=
getOidcUserInfoByCode
(
code
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
:=
model
.
User
{
...
...
@@ -195,10 +192,7 @@ func OidcBind(c *gin.Context) {
code
:=
c
.
Query
(
"code"
)
oidcUser
,
err
:=
getOidcUserInfoByCode
(
code
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
:=
model
.
User
{
...
...
@@ -217,19 +211,13 @@ func OidcBind(c *gin.Context) {
user
.
Id
=
id
.
(
int
)
err
=
user
.
FillUserById
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
.
OidcId
=
oidcUser
.
OpenID
err
=
user
.
Update
(
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/option.go
View file @
38c5e0e9
...
...
@@ -160,10 +160,7 @@ func UpdateOption(c *gin.Context) {
}
err
=
model
.
UpdateOption
(
option
.
Key
,
option
.
Value
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/redemption.go
View file @
38c5e0e9
package
controller
import
(
"errors"
"net/http"
"one-api/common"
"one-api/model"
"strconv"
"errors"
"github.com/gin-gonic/gin"
)
func
GetAllRedemptions
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
0
{
p
=
0
}
if
pageSize
<
1
{
pageSize
=
common
.
ItemsPerPage
}
redemptions
,
total
,
err
:=
model
.
GetAllRedemptions
((
p
-
1
)
*
pageSize
,
pageSize
)
pageInfo
:=
common
.
GetPageQuery
(
c
)
redemptions
,
total
,
err
:=
model
.
GetAllRedemptions
(
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
())
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
redemptions
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
redemptions
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
func
SearchRedemptions
(
c
*
gin
.
Context
)
{
keyword
:=
c
.
Query
(
"keyword"
)
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
0
{
p
=
0
}
if
pageSize
<
1
{
pageSize
=
common
.
ItemsPerPage
}
redemptions
,
total
,
err
:=
model
.
SearchRedemptions
(
keyword
,
(
p
-
1
)
*
pageSize
,
pageSize
)
pageInfo
:=
common
.
GetPageQuery
(
c
)
redemptions
,
total
,
err
:=
model
.
SearchRedemptions
(
keyword
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
())
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
redemptions
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
redemptions
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
func
GetRedemption
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
redemption
,
err
:=
model
.
GetRedemptionById
(
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -100,10 +60,7 @@ func AddRedemption(c *gin.Context) {
redemption
:=
model
.
Redemption
{}
err
:=
c
.
ShouldBindJSON
(
&
redemption
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
len
(
redemption
.
Name
)
==
0
||
len
(
redemption
.
Name
)
>
20
{
...
...
@@ -165,10 +122,7 @@ func DeleteRedemption(c *gin.Context) {
id
,
_
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
err
:=
model
.
DeleteRedemptionById
(
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -183,18 +137,12 @@ func UpdateRedemption(c *gin.Context) {
redemption
:=
model
.
Redemption
{}
err
:=
c
.
ShouldBindJSON
(
&
redemption
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
cleanRedemption
,
err
:=
model
.
GetRedemptionById
(
redemption
.
Id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
statusOnly
==
""
{
...
...
@@ -212,10 +160,7 @@ func UpdateRedemption(c *gin.Context) {
}
err
=
cleanRedemption
.
Update
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -229,10 +174,7 @@ func UpdateRedemption(c *gin.Context) {
func
DeleteInvalidRedemption
(
c
*
gin
.
Context
)
{
rows
,
err
:=
model
.
DeleteInvalidRedemptions
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/task.go
View file @
38c5e0e9
...
...
@@ -5,8 +5,6 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/samber/lo"
"io"
"net/http"
"one-api/common"
...
...
@@ -17,6 +15,9 @@ import (
"sort"
"strconv"
"time"
"github.com/gin-gonic/gin"
"github.com/samber/lo"
)
func
UpdateTaskBulk
()
{
...
...
@@ -225,14 +226,7 @@ func checkTaskNeedUpdate(oldTask *model.Task, newTask dto.SunoDataResponse) bool
}
func
GetAllTask
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
if
p
<
1
{
p
=
1
}
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
pageSize
<=
0
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
startTimestamp
,
_
:=
strconv
.
ParseInt
(
c
.
Query
(
"start_timestamp"
),
10
,
64
)
endTimestamp
,
_
:=
strconv
.
ParseInt
(
c
.
Query
(
"end_timestamp"
),
10
,
64
)
...
...
@@ -247,30 +241,15 @@ func GetAllTask(c *gin.Context) {
ChannelID
:
c
.
Query
(
"channel_id"
),
}
items
:=
model
.
TaskGetAllTasks
(
(
p
-
1
)
*
pageSize
,
pageSize
,
queryParams
)
items
:=
model
.
TaskGetAllTasks
(
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
queryParams
)
total
:=
model
.
TaskCountAllTasks
(
queryParams
)
c
.
JSON
(
200
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
items
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
items
)
common
.
ApiSuccess
(
c
,
pageInfo
)
}
func
GetUserTask
(
c
*
gin
.
Context
)
{
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
if
p
<
1
{
p
=
1
}
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
pageSize
<=
0
{
pageSize
=
common
.
ItemsPerPage
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
userId
:=
c
.
GetInt
(
"id"
)
...
...
@@ -286,17 +265,9 @@ func GetUserTask(c *gin.Context) {
EndTimestamp
:
endTimestamp
,
}
items
:=
model
.
TaskGetAllUserTask
(
userId
,
(
p
-
1
)
*
pageSize
,
pageSize
,
queryParams
)
items
:=
model
.
TaskGetAllUserTask
(
userId
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
()
,
queryParams
)
total
:=
model
.
TaskCountAllUserTask
(
userId
,
queryParams
)
c
.
JSON
(
200
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
items
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
items
)
common
.
ApiSuccess
(
c
,
pageInfo
)
}
controller/token.go
View file @
38c5e0e9
package
controller
import
(
"github.com/gin-gonic/gin"
"net/http"
"one-api/common"
"one-api/model"
"strconv"
"github.com/gin-gonic/gin"
)
func
GetAllTokens
(
c
*
gin
.
Context
)
{
userId
:=
c
.
GetInt
(
"id"
)
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
size
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"size"
))
if
p
<
1
{
p
=
1
}
if
size
<=
0
{
size
=
common
.
ItemsPerPage
}
else
if
size
>
100
{
size
=
100
}
tokens
,
err
:=
model
.
GetAllUserTokens
(
userId
,
(
p
-
1
)
*
size
,
size
)
pageInfo
:=
common
.
GetPageQuery
(
c
)
tokens
,
err
:=
model
.
GetAllUserTokens
(
userId
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
())
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
// Get total count for pagination
total
,
_
:=
model
.
CountUserTokens
(
userId
)
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
tokens
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
size
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
tokens
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
...
...
@@ -50,10 +30,7 @@ func SearchTokens(c *gin.Context) {
token
:=
c
.
Query
(
"token"
)
tokens
,
err
:=
model
.
SearchUserTokens
(
userId
,
keyword
,
token
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -68,18 +45,12 @@ func GetToken(c *gin.Context) {
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
userId
:=
c
.
GetInt
(
"id"
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
token
,
err
:=
model
.
GetTokenByIds
(
id
,
userId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -95,10 +66,7 @@ func GetTokenStatus(c *gin.Context) {
userId
:=
c
.
GetInt
(
"id"
)
token
,
err
:=
model
.
GetTokenByIds
(
tokenId
,
userId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
expiredAt
:=
token
.
ExpiredTime
...
...
@@ -118,10 +86,7 @@ func AddToken(c *gin.Context) {
token
:=
model
.
Token
{}
err
:=
c
.
ShouldBindJSON
(
&
token
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
len
(
token
.
Name
)
>
30
{
...
...
@@ -156,10 +121,7 @@ func AddToken(c *gin.Context) {
}
err
=
cleanToken
.
Insert
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -174,10 +136,7 @@ func DeleteToken(c *gin.Context) {
userId
:=
c
.
GetInt
(
"id"
)
err
:=
model
.
DeleteTokenById
(
id
,
userId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -193,10 +152,7 @@ func UpdateToken(c *gin.Context) {
token
:=
model
.
Token
{}
err
:=
c
.
ShouldBindJSON
(
&
token
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
len
(
token
.
Name
)
>
30
{
...
...
@@ -208,10 +164,7 @@ func UpdateToken(c *gin.Context) {
}
cleanToken
,
err
:=
model
.
GetTokenByIds
(
token
.
Id
,
userId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
token
.
Status
==
common
.
TokenStatusEnabled
{
...
...
@@ -245,10 +198,7 @@ func UpdateToken(c *gin.Context) {
}
err
=
cleanToken
.
Update
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -275,10 +225,7 @@ func DeleteTokenBatch(c *gin.Context) {
userId
:=
c
.
GetInt
(
"id"
)
count
,
err
:=
model
.
BatchDeleteTokens
(
tokenBatch
.
Ids
,
userId
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/usedata.go
View file @
38c5e0e9
package
controller
import
(
"github.com/gin-gonic/gin"
"net/http"
"one-api/common"
"one-api/model"
"strconv"
"github.com/gin-gonic/gin"
)
func
GetAllQuotaDates
(
c
*
gin
.
Context
)
{
...
...
@@ -13,10 +15,7 @@ func GetAllQuotaDates(c *gin.Context) {
username
:=
c
.
Query
(
"username"
)
dates
,
err
:=
model
.
GetAllQuotaDates
(
startTimestamp
,
endTimestamp
,
username
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -41,10 +40,7 @@ func GetUserQuotaDates(c *gin.Context) {
}
dates
,
err
:=
model
.
GetQuotaDataByUserId
(
userId
,
startTimestamp
,
endTimestamp
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
controller/user.go
View file @
38c5e0e9
...
...
@@ -188,10 +188,7 @@ func Register(c *gin.Context) {
cleanUser
.
Email
=
user
.
Email
}
if
err
:=
cleanUser
.
Insert
(
inviterId
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -247,81 +244,45 @@ func Register(c *gin.Context) {
}
func
GetAllUsers
(
c
*
gin
.
Context
)
{
pageInfo
,
err
:=
common
.
GetPageQuery
(
c
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
"parse page query failed"
,
})
return
}
pageInfo
:=
common
.
GetPageQuery
(
c
)
users
,
total
,
err
:=
model
.
GetAllUsers
(
pageInfo
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
users
)
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
pageInfo
,
})
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
func
SearchUsers
(
c
*
gin
.
Context
)
{
keyword
:=
c
.
Query
(
"keyword"
)
group
:=
c
.
Query
(
"group"
)
p
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"p"
))
pageSize
,
_
:=
strconv
.
Atoi
(
c
.
Query
(
"page_size"
))
if
p
<
1
{
p
=
1
}
if
pageSize
<
0
{
pageSize
=
common
.
ItemsPerPage
}
startIdx
:=
(
p
-
1
)
*
pageSize
users
,
total
,
err
:=
model
.
SearchUsers
(
keyword
,
group
,
startIdx
,
pageSize
)
pageInfo
:=
common
.
GetPageQuery
(
c
)
users
,
total
,
err
:=
model
.
SearchUsers
(
keyword
,
group
,
pageInfo
.
GetStartIdx
(),
pageInfo
.
GetPageSize
())
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
true
,
"message"
:
""
,
"data"
:
gin
.
H
{
"items"
:
users
,
"total"
:
total
,
"page"
:
p
,
"page_size"
:
pageSize
,
},
})
pageInfo
.
SetTotal
(
int
(
total
))
pageInfo
.
SetItems
(
users
)
common
.
ApiSuccess
(
c
,
pageInfo
)
return
}
func
GetUser
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
,
err
:=
model
.
GetUserById
(
id
,
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
myRole
:=
c
.
GetInt
(
"role"
)
...
...
@@ -344,10 +305,7 @@ func GenerateAccessToken(c *gin.Context) {
id
:=
c
.
GetInt
(
"id"
)
user
,
err
:=
model
.
GetUserById
(
id
,
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
// get rand int 28-32
...
...
@@ -372,10 +330,7 @@ func GenerateAccessToken(c *gin.Context) {
}
if
err
:=
user
.
Update
(
false
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -395,18 +350,12 @@ func TransferAffQuota(c *gin.Context) {
id
:=
c
.
GetInt
(
"id"
)
user
,
err
:=
model
.
GetUserById
(
id
,
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
tran
:=
TransferAffQuotaRequest
{}
if
err
:=
c
.
ShouldBindJSON
(
&
tran
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
err
=
user
.
TransferAffQuotaToQuota
(
tran
.
Quota
)
...
...
@@ -427,10 +376,7 @@ func GetAffCode(c *gin.Context) {
id
:=
c
.
GetInt
(
"id"
)
user
,
err
:=
model
.
GetUserById
(
id
,
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
user
.
AffCode
==
""
{
...
...
@@ -455,10 +401,7 @@ func GetSelf(c *gin.Context) {
id
:=
c
.
GetInt
(
"id"
)
user
,
err
:=
model
.
GetUserById
(
id
,
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
// Hide admin remarks: set to empty to trigger omitempty tag, ensuring the remark field is not included in JSON returned to regular users
...
...
@@ -479,10 +422,7 @@ func GetUserModels(c *gin.Context) {
}
user
,
err
:=
model
.
GetUserCache
(
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
groups
:=
setting
.
GetUserUsableGroups
(
user
.
Group
)
...
...
@@ -524,10 +464,7 @@ func UpdateUser(c *gin.Context) {
}
originUser
,
err
:=
model
.
GetUserById
(
updatedUser
.
Id
,
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
myRole
:=
c
.
GetInt
(
"role"
)
...
...
@@ -550,10 +487,7 @@ func UpdateUser(c *gin.Context) {
}
updatePassword
:=
updatedUser
.
Password
!=
""
if
err
:=
updatedUser
.
Edit
(
updatePassword
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
originUser
.
Quota
!=
updatedUser
.
Quota
{
...
...
@@ -599,17 +533,11 @@ func UpdateSelf(c *gin.Context) {
}
updatePassword
,
err
:=
checkUpdatePassword
(
user
.
OriginalPassword
,
user
.
Password
,
cleanUser
.
Id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
if
err
:=
cleanUser
.
Update
(
updatePassword
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -640,18 +568,12 @@ func checkUpdatePassword(originalPassword string, newPassword string, userId int
func
DeleteUser
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Param
(
"id"
))
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
originUser
,
err
:=
model
.
GetUserById
(
id
,
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
myRole
:=
c
.
GetInt
(
"role"
)
...
...
@@ -686,10 +608,7 @@ func DeleteSelf(c *gin.Context) {
err
:=
model
.
DeleteUserById
(
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -735,10 +654,7 @@ func CreateUser(c *gin.Context) {
DisplayName
:
user
.
DisplayName
,
}
if
err
:=
cleanUser
.
Insert
(
0
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
@@ -848,10 +764,7 @@ func ManageUser(c *gin.Context) {
}
if
err
:=
user
.
Update
(
false
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
clearUser
:=
model
.
User
{
...
...
@@ -883,20 +796,14 @@ func EmailBind(c *gin.Context) {
}
err
:=
user
.
FillUserById
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
.
Email
=
email
// no need to check if this email already taken, because we have used verification code to check it
err
=
user
.
Update
(
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -918,19 +825,13 @@ func TopUp(c *gin.Context) {
req
:=
topUpRequest
{}
err
:=
c
.
ShouldBindJSON
(
&
req
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
id
:=
c
.
GetInt
(
"id"
)
quota
,
err
:=
model
.
Redeem
(
req
.
Key
,
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
@@ -1013,10 +914,7 @@ func UpdateUserSetting(c *gin.Context) {
userId
:=
c
.
GetInt
(
"id"
)
user
,
err
:=
model
.
GetUserById
(
userId
,
true
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
...
...
controller/wechat.go
View file @
38c5e0e9
...
...
@@ -4,13 +4,14 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"net/http"
"one-api/common"
"one-api/model"
"strconv"
"time"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
)
type
wechatLoginResponse
struct
{
...
...
@@ -150,19 +151,13 @@ func WeChatBind(c *gin.Context) {
}
err
=
user
.
FillUserById
()
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
user
.
WeChatId
=
wechatId
err
=
user
.
Update
(
false
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"success"
:
false
,
"message"
:
err
.
Error
(),
})
common
.
ApiError
(
c
,
err
)
return
}
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment