Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"http.go",
"push.go",
"setting.go",
"upload.go",
],
importpath = "go-common/app/service/main/push/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/push/conf:go_default_library",
"//app/service/main/push/model:go_default_library",
"//app/service/main/push/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/time:go_default_library",
"//library/xstr:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,51 @@
package http
import (
"net/http"
"go-common/app/service/main/push/conf"
"go-common/app/service/main/push/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
pushSrv *service.Service
idfSrv *verify.Verify
)
// Init init http.
func Init(c *conf.Config, srv *service.Service) {
idfSrv = verify.New(c.Verify)
pushSrv = srv
engine := bm.DefaultServer(c.HTTPServer)
route(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start() error(%v)", err)
panic(err)
}
}
func route(e *bm.Engine) {
e.Ping(ping)
g := e.Group("/x/internal/push-service", bm.CORS())
{
g.POST("/single", idfSrv.Verify, singlePush)
// for 直播
g.POST("/setting/set", idfSrv.Verify, setSettingInternal)
// for 管理后台测试推送
g.POST("/push", idfSrv.Verify, push)
// for test
g.POST("/test/token", idfSrv.Verify, testToken)
// upload image
g.POST("/upimg", upimg)
}
}
func ping(c *bm.Context) {
if err := pushSrv.Ping(c); err != nil {
log.Error("push-service ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,283 @@
package http
import (
"context"
"strconv"
"time"
"go-common/app/service/main/push/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
xtime "go-common/library/time"
"go-common/library/xstr"
)
func push(c *bm.Context) {
params := c.Request.Form
appID, _ := strconv.ParseInt(params.Get("app_id"), 10, 64)
if appID < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("app_id is wrong: %s", params.Get("app_id"))
return
}
platform := params.Get("platform")
alertTitle := params.Get("alert_title")
if alertTitle != "" {
res, err := pushSrv.Filter(c, alertTitle)
if err == nil && res != alertTitle {
log.Error("alertTitle(%s) contains invalid content", alertTitle)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
}
alertBody := params.Get("alert_body")
if alertBody == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("alert_body is empty")
return
}
res, err := pushSrv.Filter(c, alertBody)
if err == nil && res != alertBody {
log.Error("alertBody(%s) contains invalid content", alertBody)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
linkType, _ := strconv.Atoi(params.Get("link_type"))
if linkType < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("link_type is wrong: %s", params.Get("link_type"))
return
}
linkValue := params.Get("link_value")
expireTime, _ := strconv.ParseInt(params.Get("expire_time"), 10, 64)
if expireTime == 0 {
expireTime = time.Now().Add(7 * 24 * time.Hour).Unix()
}
builds := params.Get("builds")
sound, vibration := model.SwitchOn, model.SwitchOn
if params.Get("sound") != "" {
if sd, _ := strconv.Atoi(params.Get("sound")); sd == model.SwitchOff {
sound = model.SwitchOff
}
}
if params.Get("vibration") != "" {
if vr, _ := strconv.Atoi(params.Get("vibration")); vr == model.SwitchOff {
vibration = model.SwitchOff
}
}
passThrough, _ := strconv.Atoi(params.Get("pass_through"))
if passThrough != model.SwitchOn {
passThrough = model.SwitchOff
}
mid := params.Get("mid")
if mid == "" {
log.Error("mid is empty", mid)
c.JSON(nil, ecode.RequestErr)
return
}
mids, err := xstr.SplitInts(mid)
if err != nil {
log.Error("parse mid(%s) error(%v)", mid, err)
c.JSON(nil, ecode.RequestErr)
return
}
task := &model.Task{
ID: model.TempTaskID(),
Job: model.JobName(time.Now().UnixNano(), alertBody, linkValue, ""),
APPID: appID,
Platform: model.SplitInts(platform),
Title: alertTitle,
Summary: alertBody,
LinkType: int8(linkType),
LinkValue: linkValue,
PushTime: xtime.Time(time.Now().Unix()),
ExpireTime: xtime.Time(expireTime),
Build: model.ParseBuild(builds),
Sound: sound,
Vibration: vibration,
PassThrough: passThrough,
Group: params.Get("group"),
ImageURL: params.Get("image_url"),
}
go pushSrv.Pushs(context.Background(), task, mids)
c.JSON(nil, nil)
}
func singlePush(c *bm.Context) {
params := c.Request.Form
appID, _ := strconv.ParseInt(params.Get("app_id"), 10, 64)
if appID < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("app_id is wrong: %s", params.Get("app_id"))
return
}
businessID, _ := strconv.ParseInt(params.Get("business_id"), 10, 64)
if businessID < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("business_id is wrong: %s", params.Get("business_id"))
return
}
token := params.Get("token")
if token == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("token is empty")
return
}
platform := params.Get("platform")
alertTitle := params.Get("alert_title")
if alertTitle != "" {
res, err := pushSrv.Filter(c, alertTitle)
if err == nil && res != alertTitle {
log.Error("alertTitle(%s) contains invalid content", alertTitle)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
}
alertBody := params.Get("alert_body")
if alertBody == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("alert_body is empty")
return
}
res, err := pushSrv.Filter(c, alertBody)
if err == nil && res != alertBody {
log.Error("alertBody(%s) contains invalid content", alertBody)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
linkType, _ := strconv.Atoi(params.Get("link_type"))
if linkType < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("link_type is wrong: %s", params.Get("link_type"))
return
}
linkValue := params.Get("link_value")
expireTime, _ := strconv.ParseInt(params.Get("expire_time"), 10, 64)
if expireTime == 0 {
expireTime = time.Now().Add(7 * 24 * time.Hour).Unix()
}
builds := params.Get("builds")
sound, vibration := model.SwitchOn, model.SwitchOn
if params.Get("sound") != "" {
if sd, _ := strconv.Atoi(params.Get("sound")); sd == model.SwitchOff {
sound = model.SwitchOff
}
}
if params.Get("vibration") != "" {
if vr, _ := strconv.Atoi(params.Get("vibration")); vr == model.SwitchOff {
vibration = model.SwitchOff
}
}
passThrough, _ := strconv.Atoi(params.Get("pass_through"))
if passThrough != model.SwitchOn {
passThrough = model.SwitchOff
}
mid, _ := strconv.ParseInt(params.Get("mid"), 10, 64)
if mid < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("mid is wrong (%d)", mid)
return
}
task := &model.Task{
ID: model.TempTaskID(),
Job: model.JobName(time.Now().UnixNano(), alertBody, linkValue, ""),
BusinessID: businessID,
APPID: appID,
Platform: model.SplitInts(platform),
Title: alertTitle,
Summary: alertBody,
LinkType: int8(linkType),
LinkValue: linkValue,
PushTime: xtime.Time(time.Now().Unix()),
ExpireTime: xtime.Time(expireTime),
Build: model.ParseBuild(builds),
Sound: sound,
Vibration: vibration,
PassThrough: passThrough,
Group: params.Get("group"),
ImageURL: params.Get("image_url"),
}
go pushSrv.SinglePush(context.Background(), token, task, mid)
c.JSON(nil, nil)
}
func testToken(c *bm.Context) {
params := c.Request.Form
appID, _ := strconv.ParseInt(params.Get("app_id"), 10, 64)
if appID < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("app_id is wrong: %s", params.Get("app_id"))
return
}
alertTitle := params.Get("alert_title")
if alertTitle == "" {
alertTitle = model.DefaultMessageTitle
}
res, err := pushSrv.Filter(c, alertTitle)
if err == nil && res != alertTitle {
log.Error("alertTitle(%s) contains invalid content", alertTitle)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
alertBody := params.Get("alert_body")
if alertBody == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("alert_body is empty")
return
}
res, err = pushSrv.Filter(c, alertBody)
if err == nil && res != alertBody {
log.Error("alertBody(%s) contains invalid content", alertBody)
c.JSON(nil, ecode.PushSensitiveWordsErr)
return
}
token := params.Get("token")
if token == "" {
c.JSON(nil, ecode.RequestErr)
log.Error("token is empty")
return
}
linkType, _ := strconv.Atoi(params.Get("link_type"))
if linkType < 1 {
c.JSON(nil, ecode.RequestErr)
log.Error("link_type is wrong: %s", params.Get("link_type"))
return
}
linkValue := params.Get("link_value")
expireTime, _ := strconv.ParseInt(params.Get("expire_time"), 10, 64)
if expireTime == 0 {
expireTime = time.Now().Add(7 * 24 * time.Hour).Unix()
}
sound, vibration := model.SwitchOn, model.SwitchOn
if params.Get("sound") != "" {
if sd, _ := strconv.Atoi(params.Get("sound")); sd == model.SwitchOff {
sound = model.SwitchOff
}
}
if params.Get("vibration") != "" {
if vr, _ := strconv.Atoi(params.Get("vibration")); vr == model.SwitchOff {
vibration = model.SwitchOff
}
}
passThrough, _ := strconv.Atoi(params.Get("pass_through"))
if passThrough != model.SwitchOn {
passThrough = model.SwitchOff
}
info := &model.PushInfo{
TaskID: model.TempTaskID(),
Job: model.JobName(time.Now().UnixNano(), alertBody, linkValue, ""),
APPID: appID,
Title: alertTitle,
Summary: alertBody,
LinkType: int8(linkType),
LinkValue: linkValue,
ExpireTime: xtime.Time(expireTime),
PassThrough: passThrough,
Sound: sound,
Vibration: vibration,
ImageURL: params.Get("image_url"),
}
go pushSrv.TestToken(context.Background(), info, token)
c.JSON(nil, nil)
}

