/
utils.go
94 lines (75 loc) · 1.76 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"errors"
"fmt"
"os"
"strings"
"time"
"net/http"
"net/url"
"path/filepath"
"github.com/dwisiswant0/clientip"
"github.com/spf13/viper"
"golang.ngrok.com/ngrok"
"golang.ngrok.com/ngrok/config"
)
func (r *runner) logreq(req *http.Request) {
ip := clientip.FromRequest(req)
log.Debug(reqReceived, "addr", ip)
if r.File != nil {
header := fmt.Sprintf(
"* %s from %s @ %s",
reqReceived, ip.String(),
time.Now().Format(time.RFC3339),
)
_, err := r.File.WriteString(header + "\n")
if err != nil {
log.Warn("cannot write string to a file", "err", err, "file", r.File.Name())
}
}
httplog.PrintRequest(req)
}
func (r *runner) getTunnel() (config.Tunnel, error) {
endpoint := strings.ToLower(r.opt.Endpoint)
switch endpoint {
case "http":
return config.HTTPEndpoint(), nil
case "tcp":
return config.TCPEndpoint(), nil
case "":
return nil, errors.New(errGetTunnelEmpty)
default:
return nil, fmt.Errorf(errGetTunnelCustom, endpoint)
}
}
func parseURL(uri string) (string, error) {
u, err := url.ParseRequestURI(uri)
if err != nil {
return "", err
}
if u.Scheme == "tcp" {
u.Scheme = "http"
}
return u.String(), nil
}
func (r *runner) getAuthtokenOpt() (ngrok.ConnectOption, error) {
if r.opt.Authtoken != "" {
return ngrok.WithAuthtoken(r.opt.Authtoken), nil
}
if os.Getenv(ngrokAuthtokenEnv) != "" {
return ngrok.WithAuthtokenFromEnv(), nil
}
cfgDir, err := os.UserConfigDir()
if err != nil {
return nil, err
}
cfgDir = filepath.Join(cfgDir, "ngrok")
viper.SetConfigName("ngrok")
viper.SetConfigType("yaml")
viper.AddConfigPath(cfgDir)
err = viper.ReadInConfig()
if err != nil {
return nil, errors.New(errGetAuthtokenOpt)
}
return ngrok.WithAuthtoken(viper.GetString(ngrokAuthtoken)), nil
}