mirror of
https://github.com/songquanpeng/message-pusher.git
synced 2024-05-03 08:45:04 +08:00
90 lines
2.0 KiB
Go
90 lines
2.0 KiB
Go
package channel
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha1"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"errors"
|
|
"math/rand"
|
|
"message-pusher/model"
|
|
"net/http"
|
|
"net/url"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type TencentAlarmResponse struct {
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
CodeDesc string `json:"codeDesc"`
|
|
}
|
|
|
|
func SendTencentAlarmMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
|
|
secretId := channel_.AppId
|
|
secretKey := channel_.Secret
|
|
policyId := channel_.AccountId
|
|
region := channel_.Other
|
|
if message.Description == "" {
|
|
message.Description = message.Content
|
|
}
|
|
params := map[string]string{
|
|
"Action": "SendCustomAlarmMsg",
|
|
"Region": region,
|
|
"Timestamp": strconv.FormatInt(time.Now().Unix(), 10),
|
|
"Nonce": strconv.Itoa(rand.Intn(65535)),
|
|
"SecretId": secretId,
|
|
"policyId": policyId,
|
|
"msg": message.Description,
|
|
}
|
|
|
|
keys := make([]string, 0, len(params))
|
|
for key := range params {
|
|
keys = append(keys, key)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
srcStr := "GETmonitor.api.qcloud.com/v2/index.php?"
|
|
for _, key := range keys {
|
|
srcStr += key + "=" + params[key] + "&"
|
|
}
|
|
srcStr = srcStr[:len(srcStr)-1]
|
|
|
|
h := hmac.New(sha1.New, []byte(secretKey))
|
|
h.Write([]byte(srcStr))
|
|
signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
|
|
|
|
params["Signature"] = signature
|
|
|
|
urlStr := "https://monitor.api.qcloud.com/v2/index.php?" + urlEncode(params)
|
|
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("GET", urlStr, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var response TencentAlarmResponse
|
|
err = json.NewDecoder(resp.Body).Decode(&response)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if response.Code != 0 {
|
|
return errors.New(response.Message)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func urlEncode(params map[string]string) string {
|
|
var encodedParams []string
|
|
for key, value := range params {
|
|
encodedParams = append(encodedParams, url.QueryEscape(key)+"="+url.QueryEscape(value))
|
|
}
|
|
return strings.Join(encodedParams, "&")
|
|
}
|