6
6
"encoding/base64"
7
7
"encoding/json"
8
8
"fmt"
9
+ "net/url"
10
+ "strings"
11
+ "time"
9
12
10
13
"github.com/ouqiang/supervisor-event-listener/conf"
11
14
"github.com/ouqiang/supervisor-event-listener/event"
@@ -18,8 +21,28 @@ type Feishu conf.Feishu
18
21
func (this * Feishu ) Send (msg * event.Message ) error {
19
22
url := this .URL
20
23
timeout := this .Timeout
21
- calcSign := func (secret string , timestamp int64 ) string {
22
- //timestamp + key 做sha256, 再进行base64 encode
24
+ return send2feishu (url , msg .String (), timeout )
25
+ }
26
+
27
+ func send2feishu (_url string , text string , timeout int ) error {
28
+ parse := func (_url string ) (string , string ) {
29
+ tmpArr := strings .Split (_url , "?" )
30
+ if len (tmpArr ) == 1 {
31
+ return _url , ""
32
+ } else if len (tmpArr ) == 2 {
33
+ _url = tmpArr [0 ]
34
+ q , err := url .ParseQuery (tmpArr [1 ])
35
+ if err != nil {
36
+ panic (err )
37
+ }
38
+ return _url , q .Get ("signKey" )
39
+ } else {
40
+ panic (fmt .Errorf ("invalid url: %s" , _url ))
41
+ }
42
+ }
43
+
44
+ sign := func (secret string , timestamp int64 ) string {
45
+ //timestamp + key do sha256, then base64 encode
23
46
stringToSign := fmt .Sprintf ("%v\n %s" , timestamp , secret )
24
47
25
48
var data []byte
@@ -30,24 +53,28 @@ func (this *Feishu) Send(msg *event.Message) error {
30
53
}
31
54
return base64 .StdEncoding .EncodeToString (h .Sum (nil ))
32
55
}
33
- _ = calcSign
56
+
34
57
params := map [string ]interface {}{
35
58
"msg_type" : "text" ,
36
59
"content" : map [string ]interface {}{
37
- "text" : msg . String () ,
60
+ "text" : text ,
38
61
},
39
62
}
63
+
64
+ _url , signKey := parse (_url )
65
+ if signKey != "" {
66
+ ts := time .Now ().Unix ()
67
+ params ["timestamp" ] = ts
68
+ params ["sign" ] = sign (signKey , ts )
69
+ }
40
70
body , err := json .Marshal (params )
41
71
if err != nil {
42
72
return err
43
73
}
44
- resp := httpclient .PostJson (url , string (body ), timeout )
74
+ resp := httpclient .PostJson (_url , string (body ), timeout )
45
75
if ! resp .IsOK () {
46
76
errlog .Error ("params: %v err: %v" , params , resp .Error ())
47
77
return resp
48
78
}
49
79
return nil
50
-
51
80
}
52
-
53
- // sleep and rety
0 commit comments