diff --git a/controllers/auth.go b/controllers/auth.go index f3c92f7d..7c812b62 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -24,6 +24,7 @@ import ( "github.com/astaxie/beego" "github.com/casbin/casdoor/idp" "github.com/casbin/casdoor/object" + "github.com/casbin/casdoor/proxy" "github.com/casbin/casdoor/util" ) @@ -99,9 +100,9 @@ func (c *ApiController) GetApplicationLogin() { func setHttpClient(idProvider idp.IdProvider, providerType string) { if providerType == "GitHub" || providerType == "Google" || providerType == "Facebook" || providerType == "LinkedIn" { - idProvider.SetHttpClient(proxyHttpClient) + idProvider.SetHttpClient(proxy.ProxyHttpClient) } else { - idProvider.SetHttpClient(defaultHttpClient) + idProvider.SetHttpClient(proxy.DefaultHttpClient) } } diff --git a/controllers/util.go b/controllers/util.go index 83a0b68d..dc472533 100644 --- a/controllers/util.go +++ b/controllers/util.go @@ -14,46 +14,6 @@ package controllers -import ( - "net/http" - - "github.com/astaxie/beego" - "golang.org/x/net/proxy" -) - -var defaultHttpClient *http.Client -var proxyHttpClient *http.Client - -func InitHttpClient() { - // not use proxy - defaultHttpClient = http.DefaultClient - - // use proxy - httpProxy := beego.AppConfig.String("httpProxy") - if httpProxy == "" { - proxyHttpClient = &http.Client{} - return - } - - // https://stackoverflow.com/questions/33585587/creating-a-go-socks5-client - dialer, err := proxy.SOCKS5("tcp", httpProxy, nil, proxy.Direct) - if err != nil { - panic(err) - } - - tr := &http.Transport{Dial: dialer.Dial} - proxyHttpClient = &http.Client{ - Transport: tr, - } - - //resp, err2 := proxyHttpClient.Get("https://google.com") - //if err2 != nil { - // panic(err2) - //} - //defer resp.Body.Close() - //println("Response status: %s", resp.Status) -} - // ResponseOk ... func (c *ApiController) ResponseOk(data ...interface{}) { resp := Response{Status: "ok"} diff --git a/main.go b/main.go index 1c366d87..5ce14d5e 100644 --- a/main.go +++ b/main.go @@ -20,8 +20,8 @@ import ( "github.com/astaxie/beego/plugins/cors" _ "github.com/astaxie/beego/session/redis" "github.com/casbin/casdoor/authz" - "github.com/casbin/casdoor/controllers" "github.com/casbin/casdoor/object" + "github.com/casbin/casdoor/proxy" "github.com/casbin/casdoor/routers" _ "github.com/casbin/casdoor/routers" @@ -30,7 +30,7 @@ import ( func main() { object.InitAdapter() object.InitDb() - controllers.InitHttpClient() + proxy.InitHttpClient() authz.InitAuthz() beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{ diff --git a/proxy/proxy.go b/proxy/proxy.go new file mode 100644 index 00000000..27b6078f --- /dev/null +++ b/proxy/proxy.go @@ -0,0 +1,55 @@ +// Copyright 2021 The casbin Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package proxy + +import ( + "net/http" + + "github.com/astaxie/beego" + "golang.org/x/net/proxy" +) + +var DefaultHttpClient *http.Client +var ProxyHttpClient *http.Client + +func InitHttpClient() { + // not use proxy + DefaultHttpClient = http.DefaultClient + + // use proxy + httpProxy := beego.AppConfig.String("httpProxy") + if httpProxy == "" { + ProxyHttpClient = &http.Client{} + return + } + + // https://stackoverflow.com/questions/33585587/creating-a-go-socks5-client + dialer, err := proxy.SOCKS5("tcp", httpProxy, nil, proxy.Direct) + if err != nil { + panic(err) + } + + tr := &http.Transport{Dial: dialer.Dial} + ProxyHttpClient = &http.Client{ + Transport: tr, + } + + //resp, err2 := ProxyHttpClient.Get("https://google.com") + //if err2 != nil { + // panic(err2) + //} + //defer resp.Body.Close() + //println("Response status: %s", resp.Status) +}