Skip to content

Commit

Permalink
fix: update deps and build system
Browse files Browse the repository at this point in the history
  • Loading branch information
ViRb3 committed Feb 22, 2021
1 parent 9dff0bf commit 91948e3
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 246 deletions.
155 changes: 53 additions & 102 deletions api_tests/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,97 +4,49 @@ import (
"crypto/tls"
"errors"
"fmt"
"github.com/dghubble/sling"
"github.com/ViRb3/optic-go"
"github.com/ViRb3/sling/v2"
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"sync"
"time"
"wgcf/util"
"wgcf/wireguard"
)

var globalClient *sling.Sling
var defaultHeaders = map[string]string{"User-Agent": "okhttp/3.12.1"}
var customTransport = &CustomTransport{}
var parsedApiEndpoint *url.URL
var wg sync.WaitGroup

const (
apiEndpoint = "https://api.cloudflareclient.com/"
OpticPort = "8888"
DebugPrint = false
)

var fixedTransport = &http.Transport{
// Match app's TLS config or API will reject us with code 403 error 1020
TLSClientConfig: &tls.Config{
// Match app's TLS config or API will reject us with code 403 error 1020
MinVersion: tls.VersionTLS10,
MaxVersion: tls.VersionTLS12},
ForceAttemptHTTP2: false,
// From http.DefaultTransport
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}

type CustomTransport struct{}

func (CustomTransport) RoundTrip(r *http.Request) (*http.Response, error) {
log.Println("Requesting: ", r.URL.String())
r.Header.Del("X-Forwarded-For") // inserted by httputil.NewSingleHostReverseProxy
if DebugPrint {
b, err := httputil.DumpRequestOut(r, false)
if err != nil {
return nil, err
}
fmt.Println(string(b))
for key, val := range defaultHeaders {
r.Header.Set(key, val)
}
return fixedTransport.RoundTrip(r)
}

func init() {
parsed, err := url.Parse(apiEndpoint)
response, err := fixedTransport.RoundTrip(r)
if err != nil {
log.Fatal(err)
return
return nil, err
}
parsedApiEndpoint = parsed
doer, _ := util.NewBaseDoer()
globalClient = sling.New().Doer(doer).SetMany(defaultHeaders).Path("http://localhost:" + OpticPort)
}

func serve() error {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
proxy := httputil.NewSingleHostReverseProxy(parsedApiEndpoint)
proxy.Director = func(r *http.Request) {
r.Host = parsedApiEndpoint.Host
r.URL = parsedApiEndpoint.ResolveReference(r.URL)
}
proxy.Transport = customTransport
proxy.ServeHTTP(w, r)
log.Println("Returned: ", r.URL.String())
wg.Done()
})
return http.ListenAndServe(":"+os.Getenv("OPTIC_API_PORT"), nil)
if response.StatusCode != 200 {
return nil, errors.New(fmt.Sprintf("bad code: %d", response.StatusCode))
}
return response, nil
}

func main() {
waitInternetAccess()
go func() { log.Fatal(serve()) }()
if err := testAPI(); err != nil {
log.Println(err)
}
wg.Wait()
// wait for last request to be returned to Optic
time.Sleep(1 * time.Second)
}

// e.g. get firewall permission
func waitInternetAccess() {
for {
_, err := http.Get("https://google.com/")
if err == nil {
break
}
time.Sleep(1 * time.Second)
log.Fatalln(err)
}
}

Expand All @@ -106,39 +58,33 @@ func generateKeyPair() (*wireguard.Key, *wireguard.Key) {
return privateKey, privateKey.Public()
}

type TestConfig struct {
name string
data interface{}
requestUrl string
method string
}

