1
0
forked from x/icebergs
icebergs/misc/wx/login.go
2022-06-19 12:12:58 +08:00

113 lines
3.0 KiB
Go

package wx
import (
"bytes"
"encoding/xml"
"io/ioutil"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/core/chat"
"shylinux.com/x/icebergs/core/wiki"
kit "shylinux.com/x/toolkits"
)
func _wx_parse(m *ice.Message) {
data := struct {
FromUserName string
ToUserName string
CreateTime int64
MsgID int64
Event string
MsgType string
Content string
Location_X float64
Location_Y float64
Scale string
Label string
Title string
Description string
Url string
PicUrl string
}{}
buf, _ := ioutil.ReadAll(m.R.Body)
m.Debug("buf: %+v", string(buf))
xml.NewDecoder(bytes.NewBuffer(buf)).Decode(&data)
m.Debug("data: %+v", data)
m.Option("FromUserName", data.FromUserName)
m.Option("ToUserName", data.ToUserName)
m.Option("CreateTime", data.CreateTime)
m.Option("MsgID", data.MsgID)
m.Option("Event", data.Event)
m.Option("MsgType", data.MsgType)
m.Option("Content", data.Content)
m.Option("LocationX", kit.Int(data.Location_X*100000))
m.Option("LocationY", kit.Int(data.Location_Y*100000))
m.Option("Scale", data.Scale)
m.Option("Label", data.Label)
m.Option("Title", data.Title)
m.Option("Description", data.Description)
m.Option("URL", data.Url)
m.Option("URL", data.PicUrl)
}
const LOGIN = "login"
func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
LOGIN: {Name: LOGIN, Help: "登录", Value: kit.Data()},
}, Commands: map[string]*ice.Command{
"/login/": {Name: "/login/", Help: "认证", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdx(ACCESS, CHECK) == "" {
return // 验签失败
}
// 解析数据
_wx_parse(m)
// 用户登录
m.Option(ice.MSG_USERZONE, WX)
aaa.UserLogin(m, m.Append("FromUserName"), "")
switch m.Option("MsgType") {
case EVENT: // 事件
m.Cmdy(EVENT, m.Option("Event"))
case chat.LOCATION: // 打卡
m.Cmdy(chat.LOCATION, mdb.CREATE, mdb.TYPE, "", mdb.NAME, m.Option("Label"), mdb.TEXT, m.Option("Label"),
"latitude", m.Option("LocationX"), "longitude", m.Option("LocationY"), "scale", m.Option("Scale"),
)
case mdb.LINK: // 打卡
m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, mdb.LINK, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case "image": // 文本
m.Cmdy(chat.SCAN, mdb.CREATE, mdb.TYPE, wiki.IMAGE, mdb.NAME, m.Option("Title"), mdb.TEXT, m.Option("URL"))
case TEXT: // 文本
if cmds := kit.Split(m.Option("Content")); m.Right(cmds) {
m.Cmdy(TEXT, cmds)
break
}
m.Cmdy(MENU, "home")
}
}},
LOGIN: {Name: "login", Help: "登录", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create appid appmm token", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Conf(ACCESS, kit.Keym(APPID), m.Option(APPID))
m.Conf(ACCESS, kit.Keym(APPMM), m.Option(APPMM))
m.Conf(ACCESS, kit.Keym(TOKEN), m.Option(TOKEN))
}},
}, Hand: func(m *ice.Message, arg ...string) {
}},
}})
}