Skip to content
This repository was archived by the owner on Feb 26, 2023. It is now read-only.

Commit dfd8a99

Browse files
committed
Rework environment variables
Add debug mode additionally
1 parent b5ff9b3 commit dfd8a99

File tree

1 file changed

+61
-29
lines changed

1 file changed

+61
-29
lines changed

client.go

+61-29
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cortexbot
22

33
import (
44
"errors"
5+
"fmt"
56
"log"
67
"net/http"
78
"net/url"
@@ -18,12 +19,28 @@ import (
1819
const (
1920
// defaultTLP is Green because indicators reaching telegram servers
2021
// TODO: think about making it configurable
21-
defaultTLP = 1
22-
boltFileName = "bolt.db"
23-
bucket = "users"
22+
defaultTLP = 1
23+
boltFileName = "bolt.db"
24+
bucket = "users"
25+
tgTokenEnvName = "TGBOT_API_TOKEN"
26+
cortexURLEnvName = "CORTEX_URL"
27+
cortexAPIKeyEnvName = "CORTEX_API_KEY"
28+
socksURLEnvName = "SOCKS5_URL"
29+
cortexBotPWEnvName = "CORTEX_BOT_PASSWORD"
30+
cortexTimeoutEnvName = "CORTEX_TIMEOUT"
2431
)
2532

26-
var defaultTimeout = 5 * time.Minute
33+
var (
34+
pollTimeout = 20 * time.Second
35+
cortexTimeout = 5 * time.Minute
36+
37+
tgTokenEnvValue = os.Getenv(tgTokenEnvName)
38+
cortexURLEnvValue = os.Getenv(cortexURLEnvName)
39+
cortexAPIKeyEnvValue = os.Getenv(cortexAPIKeyEnvName)
40+
cortexBotPWEnvValue = os.Getenv(cortexBotPWEnvName)
41+
socksURLEnvValue = os.Getenv(socksURLEnvName)
42+
cortexTimeoutEnvValue = os.Getenv(cortexTimeoutEnvName)
43+
)
2744

2845
// Client defines bot's abilities to interact with services
2946
type Client struct {
@@ -34,6 +51,28 @@ type Client struct {
3451
UsersBucket string
3552
TLP int
3653
Timeout time.Duration
54+
Debug bool
55+
}
56+
57+
func usage() {
58+
ex, err := os.Executable()
59+
if err != nil {
60+
panic(err)
61+
}
62+
fmt.Printf(`Usage:
63+
%s=<telegram bot token> \
64+
%s=<cortex location> \
65+
%s=<cortex API key> \
66+
%s=<cortex bot passphrase> \
67+
%s
68+
`, tgTokenEnvName, cortexURLEnvName, cortexAPIKeyEnvName, cortexBotPWEnvName, ex)
69+
os.Exit(1)
70+
}
71+
72+
func (c *Client) log(v ...interface{}) {
73+
if c.Debug {
74+
log.Println(v...)
75+
}
3776
}
3877

3978
// socks5Client bootstraps http.Client that uses socks5 proxy
@@ -53,43 +92,42 @@ func NewClient() *Client {
5392
err error
5493
)
5594

56-
tgToken, ok := os.LookupEnv("TGBOT_API_TOKEN")
57-
if !ok {
58-
log.Fatal("TGBOT_API_TOKEN environment variable is not set")
95+
if tgTokenEnvValue == "" || cortexURLEnvValue == "" || cortexAPIKeyEnvValue == "" || cortexBotPWEnvValue == "" {
96+
usage()
5997
}
6098

61-
if proxy, ok := os.LookupEnv("SOCKS5_URL"); ok {
62-
surl, err := url.Parse(proxy)
99+
if socksURLEnvValue != "" {
100+
surl, err := url.Parse(socksURLEnvValue)
63101
if err != nil {
64-
log.Panic(err)
102+
log.Fatal(err)
65103
}
66104

67105
sc, err := socks5Client(surl)
68106
if err != nil {
69-
log.Panic(err)
107+
log.Fatal(err)
70108
}
71109

72-
bot, err = tgbotapi.NewBotAPIWithClient(tgToken, sc)
110+
bot, err = tgbotapi.NewBotAPIWithClient(tgTokenEnvValue, sc)
73111
if err != nil {
74112
log.Fatal(err)
75113
}
76114
} else {
77-
bot, err = tgbotapi.NewBotAPI(tgToken)
115+
bot, err = tgbotapi.NewBotAPI(tgTokenEnvValue)
78116
if err != nil {
79117
log.Fatal(err)
80118
}
81119
}
82120

83-
crtx, err := cortex.NewClient(os.Getenv("CORTEX_LOCATION"), &cortex.ClientOpts{
121+
crtx, err := cortex.NewClient(cortexURLEnvValue, &cortex.ClientOpts{
84122
Auth: &cortex.APIAuth{
85-
APIKey: os.Getenv("CORTEX_API_KEY"),
123+
APIKey: cortexAPIKeyEnvValue,
86124
},
87125
})
88126
if err != nil {
89127
log.Fatal(err)
90128
}
91129

92-
db, err := bolt.Open("bolt.db", 0644, nil)
130+
db, err := bolt.Open(boltFileName, 0644, nil)
93131
if err != nil {
94132
log.Fatal(err)
95133
}
@@ -98,29 +136,23 @@ func NewClient() *Client {
98136
db.Update(func(tx *bolt.Tx) error {
99137
_, err := tx.CreateBucketIfNotExists([]byte(bucket))
100138
if err != nil {
101-
return errors.New("Create users bucket failed")
139+
return errors.New("create users bucket failed")
102140
}
103141
return nil
104142
})
105143

106-
var (
107-
timeout time.Duration
108-
errt error
109-
)
110-
timeoutStr, ok := os.LookupEnv("CORTEX_TIMEOUT")
111-
if !ok {
112-
timeout = defaultTimeout
113-
} else {
114-
timeout, errt = time.ParseDuration(timeoutStr)
115-
if errt != nil {
116-
log.Fatal(errt)
144+
timeout := cortexTimeout
145+
if cortexTimeoutEnvValue != "" {
146+
timeout, err = time.ParseDuration(cortexTimeoutEnvValue)
147+
if err != nil {
148+
log.Fatal(err)
117149
}
118150
}
119151

120152
return &Client{
121153
Bot: bot,
122154
Cortex: crtx,
123-
Password: os.Getenv("CORTEX_BOT_PASSWORD"),
155+
Password: cortexBotPWEnvValue,
124156
DB: db,
125157
UsersBucket: bucket,
126158
TLP: defaultTLP,

0 commit comments

Comments
 (0)