74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package controller
|
|
|
|
import (
|
|
"net/http"
|
|
"one-api/common"
|
|
"one-api/service"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// ExchangeCodeRequest 授权码交换请求
|
|
type ExchangeCodeRequest struct {
|
|
AuthorizationCode string `json:"authorization_code" binding:"required"`
|
|
CodeVerifier string `json:"code_verifier" binding:"required"`
|
|
State string `json:"state" binding:"required"`
|
|
}
|
|
|
|
// GenerateClaudeOAuthURL 生成Claude OAuth授权URL
|
|
func GenerateClaudeOAuthURL(c *gin.Context) {
|
|
params, err := service.GenerateOAuthParams()
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{
|
|
"success": false,
|
|
"message": "生成OAuth授权URL失败: " + err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"success": true,
|
|
"message": "生成OAuth授权URL成功",
|
|
"data": params,
|
|
})
|
|
}
|
|
|
|
// ExchangeClaudeOAuthCode 交换Claude OAuth授权码
|
|
func ExchangeClaudeOAuthCode(c *gin.Context) {
|
|
var req ExchangeCodeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{
|
|
"success": false,
|
|
"message": "请求参数错误: " + err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
// 解析授权码
|
|
cleanedCode, err := service.ParseAuthorizationCode(req.AuthorizationCode)
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{
|
|
"success": false,
|
|
"message": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
// 交换token
|
|
tokenResult, err := service.ExchangeCode(cleanedCode, req.CodeVerifier, req.State, nil)
|
|
if err != nil {
|
|
common.SysError("Claude OAuth token exchange failed: " + err.Error())
|
|
c.JSON(http.StatusInternalServerError, gin.H{
|
|
"success": false,
|
|
"message": "授权码交换失败: " + err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"success": true,
|
|
"message": "授权码交换成功",
|
|
"data": tokenResult,
|
|
})
|
|
}
|