View File

@@ -0,0 +1,38 @@
package http
import (
"strconv"
pushmdl "go-common/app/service/main/push/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func setSettingInternal(c *bm.Context) {
var (
params = c.Request.Form
midStr = params.Get("mid")
typeStr = params.Get("type")
valStr = params.Get("value")
)
mid, _ := strconv.ParseInt(midStr, 10, 64)
if mid <= 0 {
log.Warn("mid(%s) is wrong", midStr)
c.JSON(nil, ecode.RequestErr)
return
}
typ, _ := strconv.Atoi(typeStr)
if _, ok := pushmdl.Settings[typ]; !ok {
log.Warn("type(%s) is wrong", typeStr)
c.JSON(nil, ecode.RequestErr)
return
}
val, _ := strconv.Atoi(valStr)
if val != pushmdl.SwitchOn && val != pushmdl.SwitchOff {
log.Warn("value(%s) is wrong", valStr)
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, pushSrv.SetSetting(c, mid, typ, val))
}

View File

@@ -0,0 +1,42 @@
package http
import (
"path/filepath"
"go-common/app/service/main/push/conf"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
var imgExts = map[string]bool{
".jpg": true,
".jpeg": true,
".png": true,
}
func upimg(ctx *bm.Context) {
f, h, err := ctx.Request.FormFile("file")
if err != nil {
log.Error("upimg error(%v)", err)
ctx.JSON(nil, err)
return
}
defer f.Close()
if h.Size > conf.Conf.Push.UpimgMaxSize {
log.Error("filesize error name(%s) size(%d)", h.Filename, h.Size)
ctx.JSON(nil, ecode.PushServiceFileSizeErr)
return
}
if ok := imgExts[filepath.Ext(h.Filename)]; !ok {
log.Error("file ext error name(%s)", h.Filename)
ctx.JSON(nil, ecode.PushServiceFileExtErr)
return
}
url, err := pushSrv.Upimg(ctx, f)
if err != nil {
ctx.JSON(nil, err)
return
}
ctx.JSON(map[string]string{"url": url}, nil)
}