123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- 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)
- }
|