package controller import ( "encoding/json" "fmt" "github.com/taoshihan1991/imaptool/models" "github.com/taoshihan1991/imaptool/tools" "github.com/taoshihan1991/imaptool/ws" "log" "strconv" "time" ) func SendServerJiang(title string, content string, domain string) string { noticeServerJiang, err := strconv.ParseBool(models.FindConfig("NoticeServerJiang")) serverJiangAPI := models.FindConfig("ServerJiangAPI") if err != nil || !noticeServerJiang || serverJiangAPI == "" { log.Println("do not notice serverjiang:", serverJiangAPI, noticeServerJiang) return "" } sendStr := fmt.Sprintf("%s%s", title, content) desp := title + ":" + content + "[登录](http://" + domain + "/main)" url := serverJiangAPI + "?text=" + sendStr + "&desp=" + desp //log.Println(url) res := tools.Get(url) return res } func SendVisitorLoginNotice(kefuName, visitorName, avator, content, visitorId string) { if !tools.LimitFreqSingle("sendnotice:"+visitorId, 1, 120) { log.Println("SendVisitorLoginNotice limit") return } userInfo := make(map[string]string) userInfo["username"] = visitorName userInfo["avator"] = avator userInfo["content"] = content msg := ws.TypeMessage{ Type: "notice", Data: userInfo, } str, _ := json.Marshal(msg) ws.OneKefuMessage(kefuName, str) } func SendNoticeEmail(username, msg string) { smtp := models.FindConfig("NoticeEmailSmtp") email := models.FindConfig("NoticeEmailAddress") password := models.FindConfig("NoticeEmailPassword") if smtp == "" || email == "" || password == "" { return } err := tools.SendSmtp(smtp, email, password, []string{email}, "[通知]"+username, msg) if err != nil { log.Println(err) } } func SendAppGetuiPush(kefu string, title, content string) { token := models.FindConfig("GetuiToken") if token == "" { token = getGetuiToken() if token == "" { return } } format := ` { "request_id":"%s", "settings":{ "ttl":3600000 }, "audience":{ "cid":[ "%s" ] }, "push_message":{ "notification":{ "title":"%s", "body":"%s", "click_type":"url", "url":"https//:xxx" } } } ` clients := models.FindClients(kefu) if len(clients) == 0 { return } //clientIds := make([]string, 0) for _, client := range clients { //clientIds = append(clientIds, client.Client_id) req := fmt.Sprintf(format, tools.Md5(tools.Uuid()), client.Client_id, title, content) num := sendPushApi(token, req) if num == 10001 { token = getGetuiToken() sendPushApi(token, req) } } } func sendPushApi(token string, req string) int { appid := models.FindConfig("GetuiAppID") if appid == "" { return 0 } url := "https://restapi.getui.com/v2/" + appid + "/push/single/cid" headers := make(map[string]string) headers["Content-Type"] = "application/json;charset=utf-8" headers["token"] = token res, err := tools.PostHeader(url, []byte(req), headers) tools.Logger().Infoln(url, req, err, res) if err == nil && res != "" { var pushRes GetuiResponse json.Unmarshal([]byte(res), &pushRes) if pushRes.Code == 10001 { return 10001 } } return 200 } func getGetuiToken() string { appid := models.FindConfig("GetuiAppID") appkey := models.FindConfig("GetuiAppKey") //appsecret := models.FindConfig("GetuiAppSecret") appmastersecret := models.FindConfig("GetuiMasterSecret") if appid == "" { return "" } type req struct { Sign string `json:"sign"` Timestamp string `json:"timestamp"` Appkey string `json:"appkey"` } timestamp := strconv.FormatInt(time.Now().UnixNano()/1e6, 10) reqJson := req{ Sign: tools.Sha256(appkey + timestamp + appmastersecret), Timestamp: timestamp, Appkey: appkey, } reqStr, _ := json.Marshal(reqJson) url := "https://restapi.getui.com/v2/" + appid + "/auth" res, err := tools.Post(url, "application/json;charset=utf-8", reqStr) log.Println(url, string(reqStr), err, res) if err == nil && res != "" { var pushRes GetuiResponse json.Unmarshal([]byte(res), &pushRes) if pushRes.Code == 0 { token := pushRes.Data["token"].(string) models.UpdateConfig("GetuiToken", token) return token } } return "" }