Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3679fcc874 | ||
|
|
d085b4e3c2 | ||
|
|
dc8fcdf214 | ||
|
|
8bab23b65b |
@@ -177,6 +177,9 @@ logger:
|
|||||||
path: "./runtime/log.txt"
|
path: "./runtime/log.txt"
|
||||||
level: "warn" #trace,debug,info,warn,error,fatal
|
level: "warn" #trace,debug,info,warn,error,fatal
|
||||||
report-caller: true
|
report-caller: true
|
||||||
|
proxy:
|
||||||
|
enable: false
|
||||||
|
host: ""
|
||||||
```
|
```
|
||||||
|
|
||||||
### 环境变量
|
### 环境变量
|
||||||
@@ -204,6 +207,10 @@ logger:
|
|||||||
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
|
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
|
||||||
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
|
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
|
||||||
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
|
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
|
||||||
|
| ----PROXY配置----- | --------------- | ---------- |
|
||||||
|
| RUSTDESK_API_PROXY_ENABLE | 是否启用代理:`false`, `true` | `false` |
|
||||||
|
| RUSTDESK_API_PROXY_HOST | 代理地址 | `http://127.0.0.1:1080` |
|
||||||
|
|
||||||
|
|
||||||
### 运行
|
### 运行
|
||||||
|
|
||||||
|
|||||||
@@ -210,6 +210,9 @@ The prefix for variable names is `RUSTDESK_API`. If environment variables exist,
|
|||||||
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
|
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
|
||||||
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
|
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
|
||||||
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
|
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
|
||||||
|
| ---- PROXY ----- | --------------- | ---------- |
|
||||||
|
| RUSTDESK_API_PROXY_ENABLE | proxy_enable :`false`, `true` | `false` |
|
||||||
|
| RUSTDESK_API_PROXY_HOST | proxy_host | `http://127.0.0.1:1080` |
|
||||||
|
|
||||||
### Installation Steps
|
### Installation Steps
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ logger:
|
|||||||
path: "./runtime/log.txt"
|
path: "./runtime/log.txt"
|
||||||
level: "warn" #trace,debug,info,warn,error,fatal
|
level: "warn" #trace,debug,info,warn,error,fatal
|
||||||
report-caller: true
|
report-caller: true
|
||||||
|
proxy:
|
||||||
|
enable: false
|
||||||
|
host: ""
|
||||||
redis:
|
redis:
|
||||||
addr: "127.0.0.1:6379"
|
addr: "127.0.0.1:6379"
|
||||||
password: ""
|
password: ""
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ type Config struct {
|
|||||||
Oss Oss
|
Oss Oss
|
||||||
Jwt Jwt
|
Jwt Jwt
|
||||||
Rustdesk Rustdesk
|
Rustdesk Rustdesk
|
||||||
|
Proxy Proxy
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init 初始化配置
|
// Init 初始化配置
|
||||||
|
|||||||
6
config/proxy.go
Normal file
6
config/proxy.go
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Proxy struct {
|
||||||
|
Enable bool `mapstructure:"enable"`
|
||||||
|
Host string `mapstructure:"host"`
|
||||||
|
}
|
||||||
@@ -5,11 +5,13 @@ import "Gwen/model"
|
|||||||
type GroupForm struct {
|
type GroupForm struct {
|
||||||
Id uint `json:"id"`
|
Id uint `json:"id"`
|
||||||
Name string `json:"name" validate:"required"`
|
Name string `json:"name" validate:"required"`
|
||||||
|
Type int `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gf *GroupForm) FromGroup(group *model.Group) *GroupForm {
|
func (gf *GroupForm) FromGroup(group *model.Group) *GroupForm {
|
||||||
gf.Id = group.Id
|
gf.Id = group.Id
|
||||||
gf.Name = group.Name
|
gf.Name = group.Name
|
||||||
|
gf.Type = group.Type
|
||||||
return gf
|
return gf
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,5 +19,6 @@ func (gf *GroupForm) ToGroup() *model.Group {
|
|||||||
group := &model.Group{}
|
group := &model.Group{}
|
||||||
group.Id = gf.Id
|
group.Id = gf.Id
|
||||||
group.Name = gf.Name
|
group.Name = gf.Name
|
||||||
|
group.Type = gf.Type
|
||||||
return group
|
return group
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import (
|
|||||||
"golang.org/x/oauth2/google"
|
"golang.org/x/oauth2/google"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"io"
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -166,20 +168,44 @@ func (os *OauthService) GetOauthConfig(op string) (error, *oauth2.Config) {
|
|||||||
return errors.New("ConfigNotFound"), nil
|
return errors.New("ConfigNotFound"), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getHTTPClientWithProxy() *http.Client {
|
||||||
|
if global.Config.Proxy.Enable {
|
||||||
|
if global.Config.Proxy.Host == "" {
|
||||||
|
global.Logger.Warn("Proxy is enabled but proxy host is empty.")
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
proxyURL, err := url.Parse(global.Config.Proxy.Host)
|
||||||
|
if err != nil {
|
||||||
|
global.Logger.Warn("Invalid proxy URL: ", err)
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
transport := &http.Transport{
|
||||||
|
Proxy: http.ProxyURL(proxyURL),
|
||||||
|
}
|
||||||
|
return &http.Client{Transport: transport}
|
||||||
|
}
|
||||||
|
return http.DefaultClient
|
||||||
|
}
|
||||||
|
|
||||||
func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) {
|
func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) {
|
||||||
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGithub)
|
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGithub)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil
|
return err, nil
|
||||||
}
|
}
|
||||||
token, err := oauthConfig.Exchange(context.Background(), code)
|
|
||||||
|
// 使用代理配置创建 HTTP 客户端
|
||||||
|
httpClient := getHTTPClientWithProxy()
|
||||||
|
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, httpClient)
|
||||||
|
|
||||||
|
token, err := oauthConfig.Exchange(ctx, code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
||||||
error = errors.New("GetOauthTokenError")
|
error = errors.New("GetOauthTokenError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建一个 HTTP 客户端,并将 access_token 添加到 Authorization 头中
|
// 使用带有代理的 HTTP 客户端获取用户信息
|
||||||
client := oauthConfig.Client(context.Background(), token)
|
client := oauthConfig.Client(ctx, token)
|
||||||
resp, err := client.Get("https://api.github.com/user")
|
resp, err := client.Get("https://api.github.com/user")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed getting user info: ", err)
|
global.Logger.Warn("failed getting user info: ", err)
|
||||||
@@ -193,7 +219,7 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
|
|||||||
}
|
}
|
||||||
}(resp.Body)
|
}(resp.Body)
|
||||||
|
|
||||||
// 在这里处理 GitHub 用户信息
|
// 解析用户信息
|
||||||
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
||||||
global.Logger.Warn("failed decoding user info: ", err)
|
global.Logger.Warn("failed decoding user info: ", err)
|
||||||
error = errors.New("DecodeOauthUserInfoError")
|
error = errors.New("DecodeOauthUserInfoError")
|
||||||
@@ -204,14 +230,23 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
|
|||||||
|
|
||||||
func (os *OauthService) GoogleCallback(code string) (error error, userData *GoogleUserdata) {
|
func (os *OauthService) GoogleCallback(code string) (error error, userData *GoogleUserdata) {
|
||||||
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGoogle)
|
err, oauthConfig := os.GetOauthConfig(model.OauthTypeGoogle)
|
||||||
token, err := oauthConfig.Exchange(context.Background(), code)
|
if err != nil {
|
||||||
|
return err, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用代理配置创建 HTTP 客户端
|
||||||
|
httpClient := getHTTPClientWithProxy()
|
||||||
|
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, httpClient)
|
||||||
|
|
||||||
|
token, err := oauthConfig.Exchange(ctx, code)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
global.Logger.Warn("oauthConfig.Exchange() failed: ", err)
|
||||||
error = errors.New("GetOauthTokenError")
|
error = errors.New("GetOauthTokenError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 创建 HTTP 客户端,并将 access_token 添加到 Authorization 头中
|
|
||||||
client := oauthConfig.Client(context.Background(), token)
|
// 使用带有代理的 HTTP 客户端获取用户信息
|
||||||
|
client := oauthConfig.Client(ctx, token)
|
||||||
resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")
|
resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Warn("failed getting user info: ", err)
|
global.Logger.Warn("failed getting user info: ", err)
|
||||||
@@ -225,8 +260,9 @@ func (os *OauthService) GoogleCallback(code string) (error error, userData *Goog
|
|||||||
}
|
}
|
||||||
}(resp.Body)
|
}(resp.Body)
|
||||||
|
|
||||||
|
// 解析用户信息
|
||||||
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
|
||||||
global.Logger.Warn("failed decoding user info: %s\n", err)
|
global.Logger.Warn("failed decoding user info: ", err)
|
||||||
error = errors.New("DecodeOauthUserInfoError")
|
error = errors.New("DecodeOauthUserInfoError")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user