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
74b23754
authored
Jun 23, 2023
by
JustSong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: fix http status code (close #193)
parent
e873c305
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
22 additions
and
22 deletions
+22
-22
controller/relay-text.go
+12
-12
controller/relay.go
+2
-2
middleware/auth.go
+3
-3
middleware/distributor.go
+5
-5
No files found.
controller/relay-text.go
View file @
74b23754
...
@@ -76,7 +76,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
...
@@ -76,7 +76,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
preConsumedQuota
:=
int
(
float64
(
preConsumedTokens
)
*
ratio
)
preConsumedQuota
:=
int
(
float64
(
preConsumedTokens
)
*
ratio
)
userQuota
,
err
:=
model
.
CacheGetUserQuota
(
userId
)
userQuota
,
err
:=
model
.
CacheGetUserQuota
(
userId
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"get_user_quota_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"get_user_quota_failed"
,
http
.
Status
InternalServerError
)
}
}
if
userQuota
>
10
*
preConsumedQuota
{
if
userQuota
>
10
*
preConsumedQuota
{
// in this case, we do not pre-consume quota
// in this case, we do not pre-consume quota
...
@@ -86,12 +86,12 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
...
@@ -86,12 +86,12 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
if
consumeQuota
&&
preConsumedQuota
>
0
{
if
consumeQuota
&&
preConsumedQuota
>
0
{
err
:=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
err
:=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"pre_consume_token_quota_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"pre_consume_token_quota_failed"
,
http
.
Status
Forbidden
)
}
}
}
}
req
,
err
:=
http
.
NewRequest
(
c
.
Request
.
Method
,
fullRequestURL
,
c
.
Request
.
Body
)
req
,
err
:=
http
.
NewRequest
(
c
.
Request
.
Method
,
fullRequestURL
,
c
.
Request
.
Body
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"new_request_failed"
,
http
.
Status
InternalServerError
)
}
}
if
channelType
==
common
.
ChannelTypeAzure
{
if
channelType
==
common
.
ChannelTypeAzure
{
key
:=
c
.
Request
.
Header
.
Get
(
"Authorization"
)
key
:=
c
.
Request
.
Header
.
Get
(
"Authorization"
)
...
@@ -106,15 +106,15 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
...
@@ -106,15 +106,15 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
client
:=
&
http
.
Client
{}
client
:=
&
http
.
Client
{}
resp
,
err
:=
client
.
Do
(
req
)
resp
,
err
:=
client
.
Do
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"do_request_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"do_request_failed"
,
http
.
Status
InternalServerError
)
}
}
err
=
req
.
Body
.
Close
()
err
=
req
.
Body
.
Close
()
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"close_request_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"close_request_body_failed"
,
http
.
Status
InternalServerError
)
}
}
err
=
c
.
Request
.
Body
.
Close
()
err
=
c
.
Request
.
Body
.
Close
()
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"close_request_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"close_request_body_failed"
,
http
.
Status
InternalServerError
)
}
}
var
textResponse
TextResponse
var
textResponse
TextResponse
isStream
:=
strings
.
HasPrefix
(
resp
.
Header
.
Get
(
"Content-Type"
),
"text/event-stream"
)
isStream
:=
strings
.
HasPrefix
(
resp
.
Header
.
Get
(
"Content-Type"
),
"text/event-stream"
)
...
@@ -224,22 +224,22 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
...
@@ -224,22 +224,22 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
})
})
err
=
resp
.
Body
.
Close
()
err
=
resp
.
Body
.
Close
()
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
return
nil
return
nil
}
else
{
}
else
{
if
consumeQuota
{
if
consumeQuota
{
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
responseBody
,
err
:=
io
.
ReadAll
(
resp
.
Body
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"read_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"read_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
err
=
resp
.
Body
.
Close
()
err
=
resp
.
Body
.
Close
()
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
err
=
json
.
Unmarshal
(
responseBody
,
&
textResponse
)
err
=
json
.
Unmarshal
(
responseBody
,
&
textResponse
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"unmarshal_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"unmarshal_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
if
textResponse
.
Error
.
Type
!=
""
{
if
textResponse
.
Error
.
Type
!=
""
{
return
&
OpenAIErrorWithStatusCode
{
return
&
OpenAIErrorWithStatusCode
{
...
@@ -260,11 +260,11 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
...
@@ -260,11 +260,11 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
c
.
Writer
.
WriteHeader
(
resp
.
StatusCode
)
c
.
Writer
.
WriteHeader
(
resp
.
StatusCode
)
_
,
err
=
io
.
Copy
(
c
.
Writer
,
resp
.
Body
)
_
,
err
=
io
.
Copy
(
c
.
Writer
,
resp
.
Body
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"copy_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"copy_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
err
=
resp
.
Body
.
Close
()
err
=
resp
.
Body
.
Close
()
if
err
!=
nil
{
if
err
!=
nil
{
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
OK
)
return
errorWrapper
(
err
,
"close_response_body_failed"
,
http
.
Status
InternalServerError
)
}
}
return
nil
return
nil
}
}
...
...
controller/relay.go
View file @
74b23754
...
@@ -135,7 +135,7 @@ func RelayNotImplemented(c *gin.Context) {
...
@@ -135,7 +135,7 @@ func RelayNotImplemented(c *gin.Context) {
Param
:
""
,
Param
:
""
,
Code
:
"api_not_implemented"
,
Code
:
"api_not_implemented"
,
}
}
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
NotImplemented
,
gin
.
H
{
"error"
:
err
,
"error"
:
err
,
})
})
}
}
...
@@ -147,7 +147,7 @@ func RelayNotFound(c *gin.Context) {
...
@@ -147,7 +147,7 @@ func RelayNotFound(c *gin.Context) {
Param
:
""
,
Param
:
""
,
Code
:
"api_not_found"
,
Code
:
"api_not_found"
,
}
}
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
NotFound
,
gin
.
H
{
"error"
:
err
,
"error"
:
err
,
})
})
}
}
middleware/auth.go
View file @
74b23754
...
@@ -91,7 +91,7 @@ func TokenAuth() func(c *gin.Context) {
...
@@ -91,7 +91,7 @@ func TokenAuth() func(c *gin.Context) {
key
=
parts
[
0
]
key
=
parts
[
0
]
token
,
err
:=
model
.
ValidateUserToken
(
key
)
token
,
err
:=
model
.
ValidateUserToken
(
key
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
Unauthorized
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
err
.
Error
(),
"message"
:
err
.
Error
(),
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -101,7 +101,7 @@ func TokenAuth() func(c *gin.Context) {
...
@@ -101,7 +101,7 @@ func TokenAuth() func(c *gin.Context) {
return
return
}
}
if
!
model
.
CacheIsUserEnabled
(
token
.
UserId
)
{
if
!
model
.
CacheIsUserEnabled
(
token
.
UserId
)
{
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
Forbidden
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"用户已被封禁"
,
"message"
:
"用户已被封禁"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -123,7 +123,7 @@ func TokenAuth() func(c *gin.Context) {
...
@@ -123,7 +123,7 @@ func TokenAuth() func(c *gin.Context) {
if
model
.
IsAdmin
(
token
.
UserId
)
{
if
model
.
IsAdmin
(
token
.
UserId
)
{
c
.
Set
(
"channelId"
,
parts
[
1
])
c
.
Set
(
"channelId"
,
parts
[
1
])
}
else
{
}
else
{
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
Forbidden
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"普通用户不支持指定渠道"
,
"message"
:
"普通用户不支持指定渠道"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
...
middleware/distributor.go
View file @
74b23754
...
@@ -24,7 +24,7 @@ func Distribute() func(c *gin.Context) {
...
@@ -24,7 +24,7 @@ func Distribute() func(c *gin.Context) {
if
ok
{
if
ok
{
id
,
err
:=
strconv
.
Atoi
(
channelId
.
(
string
))
id
,
err
:=
strconv
.
Atoi
(
channelId
.
(
string
))
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
http
.
Status
OK
,
gin
.
H
{
c
.
JSON
(
http
.
Status
BadRequest
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"无效的渠道 ID"
,
"message"
:
"无效的渠道 ID"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -35,7 +35,7 @@ func Distribute() func(c *gin.Context) {
...
@@ -35,7 +35,7 @@ func Distribute() func(c *gin.Context) {
}
}
channel
,
err
=
model
.
GetChannelById
(
id
,
true
)
channel
,
err
=
model
.
GetChannelById
(
id
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
200
,
gin
.
H
{
c
.
JSON
(
http
.
StatusBadRequest
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"无效的渠道 ID"
,
"message"
:
"无效的渠道 ID"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -45,7 +45,7 @@ func Distribute() func(c *gin.Context) {
...
@@ -45,7 +45,7 @@ func Distribute() func(c *gin.Context) {
return
return
}
}
if
channel
.
Status
!=
common
.
ChannelStatusEnabled
{
if
channel
.
Status
!=
common
.
ChannelStatusEnabled
{
c
.
JSON
(
200
,
gin
.
H
{
c
.
JSON
(
http
.
StatusForbidden
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"该渠道已被禁用"
,
"message"
:
"该渠道已被禁用"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -59,7 +59,7 @@ func Distribute() func(c *gin.Context) {
...
@@ -59,7 +59,7 @@ func Distribute() func(c *gin.Context) {
var
modelRequest
ModelRequest
var
modelRequest
ModelRequest
err
:=
common
.
UnmarshalBodyReusable
(
c
,
&
modelRequest
)
err
:=
common
.
UnmarshalBodyReusable
(
c
,
&
modelRequest
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
200
,
gin
.
H
{
c
.
JSON
(
http
.
StatusBadRequest
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"无效的请求"
,
"message"
:
"无效的请求"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
@@ -75,7 +75,7 @@ func Distribute() func(c *gin.Context) {
...
@@ -75,7 +75,7 @@ func Distribute() func(c *gin.Context) {
}
}
channel
,
err
=
model
.
CacheGetRandomSatisfiedChannel
(
userGroup
,
modelRequest
.
Model
)
channel
,
err
=
model
.
CacheGetRandomSatisfiedChannel
(
userGroup
,
modelRequest
.
Model
)
if
err
!=
nil
{
if
err
!=
nil
{
c
.
JSON
(
200
,
gin
.
H
{
c
.
JSON
(
http
.
StatusServiceUnavailable
,
gin
.
H
{
"error"
:
gin
.
H
{
"error"
:
gin
.
H
{
"message"
:
"无可用渠道"
,
"message"
:
"无可用渠道"
,
"type"
:
"one_api_error"
,
"type"
:
"one_api_error"
,
...
...
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