You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.8 KiB
136 lines
3.8 KiB
package routehb
|
|
|
|
import (
|
|
"GoClouds/core/bean/sysBean"
|
|
"GoClouds/core/utils"
|
|
"GoClouds/service/userService"
|
|
"fmt"
|
|
hbtp "github.com/mgr9525/HyperByte-Transfer-Protocol"
|
|
gocloud "github.com/mgr9525/go-cloud"
|
|
ruisUtil "github.com/mgr9525/go-ruisutil"
|
|
"github.com/sirupsen/logrus"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type CommRPC struct{}
|
|
|
|
func (CommRPC) AuthFun() hbtp.AuthFun {
|
|
return nil
|
|
}
|
|
|
|
func (CommRPC) ClearCache(c *hbtp.Context, key string) {
|
|
var err error
|
|
if key == "" {
|
|
err = gocloud.CacheFlush()
|
|
} else {
|
|
err = gocloud.CacheSet(key, nil)
|
|
}
|
|
if err != nil {
|
|
c.ResString(hbtp.ResStatusErr, "gocloud err:"+err.Error())
|
|
return
|
|
}
|
|
c.ResString(hbtp.ResStatusOk, "ok")
|
|
}
|
|
func (CommRPC) ClearUserCache(c *hbtp.Context, uid string) {
|
|
gocloud.CacheSet(fmt.Sprintf("uinfo:%s", uid), nil)
|
|
gocloud.CacheSet(fmt.Sprintf("user-permission:%s", uid), nil)
|
|
c.ResString(hbtp.ResStatusOk, "ok")
|
|
}
|
|
func (CommRPC) CheckPermission(c *hbtp.Context, m *sysBean.CheckPermissionReq) {
|
|
if m.Uid == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err")
|
|
return
|
|
}
|
|
if m.Perm == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err")
|
|
return
|
|
}
|
|
c.ResString(hbtp.ResStatusOk, fmt.Sprintf("%t", userService.CheckPermission(m.Uid, m.Perm)))
|
|
}
|
|
func (CommRPC) SendSms(c *hbtp.Context, m *sysBean.SendSmsReq) {
|
|
if m.Phone == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err:phone!")
|
|
return
|
|
}
|
|
if m.Ips == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err:ips!")
|
|
return
|
|
}
|
|
|
|
key1 := fmt.Sprintf("smsSend:%s", m.Phone)
|
|
key2 := fmt.Sprintf("smsCode:%s", m.Phone)
|
|
//key3 := fmt.Sprintf("smsSendIP:%s", ips)
|
|
data, err := gocloud.CacheGet(key1)
|
|
logrus.Debugf("SendSms get(%s):data=%s ,err=%v", key1, string(data), err)
|
|
if err == nil {
|
|
c.ResString(hbtp.ResStatusErr, "1分钟后重试!")
|
|
return
|
|
}
|
|
|
|
code := utils.GenValidateCode(6)
|
|
|
|
parm := url.Values{}
|
|
parm.Set("mobile", m.Phone)
|
|
parm.Set("param", "code:"+code)
|
|
parm.Set("tpl_id", gocloud.CloudConf.Custom.GetString("codetmpid"))
|
|
req, err := http.NewRequest("POST", "http://dingxin.market.alicloudapi.com/dx/sendSms", strings.NewReader(parm.Encode()))
|
|
if err != nil {
|
|
c.ResString(hbtp.ResStatusErr, "send req err:"+err.Error())
|
|
return
|
|
}
|
|
cli := http.Client{Timeout: time.Second * 3}
|
|
req.Header.Set("Authorization", "APPCODE "+gocloud.CloudConf.Custom.GetString("smskey"))
|
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
|
//ch.Put(key3, []byte(fmt.Sprintf("%d", time.Now().Unix())), 60)
|
|
res, err := cli.Do(req)
|
|
if err != nil {
|
|
logrus.Debug("sendSms http err:" + err.Error())
|
|
c.ResString(hbtp.ResStatusErr, "send do err:"+err.Error())
|
|
return
|
|
}
|
|
defer res.Body.Close()
|
|
gocloud.CacheSet(key1, []byte(time.Now().Format(time.RFC3339Nano)), time.Second*60)
|
|
bts, err := ioutil.ReadAll(res.Body)
|
|
if err != nil {
|
|
c.ResString(hbtp.ResStatusErr, "send read err:"+err.Error())
|
|
return
|
|
}
|
|
mp := ruisUtil.NewMapo(bts)
|
|
if mp.GetString("return_code") != "00000" {
|
|
logrus.Debug("return_code err(", res.StatusCode, ":'", parm.Encode(), "'):", string(bts))
|
|
c.ResString(hbtp.ResStatusErr, "发送失败:"+mp.GetString("return_code"))
|
|
return
|
|
}
|
|
|
|
logrus.Debug("发送短信:", m.Phone, ",IP:", m.Ips, "!!:", string(bts))
|
|
gocloud.CacheSet(key2, []byte(code), time.Second*60*5)
|
|
c.ResString(hbtp.ResStatusOk, "ok")
|
|
}
|
|
func (CommRPC) ValidSms(c *hbtp.Context, m *sysBean.VaildSmsReq) {
|
|
if m.Phone == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err:phone!")
|
|
return
|
|
}
|
|
if m.Code == "" {
|
|
c.ResString(hbtp.ResStatusErr, "param err:code!")
|
|
return
|
|
}
|
|
|
|
key := fmt.Sprintf("smsCode:%s", m.Phone)
|
|
btscode, err := gocloud.CacheGet(key)
|
|
if err != nil {
|
|
c.ResString(hbtp.ResStatusErr, "未找到验证码!")
|
|
return
|
|
}
|
|
if m.Code != string(btscode) {
|
|
c.ResString(hbtp.ResStatusErr, "验证码错误!")
|
|
return
|
|
}
|
|
|
|
gocloud.CacheSet(key, nil)
|
|
c.ResString(hbtp.ResStatusOk, "ok")
|
|
}
|