func runTest(config *TestConfig) error {
log.Println("Running test: ", config.requestUrl)
request := globalClient.New()
switch config.method {
case "GET":
request.Get(config.requestUrl)
case "POST":
request.Post(config.requestUrl)
case "PUT":
request.Put(config.requestUrl)
case "PATCH":
request.Patch(config.requestUrl)
default:
return errors.New("unknown request method")
func testAPI() error {
testConfig := opticgo.Config{
ApiUrl: opticgo.MustUrl("https://api.cloudflareclient.com/"),
OpticUrl: opticgo.MustUrl("http://localhost:8889"),
ProxyListenAddr: "localhost",
DebugPrint: true,
TripFunc: func(tripper http.RoundTripper) http.RoundTripper {
return CustomTransport{}
},
InternetCheckTimeout: 10 * time.Second,
}
if config.data != nil {
request.BodyJSON(config.data)
tester, err := opticgo.NewTester(testConfig)
if err != nil {
return err
}
wg.Add(1)
if _, err := request.ReceiveSuccess(nil); err != nil {
proxyErrChan, err := tester.StartProxy()
if err != nil {
return err
}
return nil
}
go func() {
for err := range proxyErrChan {
log.Fatalln(err)
}
}()

client := sling.New().Client(&http.Client{Transport: CustomTransport{}}).Path(testConfig.OpticUrl.String())

func testAPI() error {
_, publicKey := generateKeyPair()
_, publicKey2 := generateKeyPair()
regData := struct {
Expand All @@ -159,18 +105,17 @@ func testAPI() error {
"en_US",
}
var regResp map[string]interface{}
wg.Add(1)
if _, err := globalClient.New().Post("/v0a977/reg").BodyJSON(regData).ReceiveSuccess(&regResp); err != nil {
if _, err := client.New().Post("/v0a977/reg").BodyJSON(regData).ReceiveSuccess(&regResp); err != nil {
return err
}

deviceId := regResp["id"].(string)
accessToken := regResp["token"].(string)
initialLicenseKey := regResp["account"].(map[string]interface{})["license"].(string)

globalClient.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
defaultHeaders["Authorization"] = fmt.Sprintf("Bearer %s", accessToken)

var tests = []TestConfig{
var tests = []opticgo.TestDefinition{
{
"get device",
nil,
Expand Down Expand Up @@ -249,10 +194,16 @@ func testAPI() error {
},
}

for _, test := range tests {
if err := runTest(&test); err != nil {
return err
}
errChan, _, err := tester.StartAll(tests)
if err != nil {
return err
}
errText := ""
for err := range errChan {
errText += err.Error() + "\n"
}
if errText != "" {
return errors.New(errText)
}
return nil
}
2 changes: 1 addition & 1 deletion generate-api.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

# is running under WSL?
if [ "$(uname -r | grep "Microsoft")" ]
if [ "$(uname -r | grep -i "microsoft")" ]
then
API="cmd.exe /c api"
OPENAPI_GENERATOR="cmd.exe /c openapi-generator"
Expand Down
9 changes: 3 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,12 @@ module wgcf

go 1.13

replace (
github.com/dghubble/sling v1.3.0 => github.com/ViRb3/sling v1.3.0-new
wgcf/openapi => ./openapi
)
replace wgcf/openapi => ./openapi

require (
github.com/ViRb3/optic-go v0.0.0-20210222034258-dd1353e31eb5
github.com/ViRb3/sling/v2 v2.0.2
github.com/antihax/optional v1.0.0
github.com/dghubble/sling v1.3.0
github.com/getkin/kin-openapi v0.19.0
github.com/manifoldco/promptui v0.7.0
github.com/pelletier/go-toml v1.7.0 // indirect
github.com/pkg/errors v0.8.0
Expand Down
14 changes: 6 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/ViRb3/sling v1.3.0-new h1:ug8aMXjPEeZ8TW/ne5uiogUmrF6ciNzEZBeCIr4j56E=
github.com/ViRb3/sling v1.3.0-new/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY=
github.com/ViRb3/optic-go v0.0.0-20210222034258-dd1353e31eb5 h1:D5mKMemG/23LJLWyCGm7C4K0igJ6FFc0EW13CG41+W4=
github.com/ViRb3/optic-go v0.0.0-20210222034258-dd1353e31eb5/go.mod h1:ls8VOD+drMW8d6P21zNMbphRcWeh7t8z4yBEzTAQvvE=
github.com/ViRb3/sling/v2 v2.0.2 h1:XPadHD6pQHIuGSI0UYrkgmP7HH/ZLvt9/FM7saboVWs=
github.com/ViRb3/sling/v2 v2.0.2/go.mod h1:TsPjWWaGty4CDiezzN6f03mHzBRxBNI7o3ikMJ4pTuY=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
Expand Down Expand Up @@ -34,8 +36,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/getkin/kin-openapi v0.19.0 h1:ps9diqMAeO+JfMtvMunpFVBMK08TF2irJm3udThxOdw=
github.com/getkin/kin-openapi v0.19.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw=
github.com/getkin/kin-openapi v0.28.0 h1:OjJiL96/cho5P8lDOG1QkUBZIqFucY2yOIf0/tFNJdE=
github.com/getkin/kin-openapi v0.28.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
Expand Down Expand Up @@ -93,7 +95,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
Expand Down Expand Up @@ -144,7 +145,6 @@ github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMD
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
Expand Down Expand Up @@ -201,7 +201,6 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand All @@ -212,7 +211,6 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand Down
2 changes: 1 addition & 1 deletion optic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ name: wgcf
tasks:
start:
command: go run ./api_tests
baseUrl: http://localhost:8888
baseUrl: http://localhost:8889
Loading

0 comments on commit 91948e3

Please sign in to comment.