@@ -2,6 +2,7 @@ package cortexbot
2
2
3
3
import (
4
4
"errors"
5
+ "fmt"
5
6
"log"
6
7
"net/http"
7
8
"net/url"
@@ -18,12 +19,28 @@ import (
18
19
const (
19
20
// defaultTLP is Green because indicators reaching telegram servers
20
21
// 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"
24
31
)
25
32
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
+ )
27
44
28
45
// Client defines bot's abilities to interact with services
29
46
type Client struct {
@@ -34,6 +51,28 @@ type Client struct {
34
51
UsersBucket string
35
52
TLP int
36
53
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
+ }
37
76
}
38
77
39
78
// socks5Client bootstraps http.Client that uses socks5 proxy
@@ -53,43 +92,42 @@ func NewClient() *Client {
53
92
err error
54
93
)
55
94
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 ()
59
97
}
60
98
61
- if proxy , ok := os . LookupEnv ( "SOCKS5_URL" ); ok {
62
- surl , err := url .Parse (proxy )
99
+ if socksURLEnvValue != "" {
100
+ surl , err := url .Parse (socksURLEnvValue )
63
101
if err != nil {
64
- log .Panic (err )
102
+ log .Fatal (err )
65
103
}
66
104
67
105
sc , err := socks5Client (surl )
68
106
if err != nil {
69
- log .Panic (err )
107
+ log .Fatal (err )
70
108
}
71
109
72
- bot , err = tgbotapi .NewBotAPIWithClient (tgToken , sc )
110
+ bot , err = tgbotapi .NewBotAPIWithClient (tgTokenEnvValue , sc )
73
111
if err != nil {
74
112
log .Fatal (err )
75
113
}
76
114
} else {
77
- bot , err = tgbotapi .NewBotAPI (tgToken )
115
+ bot , err = tgbotapi .NewBotAPI (tgTokenEnvValue )
78
116
if err != nil {
79
117
log .Fatal (err )
80
118
}
81
119
}
82
120
83
- crtx , err := cortex .NewClient (os . Getenv ( "CORTEX_LOCATION" ) , & cortex.ClientOpts {
121
+ crtx , err := cortex .NewClient (cortexURLEnvValue , & cortex.ClientOpts {
84
122
Auth : & cortex.APIAuth {
85
- APIKey : os . Getenv ( "CORTEX_API_KEY" ) ,
123
+ APIKey : cortexAPIKeyEnvValue ,
86
124
},
87
125
})
88
126
if err != nil {
89
127
log .Fatal (err )
90
128
}
91
129
92
- db , err := bolt .Open ("bolt.db" , 0644 , nil )
130
+ db , err := bolt .Open (boltFileName , 0644 , nil )
93
131
if err != nil {
94
132
log .Fatal (err )
95
133
}
@@ -98,29 +136,23 @@ func NewClient() *Client {
98
136
db .Update (func (tx * bolt.Tx ) error {
99
137
_ , err := tx .CreateBucketIfNotExists ([]byte (bucket ))
100
138
if err != nil {
101
- return errors .New ("Create users bucket failed" )
139
+ return errors .New ("create users bucket failed" )
102
140
}
103
141
return nil
104
142
})
105
143
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 )
117
149
}
118
150
}
119
151
120
152
return & Client {
121
153
Bot : bot ,
122
154
Cortex : crtx ,
123
- Password : os . Getenv ( "CORTEX_BOT_PASSWORD" ) ,
155
+ Password : cortexBotPWEnvValue ,
124
156
DB : db ,
125
157
UsersBucket : bucket ,
126
158
TLP : defaultTLP ,
0 commit comments