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.
316 lines
8.8 KiB
316 lines
8.8 KiB
package http |
|
|
|
import ( |
|
"encoding/base64" |
|
"fmt" |
|
"net/http" |
|
"net/url" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/interface/main/app-wall/dao/padding" |
|
"go-common/app/interface/main/app-wall/model" |
|
"go-common/library/ecode" |
|
log "go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/net/metadata" |
|
) |
|
|
|
// wallShikeClick |
|
func wallShikeClick(c *bm.Context) { |
|
params := c.Request.Form |
|
// ip uint32, cid, mac, idfa, cb |
|
appid := params.Get("appid") |
|
mac := params.Get("mac") |
|
idfa := params.Get("idfa") |
|
cb := params.Get("cb") |
|
cid := model.ChannelShike |
|
if appid != model.GdtIOSAppID { |
|
log.Error("gdt click wrong appid(%s)", appid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if cid == "" || idfa == "" || cb == "" { |
|
log.Error("arg cid(%s) mac(%s) idfa(%s) callback(%s) is empty", cid, idfa, cb) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
ip := model.InetAtoN(metadata.String(c, metadata.RemoteIP)) |
|
if err := offerSvc.Click(c, ip, cid, mac, idfa, cb, time.Now()); err != nil { |
|
log.Error("offerSvc.Click error(%v)", err) |
|
c.JSON(nil, ecode.NotModified) |
|
return |
|
} |
|
res := map[string]interface{}{} |
|
res["code"] = ecode.OK |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
// wallGdtClick |
|
func wallGdtClick(c *bm.Context) { |
|
params := c.Request.Form |
|
appID := params.Get("appid") |
|
muid := params.Get("muid") |
|
var now time.Time |
|
ts, _ := strconv.ParseInt(params.Get("click_time"), 10, 64) |
|
if ts != 0 { |
|
now = time.Unix(ts, 0) |
|
} else { |
|
now = time.Now() |
|
} |
|
clickid := params.Get("click_id") |
|
adid := params.Get("advertiser_id") |
|
appType := params.Get("app_type") |
|
if id, ok := model.AppIDGdt[appType]; !ok || appID != id { |
|
log.Error("wallGdtClick app_type(%s) and appid(%s) is illegal", appType, appID) |
|
res := map[string]interface{}{"ret": ecode.RequestErr} |
|
returnDataJSON(c, res, nil) |
|
return |
|
} |
|
if _, ok := model.ChannelGdt[adid]; !ok { |
|
log.Error("wallGdtClick advertiser_id(%s) is illegal", adid) |
|
res := map[string]interface{}{"ret": ecode.RequestErr} |
|
returnDataJSON(c, res, nil) |
|
return |
|
} |
|
ip := model.InetAtoN(metadata.String(c, metadata.RemoteIP)) |
|
if appType == model.TypeIOS { |
|
if err := offerSvc.Click(c, ip, adid, "", muid, clickid, now); err != nil { |
|
log.Error("wallGdtClick %+v", err) |
|
res := map[string]interface{}{"ret": ecode.ServerErr} |
|
returnDataJSON(c, res, nil) |
|
return |
|
} |
|
} else if appType == model.TypeAndriod { |
|
if err := offerSvc.ANClick(c, adid, muid, "", "", clickid, ip, now); err != nil { |
|
log.Error("wallGdtClick %+v", err) |
|
res := map[string]interface{}{"ret": ecode.ServerErr} |
|
returnDataJSON(c, res, nil) |
|
return |
|
} |
|
} |
|
res := map[string]interface{}{"ret": ecode.OK} |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
// wallTestActive |
|
func wallTestActive(c *bm.Context) { |
|
params := c.Request.Form |
|
idfa := params.Get("idfa") |
|
if idfa == "" { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
ip := model.InetAtoN(metadata.String(c, metadata.RemoteIP)) |
|
if err := offerSvc.Active(c, ip, "0", "", "", idfa, "test by haogw", time.Now()); err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
res := map[string]interface{}{ |
|
"code": ecode.OK, |
|
} |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
// wallActive |
|
func wallActive(c *bm.Context) { |
|
var ( |
|
_aesKey = []byte("iHiRzNVIy8mvc4HnKPKeiJEP90zycllH") |
|
_aesIv = []byte("w4gQHf5M7RQdBq2U") |
|
) |
|
body := c.Request.Form.Get("body") |
|
if body == "" { |
|
log.Error("body is empty") |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
log.Info("body before base64 (%v)", body) |
|
paramBody := c.Request.Form |
|
appkey := paramBody.Get("appkey") |
|
appver := paramBody.Get("appver") |
|
build := paramBody.Get("build") |
|
device := paramBody.Get("device") |
|
filtered := paramBody.Get("filtered") |
|
mobiApp := paramBody.Get("mobi_app") |
|
sign := paramBody.Get("sign") |
|
log.Info("appkey: (%v)\n appver: (%v)\n build: (%v)\n device: (%v)\n filtered: (%v)\n mobi_app: (%v)\n sign: (%v)", appkey, appver, build, device, filtered, mobiApp, sign) |
|
bs, err := base64.StdEncoding.DecodeString(body) |
|
if err != nil { |
|
log.Error("base64.StdEncoding.DecodeString(%s) error(%v)", body, err) |
|
c.JSON(nil, ecode.SignCheckErr) |
|
return |
|
} |
|
bs, err = offerSvc.CBCDecrypt(bs, _aesKey, _aesIv, padding.PKCS5) |
|
if err != nil { |
|
log.Error("aes.CBCDecrypt(%s) error(%v)", base64.StdEncoding.EncodeToString(bs), err) |
|
c.JSON(nil, ecode.SignCheckErr) |
|
return |
|
} |
|
params, err := url.ParseQuery(string(bs)) |
|
if err != nil { |
|
log.Error("url.ParseQuery(%s) error(%v)", bs, err) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
rmac := params.Get("rmac") |
|
mac := params.Get("mac") |
|
idfa := params.Get("idfa") |
|
name := params.Get("name") |
|
log.Info("rmac: (%v)\n mac: (%v)\n idfa: (%v)\n name: (%v)\n", rmac, mac, idfa, name) |
|
if idfa == "" || name == "" || strings.Contains(idfa, "-") || strings.Contains(rmac, ":") || strings.Contains(mac, ":") { |
|
log.Error("mac(%s) rmac(%s) idfa(%s) format error, or idfa(%s) name(%s) is empty", mac, rmac, idfa, idfa, name) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
ip := model.InetAtoN(metadata.String(c, metadata.RemoteIP)) |
|
var ( |
|
mid int64 |
|
) |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
log.Info("mid: (%d)", mid) |
|
err = offerSvc.Active(c, ip, strconv.FormatInt(mid, 10), rmac, mac, idfa, name, time.Now()) |
|
if err != nil { |
|
log.Error("offerSvc.Active(%d, %d, %s, %s, %s, %s) error(%v)", ip, mid, rmac, mac, idfa, name, err) |
|
c.JSON(nil, ecode.NotModified) |
|
return |
|
} |
|
log.Info("wall offer active idfa(%s)", idfa) |
|
res := map[string]interface{}{ |
|
"code": ecode.OK, |
|
} |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
func wallExist(c *bm.Context) { |
|
params := c.Request.Form |
|
// ip uint32, cid, mac, idfa, cb |
|
appID := params.Get("appid") |
|
idfa := params.Get("idfa") |
|
if (appID != model.GdtIOSAppID && appID != model.GdtAndroidAppID) || idfa == "" { |
|
log.Error("arg cid(%s) idfa(%s) is empty", appID, idfa) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
|
|
exist, _ := offerSvc.Exists(c, strings.Replace(idfa, "-", "", -1)) |
|
const ( |
|
ret = `{"%s":"%d"}` |
|
) |
|
e := 1 |
|
if !exist { |
|
e = 0 |
|
} |
|
bs := []byte(fmt.Sprintf(ret, idfa, e)) |
|
if _, err := c.Writer.Write(bs); err != nil { |
|
log.Error("w.Write error(%v)", err) |
|
} |
|
res := map[string]interface{}{ |
|
"code": ecode.OK, |
|
} |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
func wallDotinappClick(c *bm.Context) { |
|
params := c.Request.Form |
|
appid := params.Get("appid") |
|
// pid := params.Get("pid") |
|
// subid := params.Get("subid") |
|
// ua := params.Get("ua") |
|
idfa := params.Get("idfa") |
|
clickid := params.Get("clickid") |
|
pid := model.ChannelDontin |
|
if appid != model.GdtIOSAppID { |
|
log.Error("dotinapp click wrong appid(%s)", appid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if pid == "" || idfa == "" || clickid == "" { |
|
log.Error("pid(%s) idfa(%s) clickid(%s) is empty", pid, idfa, clickid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
ip := model.InetAtoN(metadata.String(c, metadata.RemoteIP)) |
|
if err := offerSvc.Click(c, ip, pid, "", idfa, clickid, time.Now()); err != nil { |
|
log.Error("offerSvc.Click error(%v)", err) |
|
c.JSON(nil, ecode.NotModified) |
|
return |
|
} |
|
res := map[string]interface{}{ |
|
"code": ecode.OK, |
|
} |
|
returnDataJSON(c, res, nil) |
|
} |
|
|
|
func wallToutiaoClick(c *bm.Context) { |
|
const ( |
|
OSAndroid = "0" |
|
// OSIOS = "1" |
|
) |
|
params := c.Request.Form |
|
os := params.Get("os") |
|
if os != OSAndroid { |
|
log.Error("wallToutiaoClick os(%s) is illegal", os) |
|
c.AbortWithStatus(http.StatusBadRequest) |
|
return |
|
} |
|
imei := params.Get("imei") |
|
androidid := params.Get("androidid") |
|
if imei == "" && androidid == "" { |
|
log.Error("wallToutiaoClick imei(%s) and androidid(%s) is illegal", imei, androidid) |
|
c.AbortWithStatus(http.StatusBadRequest) |
|
return |
|
} |
|
cb := params.Get("callback_url") |
|
if cb == "" { |
|
log.Error("wallToutiaoClick callback_url(%s) is illegal", cb) |
|
c.AbortWithStatus(http.StatusBadRequest) |
|
return |
|
} |
|
mac := params.Get("mac") |
|
ip := model.InetAtoN(params.Get("ip")) |
|
var now time.Time |
|
ts, _ := strconv.ParseInt(params.Get("timestamp"), 10, 64) |
|
if ts != 0 { |
|
now = time.Unix(0, ts*1e6) |
|
} else { |
|
now = time.Now() |
|
} |
|
if os == OSAndroid { |
|
if err := offerSvc.ANClick(c, model.ChannelToutiao, imei, androidid, mac, cb, ip, now); err != nil { |
|
log.Error("%+v", err) |
|
c.AbortWithStatus(http.StatusInternalServerError) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func wallActive2(c *bm.Context) { |
|
params := c.Request.Form |
|
os := params.Get("os") |
|
if _, ok := model.AppIDGdt[os]; !ok { |
|
log.Error("wallActive2 os(%s) is illegal", os) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
if os != model.TypeAndriod { |
|
log.Error("wallActive2 os(%s) is illegal", os) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
imei := params.Get("imei") |
|
androidid := params.Get("androidid") |
|
if imei == "" && androidid == "" { |
|
log.Error("wallActive2 imei(%s) and androidid(%s) is illegal", imei, androidid) |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
mac := params.Get("mac") |
|
err := offerSvc.ANActive(c, imei, androidid, mac, time.Now()) |
|
if err != nil { |
|
log.Error("wallActive2 %+v", err) |
|
} |
|
c.JSON(nil, err) |
|
}
|
|
|