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,85 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"app_info.go",
"card.go",
"coupon.go",
"geetest.go",
"http.go",
"invite.go",
"medal.go",
"member.go",
"notice.go",
"passport.go",
"pendant.go",
"pendant_new.go",
"point.go",
"realname.go",
"relation.go",
"remotelogin.go",
"sudo.go",
"vip.go",
"vip_associate.go",
"vip_third.go",
"vip_welfare.go",
"web_info.go",
],
importpath = "go-common/app/interface/main/account/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/account/conf:go_default_library",
"//app/interface/main/account/model:go_default_library",
"//app/interface/main/account/service/card:go_default_library",
"//app/interface/main/account/service/coupon:go_default_library",
"//app/interface/main/account/service/geetest:go_default_library",
"//app/interface/main/account/service/member:go_default_library",
"//app/interface/main/account/service/passport:go_default_library",
"//app/interface/main/account/service/point:go_default_library",
"//app/interface/main/account/service/realname:go_default_library",
"//app/interface/main/account/service/relation:go_default_library",
"//app/interface/main/account/service/usersuit:go_default_library",
"//app/interface/main/account/service/vip:go_default_library",
"//app/service/main/card/api/grpc/v1:go_default_library",
"//app/service/main/coupon/api:go_default_library",
"//app/service/main/coupon/model:go_default_library",
"//app/service/main/identify/api/grpc:go_default_library",
"//app/service/main/point/model:go_default_library",
"//app/service/main/relation/model:go_default_library",
"//app/service/main/usersuit/model:go_default_library",
"//app/service/main/vip/api:go_default_library",
"//app/service/main/vip/model:go_default_library",
"//app/service/main/vip/verify: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/antispam:go_default_library",
"//library/net/http/blademaster/middleware/auth:go_default_library",
"//library/net/http/blademaster/middleware/supervisor:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/metadata:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/pkg/errors: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,173 @@
package http
import (
"io/ioutil"
"net/http"
"strconv"
usrmdl "go-common/app/service/main/usersuit/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func updateFace(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
defer c.Request.Form.Del("face") // 防止日志不出现
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.Request.ParseMultipartForm(32 << 20)
face, err := func() ([]byte, error) {
fs := c.Request.FormValue("face")
if fs != "" {
log.Info("Succeeded to parse face file from form value: mid: %d, length: %d", mid, len(fs))
return []byte(fs), nil
}
log.Warn("Failed to parse face file from form value, fallback to form file: mid: %d", mid)
f, _, err := c.Request.FormFile("face")
if err != nil {
return nil, errors.Wrapf(err, "parse face form file: mid: %d", mid)
}
defer f.Close()
data, err := ioutil.ReadAll(f)
if err != nil {
return nil, errors.Wrapf(err, "read face form file: mid: %d", mid)
}
if len(data) <= 0 {
return nil, errors.Wrapf(err, "form file data: mid: %d, length: %d", mid, len(data))
}
log.Info("Succeeded to parse file from form file: mid: %d, length: %d", mid, len(data))
return data, nil
}()
if err != nil {
log.Error("Failed to parse face file: mid: %d: %+v", mid, err)
c.JSON(nil, ecode.RequestErr)
return
}
log.Info("Succeeded to parse face data: mid: %d, face-length: %d", mid, len(face))
if len(face) > 2*1024*1024 {
c.JSON(nil, ecode.UpdateFaceSize)
return
}
ftype := http.DetectContentType(face)
if ftype != "image/jpeg" && ftype != "image/png" && ftype != "image/jp2" {
c.JSON(nil, ecode.UpdateFaceFormat)
return
}
c.JSON(memberSvc.UpdateFace(c, mid.(int64), face, ftype))
}
func updateSex(c *bm.Context) {
var (
err error
sex int64
//ip = c.RemoteIP()
params = c.Request.Form
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
if sex, err = strconv.ParseInt(params.Get("sex"), 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, memberSvc.UpdateSex(c, mid.(int64), sex))
}
func updateSign(c *bm.Context) {
var (
//ip = c.RemoteIP()
params = c.Request.Form
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
sign := params.Get("user_sign")
c.JSON(nil, memberSvc.UpdateSign(c, mid.(int64), sign))
}
func updateBirthday(c *bm.Context) {
var (
birthday string
//ip = c.RemoteIP()
params = c.Request.Form
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
if birthday = params.Get("birthday"); len(birthday) == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, memberSvc.UpdateBirthday(c, mid.(int64), birthday))
}
func updateUname(c *bm.Context) {
var (
uname string
//ip = c.RemoteIP()
params = c.Request.Form
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
if uname = params.Get("uname"); len(uname) == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, memberSvc.UpdateName(c, mid.(int64), uname, params.Get("appkey")))
}
func nickFree(c *bm.Context) {
var (
mid, ok = c.Get("mid")
//ip = c.RemoteIP()
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.NickFree(c, mid.(int64)))
}
func pendantEquip(c *bm.Context) {
var (
mid, ok = c.Get("mid")
params = c.Request.Form
err error
pid int64
status int64
source int64
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
if pid, err = strconv.ParseInt(params.Get("pid"), 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if status, err = strconv.ParseInt(params.Get("status"), 10, 64); err != nil || (status != usrmdl.PendantPutOn && status != usrmdl.PendantPickOff) {
c.JSON(nil, ecode.RequestErr)
return
}
// source 挂件来源 可选, 默认0 0未知 1 背包挂件 2大会员挂件
source = usrmdl.ParseSource(params.Get("source"))
c.JSON(nil, usSvc.Equip(c, mid.(int64), pid, int8(status), source))
}

View File

@ -0,0 +1,71 @@
package http
import (
"go-common/app/interface/main/account/model"
cardv1 "go-common/app/service/main/card/api/grpc/v1"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func userCard(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(cardSvc.UserCard(c, mid.(int64)))
}
func cardInfo(c *bm.Context) {
var err error
arg := new(model.ArgCardID)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(cardSvc.Card(c, arg.ID))
}
func cardHots(c *bm.Context) {
c.JSON(cardSvc.CardHots(c))
}
func cardGroups(c *bm.Context) {
var mid int64
midi, exists := c.Get("mid")
if exists {
mid = midi.(int64)
}
c.JSON(cardSvc.AllGroup(c, mid))
}
func cardsByGid(c *bm.Context) {
var err error
arg := new(model.ArgGroupID)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(cardSvc.CardsByGid(c, arg.ID))
}
func equip(c *bm.Context) {
var err error
arg := new(model.ArgCardID)
if err = c.Bind(arg); err != nil {
return
}
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(nil, cardSvc.Equip(c, &cardv1.ModelArgEquip{Mid: mid.(int64), CardId: arg.ID}))
}
func demount(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(nil, cardSvc.Demount(c, mid.(int64)))
}

View File

@ -0,0 +1,111 @@
package http
import (
"go-common/app/interface/main/account/model"
v1 "go-common/app/service/main/coupon/api"
col "go-common/app/service/main/coupon/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
func allowanceList(c *bm.Context) {
var (
err error
)
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
arg := new(model.ArgAllowanceList)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(couponSvc.AllowanceList(c, mid.(int64), arg.State))
}
func couponPage(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
arg := new(model.ArgCouponPage)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(couponSvc.CouponPage(c, &col.ArgRPCPage{
Mid: mid.(int64),
State: arg.State,
Pn: arg.Pn,
Ps: arg.Ps,
}))
}
// func couponCartoonPage(c *bm.Context) {
// var err error
// mid, exists := c.Get("mid")
// if !exists {
// c.JSON(nil, ecode.AccountNotLogin)
// return
// }
// arg := new(model.ArgCouponPage)
// if err = c.Bind(arg); err != nil {
// return
// }
// c.JSON(couponSvc.CouponCartoonPage(c, &col.ArgRPCPage{
// Mid: mid.(int64),
// State: arg.State,
// Pn: arg.Pn,
// Ps: arg.Ps,
// }))
// }
func prizeCards(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(couponSvc.PrizeCards(c, &col.ArgCount{Mid: mid.(int64)}))
}
func prizeDraw(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
arg := new(model.ArgPrizeDraw)
if err = c.Bind(arg); err != nil {
return
}
if arg.CardType == -1 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(couponSvc.PrizeDraw(c, &col.ArgPrizeDraw{Mid: mid.(int64), CardType: arg.CardType}))
}
func captchaToken(c *bm.Context) {
c.JSON(couponSvc.CaptchaToken(c, &v1.CaptchaTokenReq{Ip: metadata.String(c, metadata.RemoteIP)}))
}
func useCouponCode(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
arg := new(col.ArgUseCouponCode)
if err = c.Bind(arg); err != nil {
return
}
arg.IP = metadata.String(c, metadata.RemoteIP)
arg.Mid = mid.(int64)
c.JSON(couponSvc.UseCouponCode(c, arg))
}

View File

@ -0,0 +1,51 @@
package http
import (
"strings"
"go-common/app/interface/main/account/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// getChallenge get geetest params gt ,challenge
func getChallenge(c *bm.Context) {
params := new(model.GeeCaptchaRequest)
var (
mid, ok = c.Get("mid")
mobile = strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag)
)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
if mobile {
params.ClientType = model.PlatH5
} else {
params.ClientType = model.PlatPC
}
params.MID = mid.(int64)
c.JSON(geetestSvr.PreProcess(c, params))
}
func geetestValidate(c *bm.Context) {
params := new(model.GeeCheckRequest)
if err := c.Bind(params); err != nil {
return
}
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
params.MID = mid.(int64)
if params.MID == 0 {
c.JSON(nil, ecode.RequestErr)
}
if strings.Contains(c.Request.UserAgent(), model.MobileUserAgentFlag) {
params.ClientType = model.PlatH5
} else {
params.ClientType = model.PlatPC
}
c.JSON(geetestSvr.Validate(c, params), nil)
}

View File

@ -0,0 +1,355 @@
package http
import (
"net/http"
"go-common/app/interface/main/account/conf"
"go-common/app/interface/main/account/service/card"
"go-common/app/interface/main/account/service/coupon"
"go-common/app/interface/main/account/service/geetest"
"go-common/app/interface/main/account/service/member"
"go-common/app/interface/main/account/service/passport"
"go-common/app/interface/main/account/service/point"
"go-common/app/interface/main/account/service/realname"
rls "go-common/app/interface/main/account/service/relation"
us "go-common/app/interface/main/account/service/usersuit"
"go-common/app/interface/main/account/service/vip"
vipverify "go-common/app/service/main/vip/verify"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/antispam"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/http/blademaster/middleware/supervisor"
v "go-common/library/net/http/blademaster/middleware/verify"
)
var (
relationSvc *rls.Service
memberSvc *member.Service
passSvc *passport.Service
vipSvc *vip.Service
realnameSvc *realname.Service
usSvc *us.Service
couponSvc *coupon.Service
pointSvc *point.Service
cardSvc *card.Service
geetestSvr *geetest.Service
// api middleware
authn *auth.Auth
verify *v.Verify
anti *antispam.Antispam
batchRelAnti *antispam.Antispam
smsAnti *antispam.Antispam
faceAnti *antispam.Antispam
vipAnti *antispam.Antispam
spv *supervisor.Supervisor
// vip third verify
vipThirdVerify *vipverify.Verify
)
// Init init http sever instance.
func Init(c *conf.Config) {
// service
initService(c)
vipThirdVerify = vipverify.NewThirdVerify(c.VipThirdVerifyConfig)
// init outer router
// innerEngine := bm.DefaultServer(c.BM.Inner)
innerEngine := bm.NewServer(c.BM.Inner)
innerEngine.Use(bm.Recovery(), bm.Trace(), bm.Logger(), bm.Mobile())
setupInnerEngine(innerEngine)
if err := innerEngine.Start(); err != nil {
log.Error("innerEngine.Start() error(%v)", err)
panic(err)
}
}
func setupInnerEngine(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
// member
mr := e.Group("/x/member", bm.CSRF())
mr.GET("/notice", authn.User, notice)
mr.POST("/notice/close", authn.User, closeNotice)
sec := mr.Group("/security", authn.User)
sec.GET("/status", status)
sec.POST("/feedback", feedback)
sec.POST("/close", closeNotify)
app := mr.Group("/app", authn.UserMobile)
app.GET("/nickfree", nickFree)
app.POST("/uname/update", spv.ServeHTTP, updateUname)
app.POST("/sign/update", spv.ServeHTTP, updateSign)
app.POST("/sex/update", updateSex)
app.POST("/birthday/update", updateBirthday)
app.POST("/face/update", spv.ServeHTTP, faceAnti.ServeHTTP, updateFace)
app.POST("/pendant/equip", pendantEquip)
app.GET("/point/flag", pointFlagMobile)
web := mr.Group("/web", authn.User)
web.POST("/update", spv.ServeHTTP, update)
web.POST("/face/update", spv.ServeHTTP, faceAnti.ServeHTTP, updateFace)
web.POST("/sign/update", spv.ServeHTTP, updateSign)
web.POST("/uname/update", spv.ServeHTTP, updateUname)
web.GET("/account", account)
web.GET("/reply/list", replyHistoryList)
web.GET("/coin/log", logCoin)
web.GET("/moral/log", logMoral)
web.GET("/exp/log", logExp)
web.GET("/exp/reward", reward)
web.GET("/login/log", logLogin)
web.GET("/coin", coin)
web.POST("/birthday/update", updateBirthday)
web.POST("/pendant/equip", pendantEquip)
web.GET("/point/flag", pointFlag)
sudo := mr.Group("/sudo", sudo)
sudo.POST("/notify-purge-cache", notityPurgeCache)
// captcha 验证码
cap := mr.Group("/captcha", authn.UserWeb)
cap.GET("/geetest", getChallenge) //获取极验图形验证
cap.POST("/geetest/check", geetestValidate) //校验极验验证码
// vip
vip := e.Group("/x/vip", bm.CSRF())
vip.GET("/code/verify", authn.User, codeVerify)
vip.POST("/code/open", authn.User, codeOpen)
vip.GET("/tips", authn.User, tips)
vip.GET("/price/panel", authn.User, vipAnti.ServeHTTP, vipPanel)
vip.GET("/coupon/list", authn.User, vipAnti.ServeHTTP, couponList)
vip.GET("/coupon/usable", authn.User, vipAnti.ServeHTTP, couponUsable)
vip.POST("/coupon/unlock", authn.User, vipAnti.ServeHTTP, couponUnlock)
vip.GET("/privilege/bysid", vipAnti.ServeHTTP, privilegeBySid)
vip.GET("/privilege/bytype", vipAnti.ServeHTTP, privilegeByType)
vip.GET("/manager", authn.User, vipAnti.ServeHTTP, vipManagerInfo)
vip.POST("/unfreeze", authn.UserWeb, vipAnti.ServeHTTP, unfrozen)
vip.GET("/frozenTime", authn.UserWeb, vipAnti.ServeHTTP, frozenTime)
vip.GET("/code/openeds", vipAnti.ServeHTTP, codeOpeneds)
vip.GET("/public/panel", authn.Guest, vipAnti.ServeHTTP, publicPriceList)
vip.POST("/batch/use", vipAnti.ServeHTTP, useBatch)
vip.GET("/order/status", authn.UserWeb, orderStatus)
vip.GET("/price/panel/v8", authn.Guest, vipAnti.ServeHTTP, vipPanelV8)
vip.GET("/prize/cards", authn.UserWeb, vipAnti.ServeHTTP, prizeCards)
vip.POST("/prize/draw", authn.UserWeb, vipAnti.ServeHTTP, prizeDraw)
vip.GET("/resource/banner", authn.UserMobile, vipAnti.ServeHTTP, resourceBanner) // 大会员落地页
vip.GET("/resource/buy", authn.UserMobile, vipAnti.ServeHTTP, resourceBuy) // 大会员购买页
vip.GET("/coupon/usable/v2", authn.Guest, vipAnti.ServeHTTP, couponBySuitIDV2)
vip.GET("/price/panel/v9", authn.Guest, vipAnti.ServeHTTP, vipPanelV9)
// associate
vip.GET("/associate/info", authn.User, bindInfoByMid)
vip.GET("/associate/panel", authn.User, actlimit, associatePanel)
vip.POST("/associate/create/order", authn.User, actlimit, createAssociateOrder)
vip.GET("/associate/ele/oauth", authn.User, actlimit, eleOAuthURL)
vip.GET("/associate/ele/redpackets", redpackets)
vip.GET("/associate/ele/specailfoods", specailfoods)
//vip welfare
vip.GET("/welfare/list", authn.Guest, welfareList)
vip.GET("/welfare/type", authn.Guest, welfareTypeList)
vip.GET("/welfare/info", authn.Guest, welfareInfo)
vip.POST("/welfare", authn.User, vipAnti.ServeHTTP, receiveWelfare)
vip.GET("/welfare/my", authn.User, myWelfare)
// vip third verify.
// ele oauth callback.
e.GET("/x/oauth2/v1/callback", authn.User, actlimit, openAuthCallBack)
// bilibili third.
oauth2 := e.Group("/x/oauth2/v1", iplimit, vipThirdVerify.Verify, bm.CSRF())
oauth2.POST("/access_token", openIDByOAuth2Code)
// bilibili third vip.
vipThird := oauth2.Group("/vip", iplimit, openlimit)
vipThird.POST("/bind", openBindByOutOpenID)
vipThird.GET("/account", userInfoByOpenID)
vipThird.POST("/delivery", bilibiliVipGrant)
vipThird.POST("/prize/grant", bilibiliPrizeGrant)
// vip app api
vip.GET("/v1/order/status", authn.UserMobile, orderStatus)
vip.GET("/v1/frozenTime", authn.UserMobile, vipAnti.ServeHTTP, frozenTime)
vip.POST("/v1/unfrozen", authn.UserMobile, vipAnti.ServeHTTP, unfrozen)
vip.GET("/v2/tips", authn.User, tipsv2)
vip.GET("/v2/price/panel", authn.Guest, vipAnti.ServeHTTP, vipPanelV2)
invite := mr.Group("/invite", authn.UserWeb)
invite.GET("/stat", inviteStat)
invite.POST("/buy", buy)
invite.POST("/apply", apply)
// medal 勋章
medal := mr.Group("/medal")
// medal.GET("/user/info", authn.User, medalHomeInfo)
medal.GET("/user/info", authn.User, medalUserInfo)
medal.POST("/install", authn.User, medalInstall)
medal.GET("/popup", authn.User, medalPopup)
medal.GET("/my/info", authn.User, medalMyInfo)
medal.GET("/all/info", authn.User, medalAllInfo)
official := mr.Group("/official", bm.CSRF(), authn.User)
official.POST("/submit", submitOffical)
official.GET("/doc", officialDoc)
official.GET("/conditions", officialConditions)
official.POST("/upload/image", uploadImage)
official.POST("/mobile/verify", smsAnti.ServeHTTP, mobileVerify)
official.GET("/permission", officialPermission)
official.GET("/auto/fill/doc", officialAutoFillDoc)
official.GET("/monthly/times", monthlyOfficialSubmittedTimes)
identifyG := mr.Group("/identify", authn.UserWeb)
identifyG.GET("/info", identifyInfo)
// realname
realnameG := mr.Group("/realname", authn.User)
realnameG.GET("/channel", realnameChannel)
realnameG.GET("/status", realnameStatus)
realnameG.GET("/apply/status", realnameApplyStatus)
realnameG.POST("/apply", realnameApply)
realnameG.POST("/upload", realnameUpload)
realnameG.GET("/preview", realnamePreview)
realnameG.GET("/countrylist", realnameCountryList)
realnameG.GET("/card/types", realnameCardTypes)
realnameG.GET("/v2/card/types", realnameCardTypesV2)
realnameG.POST("/tel/capture", realnameTelCapture)
realnameG.GET("/tel/info", realnameTelInfo)
realnameG.GET("/captcha", realnameCaptcha)
realnameG.GET("/captcha/refresh", realnameCaptchaRefresh)
realnameG.GET("/captcha/confirm", realnameCaptchaConfirm)
realnameG.POST("/alipay/apply", realnameAlipayApply)
realnameG.GET("/alipay/confirm", realnameAlipayConfirm)
// passport
passportR := mr.Group("/passport", authn.User)
passportR.GET("/testUserName", testUserName)
// member v2
memberV2 := e.Group("x/member/v2", bm.CSRF())
memberV2.GET("/notice", authn.UserMobile, noticeV2)
memberV2.POST("/notice/close", authn.UserMobile, closeNoticeV2)
// relation
relationG := e.Group("/x/relation", bm.CSRF())
relationG.GET("", authn.User, relation)
relationG.GET("/relations", authn.User, relations)
relationG.GET("/blacks", authn.User, blacks)
relationG.GET("/whispers", authn.User, whispers)
relationG.GET("/friends", authn.User, friends)
relationG.POST("/modify", authn.User, anti.ServeHTTP, modify)
relationG.POST("/batch/modify", authn.User, batchRelAnti.ServeHTTP, batchModify)
relationG.GET("/followings", authn.Guest, followings)
relationG.GET("/same/followings", authn.User, sameFollowings)
relationG.GET("/followers", authn.Guest, followers)
relationG.GET("/stat", authn.Guest, stat)
relationG.GET("/stats", authn.Guest, stats)
relationG.GET("/recommend", authn.User, recommend)
relationG.GET("/recommend/followlist_empty", authn.User, bm.Mobile(), recommendFollowlistEmpty)
relationG.GET("/recommend/answer_ok", authn.User, bm.Mobile(), recommendAnswerOK)
relationG.GET("/recommend/tag_suggest", authn.User, bm.Mobile(), recommendTagSuggest)
relationG.GET("/recommend/tag_suggest/detail", authn.User, bm.Mobile(), recommendTagSuggestDetail)
// relation tag
relationG.GET("/tag", authn.User, tag)
relationG.GET("/tags", authn.User, tags)
relationG.POST("/tag/special/add", authn.User, addSpecial)
relationG.POST("/tag/special/del", authn.User, delSpecial)
relationG.GET("/tag/special", authn.User, special)
relationG.GET("/tag/user", authn.User, tagUser)
relationG.POST("/tag/create", authn.User, tagCreate)
relationG.POST("/tag/update", authn.User, tagUpdate)
relationG.POST("/tag/del", authn.User, tagDel)
relationG.POST("/tags/addUsers", authn.User, tagsAddUsers)
relationG.POST("/tags/copyUsers", authn.User, tagsCopyUsers)
relationG.POST("/tags/moveUsers", authn.User, tagsMoveUsers)
// for mobile.
relationG.GET("/tag/m/tags", authn.User, mobileTags)
// 提示用户关注该up主
relationG.POST("/prompt", authn.User, prompt)
relationG.POST("/prompt/close", authn.User, closePrompt)
// 粉丝提醒功能
relationG.GET("/followers/unread", authn.User, unread)
relationG.POST("/followers/unread/reset", authn.User, unreadReset)
relationG.GET("/followers/unread/count", authn.User, unreadCount)
relationG.POST("/followers/unread/count/reset", authn.User, unreadCountReset)
relationG.GET("/followers/notify", authn.User, followerNotifySetting)
relationG.POST("/followers/notify/enable", authn.User, enableFollowerNotify)
relationG.POST("/followers/notify/disable", authn.User, disableFollowerNotify)
// achieve
relationG.POST("/achieve/award/get", authn.User, achieveGet)
relationG.GET("/achieve/award", authn.Guest, achieve)
// pendant group
pendant := e.Group("/x/pendant", bm.CSRF())
// pendant with web
pendant.GET("/current", authn.UserWeb, pendantCurrent)
pendant.GET("/all", authn.UserWeb, pendantAll)
pendant.GET("/my", authn.UserWeb, pendantMy)
pendant.GET("/myHistory", authn.UserWeb, pendantMyHistory)
pendant.GET("/bigEntry", authn.UserWeb, pendantEntry)
pendant.GET("/vipRecommend", authn.UserWeb, pendantVIP)
pendant.POST("/checkOrder", authn.UserWeb, pendantCheckOrder)
pendant.POST("/vipGet", authn.UserWeb, pendantVIPGet)
pendant.POST("/order", authn.UserWeb, pendantOrder)
// pendant with app
pendant.GET("/pointEntry", authn.UserMobile, pendantEntry)
// pendent with vri
pendant.GET("/single", verify.Verify, pendantSingle)
coupon := e.Group("/x/coupon", bm.CSRF(), authn.User)
coupon.GET("/allowance/list", allowanceList)
coupon.GET("/list", couponPage)
coupon.GET("/code/verify", captchaToken)
coupon.POST("/code/exchange", useCouponCode)
point := e.Group("/x/point", bm.CSRF(), authn.User)
point.GET("/info", pointInfo)
point.GET("/history", pointPage)
card := e.Group("/x/card", bm.CSRF())
card.GET("/bymid", authn.User, userCard)
card.GET("/info", cardInfo)
card.GET("/hots", cardHots)
card.GET("/groups", authn.Guest, cardGroups)
card.GET("/bytype", cardsByGid)
card.POST("/equip", authn.User, equip)
card.POST("/demount", authn.User, demount)
}
// ping check server ok.
func ping(c *bm.Context) {
var err error
if err = memberSvc.Ping(c); err != nil {
c.JSON(nil, err)
log.Error("service ping error(%v)", err)
c.Writer.WriteHeader(http.StatusServiceUnavailable)
}
}
func register(ctx *bm.Context) {
ctx.JSON(nil, nil)
}
func initService(c *conf.Config) {
relationSvc = rls.New(c)
memberSvc = member.New(c)
realnameSvc = realname.New(c, conf.RsaPub(), conf.RsaPriv(), conf.AlipayPub(), conf.AlipayBiliPriv())
passSvc = passport.New(c)
cardSvc = card.New(c)
vipSvc = vip.New(c)
usSvc = us.New(c)
geetestSvr = geetest.New(c)
// api middleware
authn = auth.New(c.AuthN)
verify = v.New(c.Verify)
anti = antispam.New(c.Antispam)
batchRelAnti = antispam.New(c.BatchRelAntispam)
smsAnti = antispam.New(c.SMSAntispam)
faceAnti = antispam.New(c.FaceAntispam)
vipAnti = antispam.New(c.VIPAntispam)
spv = supervisor.New(c.Supervisor)
couponSvc = coupon.New(c)
pointSvc = point.New(c)
}

View File

@ -0,0 +1,70 @@
package http
import (
"strconv"
"go-common/app/interface/main/account/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// stat get invite stat.
func inviteStat(c *bm.Context) {
mid, _ := c.Get("mid")
var err error
var stat *model.RichInviteStat
if stat, err = usSvc.Stat(c, mid.(int64)); err != nil {
log.Error("memberService.Stat(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(stat, nil)
}
// buy buy invite code.
func buy(c *bm.Context) {
mid, _ := c.Get("mid")
var err error
var num int64
req := c.Request.Form
numStr := req.Get("num")
if num, err = strconv.ParseInt(numStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
geeParam := new(model.GeeCheckRequest)
if err = c.Bind(geeParam); err != nil {
return
}
geeParam.MID = mid.(int64)
if isPass := geetestSvr.Validate(c, geeParam); !isPass {
c.JSON(nil, ecode.CaptchaErr)
return
}
var invs []*model.RichInvite
if invs, err = usSvc.Buy(c, mid.(int64), num); err != nil {
log.Error("memberService.Buy(%d, %d) error(%v)", mid, num, err)
c.JSON(nil, err)
return
}
c.JSON(invs, nil)
}
// apply apply invite code.
func apply(c *bm.Context) {
mid, _ := c.Get("mid")
var err error
var num int64
code := c.Request.Form.Get("invite_code")
if code == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if err = usSvc.Apply(c, mid.(int64), code, c.Request.Header.Get("Cookie")); err != nil {
log.Error("memberService.Apply(%d, %d) error(%v)", mid, num, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}

View File

@ -0,0 +1,84 @@
package http
import (
"strconv"
"go-common/app/service/main/usersuit/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func medalUserInfo(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
//ip = c.RemoteIP()
data *model.MedalUserInfo
)
if data, err = memberSvc.MedalUserInfo(c, mid.(int64)); err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}
func medalInstall(c *bm.Context) {
var (
err error
nid, isActivated int64
mid, _ = c.Get("mid")
)
nidStr := c.Request.Form.Get("nid")
if nid, err = strconv.ParseInt(nidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
isActivatedStr := c.Request.Form.Get("isActivated")
if isActivated, err = strconv.ParseInt(isActivatedStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
err = memberSvc.MedalInstall(c, mid.(int64), nid, int8(isActivated))
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func medalPopup(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
data *model.MedalPopup
)
if data, err = memberSvc.MedalPopup(c, mid.(int64)); err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}
func medalMyInfo(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
data, err := memberSvc.MedalMyInfo(c, mid.(int64))
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}
func medalAllInfo(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
data, err := memberSvc.MedalAllInfo(c, mid.(int64))
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(data, nil)
}

View File

@ -0,0 +1,133 @@
package http
import (
"io/ioutil"
"net/http"
"go-common/app/interface/main/account/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func identifyInfo(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
var (
resData struct {
Status model.IdentifyStatus `json:"identification"`
}
status int8
err error
)
if status, err = realnameSvc.Status(c, mid.(int64)); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
switch status {
case 1:
resData.Status = model.IdentifyOK
case 0:
resData.Status = model.IdentifyNotOK
}
c.JSON(resData, nil)
}
func submitOffical(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
params := new(model.OfficialApply)
if err := c.Bind(params); err != nil {
return
}
c.JSON(nil, memberSvc.SubmitOfficial(c, mid.(int64), params))
}
func officialDoc(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(memberSvc.OfficialDoc(c, mid.(int64)))
}
func officialConditions(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(memberSvc.OfficialConditions(c, mid.(int64)))
}
func uploadImage(c *bm.Context) {
midI, _ := c.Get("mid")
mid := midI.(int64)
log.Infov(c, log.KV("log", "account-interface: upload image"), log.KV("mid", mid))
file, _, err := c.Request.FormFile("file")
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
defer file.Close()
bs, err := ioutil.ReadAll(file)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ftype := http.DetectContentType(bs)
if ftype != "image/jpeg" && ftype != "image/jpg" && ftype != "image/png" && ftype != "image/gif" {
log.Error("account-interface: file type not allow file type(%s, mid: %v)", ftype, mid)
c.JSON(nil, ecode.RequestErr)
return
}
url, err := memberSvc.UploadImage(c, ftype, bs)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"url": url,
"size": len(bs),
}, nil)
}
func mobileVerify(c *bm.Context) {
midI, _ := c.Get("mid")
arg := &model.ArgMobileVerify{}
if err := c.Bind(arg); err != nil {
return
}
if arg.Country == 0 {
arg.Country = 86
}
c.JSON(nil, memberSvc.MobileVerify(c, midI.(int64), arg.Mobile, arg.Country))
}
func officialPermission(ctx *bm.Context) {
resp := &model.OfficialPermissionResponse{
DeniedRoles: []int8{},
Metadata: map[string]interface{}{},
}
ctx.JSON(resp, nil)
}
func monthlyOfficialSubmittedTimes(ctx *bm.Context) {
midI, _ := ctx.Get("mid")
ctx.JSON(memberSvc.MonthlyOfficialSubmittedTimes(ctx, midI.(int64)), nil)
}
func officialAutoFillDoc(ctx *bm.Context) {
midI, _ := ctx.Get("mid")
ctx.JSON(memberSvc.OfficialAutoFillDoc(ctx, midI.(int64)))
}

View File

@ -0,0 +1,63 @@
package http
import (
"strconv"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func notice(c *bm.Context) {
c.JSON(struct{}{}, nil)
}
func closeNotice(c *bm.Context) {
c.JSON(struct{}{}, nil)
}
func noticeV2(c *bm.Context) {
var (
params = c.Request.Form
pf string
build int64
)
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
uuid := params.Get("uuid")
if uuid == "" {
c.JSON(nil, ecode.RequestErr)
return
}
pf = params.Get("platform")
build, _ = strconv.ParseInt(params.Get("build"), 10, 64)
n, err := memberSvc.NoticeV2(c, mid.(int64), uuid, pf, build)
if err != nil {
log.Error("memberSvc.NoticeV2(%d, %s) error(%v)", mid, uuid, err)
c.JSON(nil, err)
return
}
c.JSON(n, nil)
}
func closeNoticeV2(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
uuid := c.Request.Form.Get("uuid")
if uuid == "" {
c.JSON(nil, ecode.RequestErr)
return
}
err := memberSvc.CloseNoticeV2(c, mid.(int64), uuid)
if err != nil {
log.Error("memberSvc.CloseNoticeV2(%d, %s) error(%v)", mid, uuid, err)
c.JSON(nil, err)
}
c.JSON(nil, nil)
}

View File

@ -0,0 +1,20 @@
package http
import (
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func testUserName(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
name := c.Request.Form.Get("name")
if name == "" {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, passSvc.TestUserName(c, name, mid.(int64)))
}

View File

@ -0,0 +1,166 @@
package http
import (
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"strconv"
)
func pendantAll(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(usSvc.Group(c, mid.(int64)))
}
func pendantMy(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(usSvc.My(c, mid.(int64)))
}
func pendantMyHistory(c *bm.Context) {
//ip := c.RemoteIP()
mid, ok := c.Get("mid")
pageStr := c.Request.Form.Get("page")
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
page, _ := strconv.ParseInt(pageStr, 10, 64)
c.JSON(usSvc.MyHistory(c, mid.(int64), page))
}
func pendantCurrent(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(usSvc.Equipment(c, mid.(int64)))
}
func pendantEntry(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(usSvc.GroupEntry(c, mid.(int64)))
}
func pendantSingle(c *bm.Context) {
pidStr := c.Request.Form.Get("pid")
//ip := c.RemoteIP()
pid, err := strconv.ParseInt(pidStr, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(usSvc.Pendant(c, pid))
}
func pendantVIP(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(usSvc.GroupVIP(c, mid.(int64)))
}
func pendantCheckOrder(c *bm.Context) {
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
orderID := c.Request.Form.Get("orderId")
c.JSON(nil, usSvc.CheckOrder(c, mid.(int64), orderID))
}
func pendantVIPGet(c *bm.Context) {
params := c.Request.Form
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
pidStr := params.Get("pid")
pid, err := strconv.ParseInt(pidStr, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
if pid == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
activatedStr := params.Get("isActivated")
activated, err := strconv.Atoi(activatedStr)
if err != nil {
c.JSON(nil, err)
return
}
if activated == 0 {
activated = 1
} else {
activated = 2
}
c.JSON(nil, usSvc.VipGet(c, mid.(int64), pid, int8(activated)))
}
func pendantOrder(c *bm.Context) {
params := c.Request.Form
mid, ok := c.Get("mid")
//ip := c.RemoteIP()
if !ok {
c.JSON(nil, ecode.AccountNotLogin)
return
}
pidStr := params.Get("pid")
pid, err := strconv.ParseInt(pidStr, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
timeLengthStr := params.Get("timeLength")
timeLength, err := strconv.ParseInt(timeLengthStr, 10, 64)
if err != nil {
c.JSON(nil, err)
return
}
if pid <= 0 || timeLength <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
var (
moneyType int8
moneyTypeStr string
)
moneyTypeStr = params.Get("moneyType")
switch moneyTypeStr {
case "coin":
moneyType = 0
case "bcoin":
moneyType = 1
case "point":
moneyType = 2
default:
c.JSON(nil, ecode.PendantPayTypeErr)
return
}
c.JSON(usSvc.Order(c, mid.(int64), pid, timeLength, moneyType))
}

View File

@ -0,0 +1,42 @@
package http
import (
usmdl "go-common/app/service/main/usersuit/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
const _mobilePendant = "http://account.bilibili.com/mobile/pendant/#/my"
func pointFlagMobile(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
var (
err error
pointFlag struct {
Link struct {
PendantLink string `json:"pendant_link"`
MedalLink string `json:"medal_link"`
} `json:"link"`
Flag *usmdl.PointFlag `json:"flag"`
}
)
if pointFlag.Flag, err = usSvc.PointFlag(c, &usmdl.ArgMID{MID: mid.(int64)}); err != nil {
c.JSON(nil, err)
return
}
pointFlag.Link.PendantLink = _mobilePendant
c.JSON(pointFlag, nil)
}
func pointFlag(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(usSvc.PointFlag(c, &usmdl.ArgMID{MID: mid.(int64)}))
}

View File

@ -0,0 +1,31 @@
package http
import (
"go-common/app/service/main/point/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func pointInfo(c *bm.Context) {
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(pointSvc.PointInfo(c, mid.(int64)))
}
func pointPage(c *bm.Context) {
var err error
mid, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
arg := new(model.ArgRPCPointHistory)
if err = c.Bind(arg); err != nil {
return
}
arg.Mid = mid.(int64)
c.JSON(pointSvc.PointPage(c, arg))
}

View File

@ -0,0 +1,328 @@
package http
import (
"io/ioutil"
"net/http"
"strconv"
"go-common/app/interface/main/account/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// modify modify user relation.
func realnameStatus(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
)
var resData struct {
Status int8 `json:"status"`
}
if resData.Status, err = realnameSvc.Status(c, mid.(int64)); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameApplyStatus(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
)
var resData struct {
Status int8 `json:"status"`
Remark string `json:"remark"`
Realname string `json:"realname"`
Card string `json:"card"`
}
if resData.Status, resData.Remark, resData.Realname, resData.Card, err = realnameSvc.ApplyStatus(c, mid.(int64)); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameCardTypes(c *bm.Context) {
var (
err error
params = c.Request.Form
platform = params.Get("platform")
buildStr = params.Get("build")
mobiapp = params.Get("mobi_app")
device = params.Get("device")
build int
)
if build, err = strconv.Atoi(buildStr); err != nil {
log.Error("%+v", errors.WithStack(err))
c.JSON(nil, ecode.RequestErr)
return
}
var resData []*model.RealnameCardType
if resData, err = realnameSvc.CardTypes(c, platform, mobiapp, device, build); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameCardTypesV2(c *bm.Context) {
var (
err error
)
var resData []*model.RealnameCardType
if resData, err = realnameSvc.CardTypesV2(c); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameCountryList(c *bm.Context) {
var (
err error
)
var resData []*model.RealnameCountry
if resData, err = realnameSvc.CountryList(c); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameTelCapture(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
)
if err = realnameSvc.TelCapture(c, mid.(int64)); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func realnameTelInfo(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
)
var resData struct {
Tel string `json:"tel"`
}
if resData.Tel, err = realnameSvc.TelInfo(c, mid.(int64)); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnameApply(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
params = c.Request.Form
realname = params.Get("real_name")
cardTypeStr = params.Get("card_type")
cardType int
cardNum = params.Get("card_num")
countryIDStr = params.Get("country")
countryID int
captureStr = params.Get("capture")
capture int
handIMGToken = params.Get("img1_token")
frontIMGToken = params.Get("img2_token")
backIMGToken = params.Get("img3_token")
)
if cardType, err = strconv.Atoi(cardTypeStr); err != nil {
log.Error("%+v", errors.WithStack(err))
c.JSON(nil, ecode.RequestErr)
return
}
if countryIDStr == "" {
countryID = 0 // 默认0中国
} else {
if countryID, err = strconv.Atoi(countryIDStr); err != nil {
log.Error("%+v", errors.WithStack(err))
c.JSON(nil, ecode.RequestErr)
return
}
}
if countryID < 0 {
countryID = 0
}
if capture, err = strconv.Atoi(captureStr); err != nil {
log.Error("%+v", errors.WithStack(err))
c.JSON(nil, ecode.RequestErr)
return
}
if err = realnameSvc.Apply(c, mid.(int64), realname, cardType, cardNum, countryID, capture, handIMGToken, frontIMGToken, backIMGToken); err != nil {
log.Error("%+v")
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
func realnameUpload(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
defer c.Request.Form.Del("img") // 防止日志不出现
c.Request.ParseMultipartForm(32 << 20)
imgBytes, err := func() ([]byte, error) {
img := c.Request.FormValue("img")
if img != "" {
log.Info("Succeeded to parse img file from form value: mid: %d, length: %d", mid, len(img))
return []byte(img), nil
}
log.Warn("Failed to parse img file from form value, fallback to form file: mid: %d", mid)
f, _, err := c.Request.FormFile("img")
if err != nil {
return nil, errors.Wrapf(err, "parse img form file: mid: %d", mid)
}
defer f.Close()
data, err := ioutil.ReadAll(f)
if err != nil {
return nil, errors.Wrapf(err, "read img form file: mid: %d", mid)
}
if len(data) <= 0 {
return nil, errors.Wrapf(err, "form file data: mid: %d, length: %d", mid, len(data))
}
log.Info("Succeeded to parse file from form file: mid: %d, length: %d", mid, len(data))
return data, nil
}()
if err != nil {
log.Error("Failed to parse realname upload file: mid: %d: %+v", mid, err)
c.JSON(nil, ecode.RequestErr)
return
}
var resData struct {
SRC string `json:"token"`
}
if resData.SRC, err = realnameSvc.Upload(c, mid.(int64), imgBytes); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.JSON(resData, nil)
}
func realnamePreview(c *bm.Context) {
var (
img []byte
err error
mid, _ = c.Get("mid")
params = c.Request.Form
src = params.Get("src")
)
if img, err = realnameSvc.Preview(c, mid.(int64), src); err != nil {
log.Error("%+v", err)
c.JSON(nil, err)
return
}
c.Writer.Header().Set("Content-Type", http.DetectContentType(img))
c.JSON(img, err)
}
// alipay api
func realnameChannel(c *bm.Context) {
c.JSON(realnameSvc.Channel(c))
}
func realnameCaptcha(c *bm.Context) {
var (
mid, _ = c.Get("mid")
userAgent = c.Request.UserAgent()
ip = metadata.String(c, metadata.RemoteIP)
err error
)
var resp struct {
URL string `json:"url"`
Remote int `json:"remote"`
}
resp.URL, resp.Remote, err = realnameSvc.CaptchaGTRegister(c, mid.(int64), ip, geetestClientType(userAgent))
c.JSON(resp, err)
}
func realnameCaptchaRefresh(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
userAgent = c.Request.UserAgent()
ip = metadata.String(c, metadata.RemoteIP)
v = &model.ParamRealnameCaptchaGTRefresh{}
)
if err = c.Bind(v); err != nil {
return
}
var resp struct {
CaptureType int `json:"captcha_type"`
CaptureInfo struct {
Success int `json:"success"`
GT string `json:"gt"`
Challenge string `json:"challenge"`
} `json:"captcha_info"`
}
resp.CaptureType = 1
resp.CaptureInfo.Challenge, resp.CaptureInfo.GT, resp.CaptureInfo.Success, err = realnameSvc.CaptchaGTRefresh(c, mid.(int64), ip, geetestClientType(userAgent), v.Hash)
c.JSON(resp, err)
}
func realnameCaptchaConfirm(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
userAgent = c.Request.UserAgent()
ip = metadata.String(c, metadata.RemoteIP)
v = &model.ParamRealnameCaptchaGTCheck{}
)
if err = c.Bind(v); err != nil {
return
}
if v.Remote == 1 && len(v.Challenge) != 34 {
err = ecode.RequestErr
return
}
c.JSON(realnameSvc.CaptchaGTValidate(c, mid.(int64), ip, geetestClientType(userAgent), v))
}
func realnameAlipayApply(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
v = &model.ParamRealnameAlipayApply{}
)
if err = c.Bind(v); err != nil {
return
}
c.JSON(realnameSvc.AlipayApply(c, mid.(int64), v))
}
func realnameAlipayConfirm(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
c.JSON(realnameSvc.AlipayConfirm(c, mid.(int64)))
}
func geetestClientType(userAgent string) string {
return "h5"
}

View File

@ -0,0 +1,927 @@
package http
import (
"strconv"
"go-common/app/interface/main/account/model"
mrl "go-common/app/service/main/relation/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
)
var (
_defaultPS int64 = 50
)
// modify modify user relation.
func modify(c *bm.Context) {
var (
err error
act, fid int64
src uint64
params = c.Request.Form
mid, _ = c.Get("mid")
actStr = params.Get("act")
fidStr = params.Get("fid")
srcStr = params.Get("re_src")
ua = c.Request.Header.Get("User-Agent")
referer = c.Request.Header.Get("Referer")
sid string
realIP = metadata.String(c, metadata.RemoteIP)
)
if act, err = strconv.ParseInt(actStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
sidCookie, err := c.Request.Cookie("sid")
if err != nil {
log.Warn("relation infoc get sid failed error(%v)", err)
} else {
sid = sidCookie.Value
}
buvid := c.Request.Header.Get("Buvid")
if buvid == "" {
buvidCookie, _ := c.Request.Cookie("buvid3")
if buvidCookie != nil {
buvid = buvidCookie.Value
}
}
ric := map[string]string{
"ip": realIP,
"User-Agent": ua,
"sid": sid,
"buvid": buvid,
"Referer": referer,
}
c.JSON(nil, relationSvc.Modify(c, mid.(int64), fid, int8(act), uint8(src), ric))
}
func batchModify(c *bm.Context) {
var (
err error
act int64
fids []int64
src uint64
params = c.Request.Form
// res = c.Result()
mid, _ = c.Get("mid")
actStr = params.Get("act")
fidsStr = params.Get("fids")
srcStr = params.Get("re_src")
ua = c.Request.Header.Get("User-Agent")
referer = c.Request.Header.Get("Referer")
sid string
realIP = metadata.String(c, metadata.RemoteIP)
)
if act, err = strconv.ParseInt(actStr, 10, 8); err != nil {
// res["code"] = ecode.RequestErr
c.JSON(nil, ecode.RequestErr)
return
}
if fids, err = xstr.SplitInts(fidsStr); err != nil || len(fids) <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 64); err != nil {
// res["code"] = ecode.RequestErr
c.JSON(nil, ecode.RequestErr)
return
}
sidCookie, err := c.Request.Cookie("sid")
if err != nil {
log.Warn("relation infoc get sid failed error(%v)", err)
} else {
sid = sidCookie.Value
}
buvid := c.Request.Header.Get("Buvid")
if buvid == "" {
buvidCookie, _ := c.Request.Cookie("buvid3")
if buvidCookie != nil {
buvid = buvidCookie.Value
}
}
ric := map[string]string{
"ip": realIP,
"User-Agent": ua,
"sid": sid,
"buvid": buvid,
"Referer": referer,
}
// res["code"] = relationSvc.Modify(c, mid.(int64), fid, int8(act), uint8(src), ric)
c.JSON(relationSvc.BatchModify(c, mid.(int64), fids, int8(act), uint8(src), ric))
}
// relation get relation between mid and fid.
func relation(c *bm.Context) {
var (
err error
fid int64
f *mrl.Following
params = c.Request.Form
fidStr = params.Get("fid")
mid, _ = c.Get("mid")
)
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if f, err = relationSvc.Relation(c, mid.(int64), fid); err != nil {
log.Error("relationSvc.Relation(%d, %d) error(%v)", mid, fid, err)
c.JSON(nil, err)
return
}
c.JSON(f, nil)
}
// relations get relations between mid and fids.
func relations(c *bm.Context) {
var (
err error
fm map[int64]*mrl.Following
fids []int64
params = c.Request.Form
fidsStr = params.Get("fids")
mid, _ = c.Get("mid")
)
if fids, err = xstr.SplitInts(fidsStr); err != nil {
c.JSON(nil, ecode.RequestErr)
log.Error("xstr.SplitInts(fids %v) err(%v)", fidsStr, err)
return
}
if fm, err = relationSvc.Relations(c, mid.(int64), fids); err != nil {
log.Error("relationSvc.Relations(%d, %v) error(%v)", mid, fids, err)
c.JSON(nil, err)
return
}
c.JSON(fm, nil)
}
// followings get user's following list.
func followings(c *bm.Context) {
var (
err error
mid, vmid int64
pn, ps int64
self bool
followings []*model.Following
params = c.Request.Form
vmidStr = params.Get("vmid")
psStr = params.Get("ps")
pnStr = params.Get("pn")
order = params.Get("order")
version uint64
versionStr = params.Get("re_version")
crc32v uint32
total int
)
midS, ok := c.Get("mid")
if ok {
mid = midS.(int64)
} else {
mid = 0
}
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
self = mid == vmid
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pn <= 0 {
pn = 1
}
if !self && pn > 5 {
c.JSON(nil, ecode.RelFollowingGuestLimit)
return
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if ps <= 0 || ps > _defaultPS {
ps = _defaultPS
}
if versionStr != "" {
if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if order != "asc" {
order = "desc"
}
if followings, crc32v, total, err = relationSvc.Followings(c, vmid, mid, pn, ps, version, order); err != nil {
log.Error("relationSvc.Followings(%d) error(%v)", vmid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": followings,
"total": total,
}, nil)
}
// followers get user's follower list.
func followers(c *bm.Context) {
var (
err error
mid, vmid int64
pn, ps int64
self bool
fs []*model.Following
params = c.Request.Form
vmidStr = params.Get("vmid")
psStr = params.Get("ps")
pnStr = params.Get("pn")
version uint64
total int
versionStr = params.Get("re_version")
crc32v uint32
)
midS, ok := c.Get("mid")
if ok {
mid = midS.(int64)
} else {
mid = 0
}
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
self = mid == vmid
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pn <= 0 {
pn = 1
}
if !self && pn > 5 {
c.JSON(nil, ecode.RelFollowingGuestLimit)
return
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if ps <= 0 || ps > _defaultPS {
ps = _defaultPS
}
if versionStr != "" {
if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if fs, crc32v, total, err = relationSvc.Followers(c, vmid, mid, pn, ps, version); err != nil {
log.Error("relationSvc.Followers(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": fs,
"total": total,
}, nil)
}
// friends get user's friends list: follow eachother.
func friends(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
followings []*model.Following
params = c.Request.Form
version uint64
versionStr = params.Get("re_version")
crc32v uint32
)
if versionStr != "" {
if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if followings, crc32v, err = relationSvc.Friends(c, mid.(int64), version); err != nil {
log.Error("relationSvc.Followings(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": followings,
}, nil)
}
// Blacks get user's black list.
func blacks(c *bm.Context) {
var (
err error
blacks []*model.Following
mid, _ = c.Get("mid")
params = c.Request.Form
version uint64
pn, ps int64
total int
pnStr = params.Get("pn")
psStr = params.Get("ps")
versionStr = params.Get("re_version")
crc32v uint32
)
if versionStr != "" {
if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pn <= 0 {
pn = 1
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if ps <= 0 || ps > _defaultPS {
ps = _defaultPS
}
if blacks, crc32v, total, err = relationSvc.Blacks(c, mid.(int64), version, pn, ps); err != nil {
log.Error("relationSvc.Blacks(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": blacks,
"total": total,
}, nil)
}
// whispers get user's whisper list.
func whispers(c *bm.Context) {
var (
err error
pn, ps int64
version uint64
crc32v uint32
whispers []*model.Following
mid, _ = c.Get("mid")
params = c.Request.Form
psStr = params.Get("ps")
pnStr = params.Get("pn")
versionStr = params.Get("re_version")
)
if versionStr != "" {
if version, err = strconv.ParseUint(versionStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if pn <= 0 {
pn = 1
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if ps <= 0 || ps > _defaultPS {
ps = _defaultPS
}
if whispers, crc32v, err = relationSvc.Whispers(c, mid.(int64), pn, ps, version); err != nil {
log.Error("relationSvc.Whispers(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": whispers,
}, nil)
}
// stat get user's follower list.
func stat(c *bm.Context) {
var (
err error
mid, vmid int64
self bool
st *mrl.Stat
params = c.Request.Form
vmidStr = params.Get("vmid")
)
midS, ok := c.Get("mid")
if ok {
mid = midS.(int64)
} else {
mid = 0
}
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil || vmid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
self = mid == vmid
if st, err = relationSvc.Stat(c, vmid, self); err != nil {
log.Error("relationSvc.Followers(%d) error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(st, nil)
}
// stat get user's follower list.
func stats(c *bm.Context) {
var (
err error
params = c.Request.Form
midsStr = params.Get("mids")
)
mids, err := xstr.SplitInts(midsStr)
if err != nil || len(mids) > 20 {
c.JSON(nil, ecode.RequestErr)
return
}
sts, err := relationSvc.Stats(c, mids)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(sts, nil)
}
// tag 单个标签
func tag(c *bm.Context) {
var (
err error
pn, ps int64
mid, _ = c.Get("mid")
params = c.Request.Form
tagIDStr = params.Get("tagid")
tagid int64
psStr = params.Get("ps")
pnStr = params.Get("pn")
ti []*model.Tag
)
if tagIDStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if tagid, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
log.Error("pn parse")
c.JSON(nil, ecode.RequestErr)
return
}
}
if pn <= 0 {
pn = 1
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if ps <= 0 || ps > _defaultPS {
ps = _defaultPS
}
if ti, err = relationSvc.Tag(c, mid.(int64), tagid, pn, ps); err != nil {
log.Error("relationSvc.Tag(%d).tag(%d) error(%v)", mid, tagid, err)
c.JSON(nil, err)
return
}
c.JSON(ti, nil)
}
// tags 列表:标签-计数
func tags(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
tc []*mrl.TagCount
)
if tc, err = relationSvc.Tags(c, mid.(int64)); err != nil {
log.Error("relationSvc.Tags(%d). error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(tc, nil)
}
// mobileTags 移动端 列表:标签-计数
func mobileTags(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
tc map[string][]*mrl.TagCount
)
if tc, err = relationSvc.MobileTags(c, mid.(int64)); err != nil {
log.Error("relationSvc.Tags(%d). error(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(tc, nil)
}
// tagUser 用户-fid 标签列表
func tagUser(c *bm.Context) {
var (
err error
fid int64
mid, _ = c.Get("mid")
params = c.Request.Form
fidStr = params.Get("fid")
tc map[int64]string
)
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if tc, err = relationSvc.UserTag(c, mid.(int64), fid); err != nil {
log.Error("relationSvc.UserTag(%d).fid(%d) error(%v)", mid, fid, err)
c.JSON(nil, err)
return
}
c.JSON(tc, nil)
}
// tagCreate create tag.
func tagCreate(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
params = c.Request.Form
tagStr = params.Get("tag")
cres int64
)
if tagStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if cres, err = relationSvc.CreateTag(c, mid.(int64), tagStr); err != nil {
c.JSON(nil, err)
return
}
c.JSON(map[string]int64{
"tagid": cres,
}, nil)
}
// tagUpdate update tag.
func tagUpdate(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
params = c.Request.Form
tagIDStr = params.Get("tagid")
tagID int64
newStr = params.Get("name")
)
if tagIDStr == "" || newStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if tagID, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil || tagID <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.UpdateTag(c, mid.(int64), tagID, newStr))
}
// tagDel del tag.
func tagDel(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
params = c.Request.Form
tagIDStr = params.Get("tagid")
tagID int64
)
if tagIDStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if tagID, err = strconv.ParseInt(tagIDStr, 10, 64); err != nil || tagID <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelTag(c, mid.(int64), tagID))
}
// tagsAddUsers tags add users.
func tagsAddUsers(c *bm.Context) {
var (
mid, _ = c.Get("mid")
params = c.Request.Form
tagidsStr = params.Get("tagids")
fidsStr = params.Get("fids")
)
if tagidsStr == "" || fidsStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.TagsAddUsers(c, mid.(int64), tagidsStr, fidsStr))
}
// tagsCopyUsers tags copy users.
func tagsCopyUsers(c *bm.Context) {
var (
mid, _ = c.Get("mid")
params = c.Request.Form
tagidsStr = params.Get("tagids")
fidsStr = params.Get("fids")
)
if tagidsStr == "" || fidsStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.TagsCopyUsers(c, mid.(int64), tagidsStr, fidsStr))
}
// tagsMoveUsers tags move users.
func tagsMoveUsers(c *bm.Context) {
var (
mid, _ = c.Get("mid")
params = c.Request.Form
beforeTagIdsStr = params.Get("beforeTagids")
afterTagIdsStr = params.Get("afterTagids")
fidsStr = params.Get("fids")
)
if beforeTagIdsStr == "" || afterTagIdsStr == "" || fidsStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
bid, err := strconv.ParseInt(beforeTagIdsStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.TagsMoveUsers(c, mid.(int64), bid, afterTagIdsStr, fidsStr))
}
func prompt(c *bm.Context) {
mid, _ := c.Get("mid")
arg := new(mrl.ArgPrompt)
if err := c.Bind(arg); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
arg.Mid = mid.(int64)
b, err := relationSvc.Prompt(c, arg)
if err != nil {
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"prompt": b,
}, nil)
}
func closePrompt(c *bm.Context) {
mid, _ := c.Get("mid")
arg := new(mrl.ArgPrompt)
if err := c.Bind(arg); err != nil {
return
}
arg.Mid = mid.(int64)
c.JSON(nil, relationSvc.ClosePrompt(c, arg))
}
func addSpecial(c *bm.Context) {
mid, _ := c.Get("mid")
arg := new(mrl.ArgFollowing)
if err := c.Bind(arg); err != nil {
return
}
arg.Mid = mid.(int64)
c.JSON(nil, relationSvc.AddSpecial(c, arg))
}
func delSpecial(c *bm.Context) {
mid, _ := c.Get("mid")
arg := new(mrl.ArgFollowing)
if err := c.Bind(arg); err != nil {
return
}
arg.Mid = mid.(int64)
c.JSON(nil, relationSvc.DelSpecial(c, arg))
}
func special(c *bm.Context) {
mid, _ := c.Get("mid")
c.JSON(relationSvc.Special(c, mid.(int64)))
}
// recommend get global recommend upper.
// deprecated
func recommend(c *bm.Context) {
c.JSON([]interface{}{}, nil)
}
func recommendFollowlistEmpty(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &model.ArgRecommend{}
if err := c.Bind(arg); err != nil {
return
}
arg.Device = dev.(*bm.Device)
arg.Mid = mid.(int64)
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
c.JSON(relationSvc.RecommendFollowlistEmpty(c, arg))
}
func recommendAnswerOK(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &model.ArgRecommend{}
if err := c.Bind(arg); err != nil {
return
}
arg.Device = dev.(*bm.Device)
arg.Mid = mid.(int64)
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
c.JSON(relationSvc.RecommendAnswerOK(c, arg))
}
func recommendTagSuggest(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &model.ArgTagSuggestRecommend{}
if err := c.Bind(arg); err != nil {
return
}
arg.Device = dev.(*bm.Device)
arg.Mid = mid.(int64)
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
c.JSON(relationSvc.RecommendTagSuggest(c, arg))
}
func recommendTagSuggestDetail(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &model.ArgTagSuggestRecommend{}
if err := c.Bind(arg); err != nil {
return
}
if arg.TagName == "" {
c.JSON(nil, ecode.RequestErr)
return
}
arg.Device = dev.(*bm.Device)
arg.Mid = mid.(int64)
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
c.JSON(relationSvc.RecommendTagSuggestDetail(c, arg))
}
// unread check unread status, for the 'show red point' function.
func unread(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
show bool
)
disbaleAutoReset := c.Request.Form.Get("disableautoreset") == "1"
if show, err = relationSvc.Unread(c, mid.(int64), disbaleAutoReset); err != nil {
log.Error("relationSvc.Unread(%d) err(%v)", mid, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"show": show,
}, nil)
}
func unreadReset(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
c.JSON(nil, relationSvc.ResetUnread(c, mid.(int64)))
}
func unreadCount(c *bm.Context) {
var (
err error
mid, _ = c.Get("mid")
count int64
)
disbaleAutoReset := c.Request.Form.Get("disableautoreset") == "1"
if count, err = relationSvc.UnreadCount(c, mid.(int64), disbaleAutoReset); err != nil {
log.Error("relationSvc.UnreadCount(%d) err(%v)", mid, err)
return
}
c.JSON(map[string]interface{}{
"count": count,
}, nil)
}
func unreadCountReset(c *bm.Context) {
var (
mid, _ = c.Get("mid")
)
c.JSON(nil, relationSvc.ResetUnreadCount(c, mid.(int64)))
}
func achieveGet(ctx *bm.Context) {
arg := new(model.ArgAchieveGet)
if err := ctx.Bind(arg); err != nil {
return
}
mid, _ := ctx.Get("mid")
arg.Mid = mid.(int64)
if arg.Award != "10k" {
ctx.JSON(nil, ecode.RequestErr)
return
}
ctx.JSON(relationSvc.AchieveGet(ctx, arg))
}
func achieve(ctx *bm.Context) {
arg := new(model.ArgAchieve)
if err := ctx.Bind(arg); err != nil {
return
}
ctx.JSON(relationSvc.Achieve(ctx, arg))
}
func followerNotifySetting(c *bm.Context) {
var mid, _ = c.Get("mid")
c.JSON(relationSvc.FollowerNotifySetting(c, mid.(int64)))
}
func enableFollowerNotify(c *bm.Context) {
var mid, _ = c.Get("mid")
c.JSON(nil, relationSvc.EnableFollowerNotify(c, mid.(int64)))
}
func disableFollowerNotify(c *bm.Context) {
var mid, _ = c.Get("mid")
c.JSON(nil, relationSvc.DisableFollowerNotify(c, mid.(int64)))
}
func sameFollowings(c *bm.Context) {
arg := new(model.ArgSameFollowing)
if err := c.Bind(arg); err != nil {
return
}
mid, _ := c.Get("mid")
arg.Mid = mid.(int64)
if arg.Order != "asc" {
arg.Order = "desc"
}
if arg.PN <= 0 {
arg.PN = 1
}
if arg.PS <= 0 || arg.PS > _defaultPS {
arg.PS = _defaultPS
}
followings, crc32v, total, err := relationSvc.SameFollowings(c, arg)
if err != nil {
log.Error("relationSvc.SameFollowings(%+v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(map[string]interface{}{
"re_version": uint64(crc32v),
"list": followings,
"total": total,
}, nil)
}

View File

@ -0,0 +1,32 @@
package http
import (
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func status(c *bm.Context) {
var (
params = c.Request.Form
mid, ok = c.Get("mid")
uuid = params.Get("uuid")
)
if !ok {
c.JSON(nil, ecode.RequestErr)
return
}
msg, err := memberSvc.Status(c, mid.(int64), uuid)
if err != nil {
c.JSON(nil, ecode.RemoteLoginStatusQueryError)
return
}
c.JSON(msg, nil)
}
func closeNotify(c *bm.Context) {
c.JSON(struct{}{}, nil)
}
func feedback(c *bm.Context) {
c.JSON(struct{}{}, nil)
}

View File

@ -0,0 +1,46 @@
package http
import (
"encoding/json"
bm "go-common/library/net/http/blademaster"
)
func sudo(ctx *bm.Context) {
cmd := ctx.Request.Form.Get("cmd")
if cmd == "" {
ctx.AbortWithStatus(400)
return
}
ctx.Set("command", cmd)
}
func notityPurgeCache(ctx *bm.Context) {
cmd, ok := ctx.Get("command")
if !ok {
ctx.AbortWithStatus(400)
return
}
plain, ok := cmd.(string)
if !ok {
ctx.AbortWithStatus(400)
return
}
var param struct {
Mid int64 `json:"mid"`
Action string `json:"action"`
}
if err := json.Unmarshal([]byte(plain), &param); err != nil {
ctx.AbortWithStatus(400)
return
}
if param.Mid <= 0 {
ctx.AbortWithStatus(400)
return
}
if param.Action == "" {
param.Action = "updateByAdmin"
}
ctx.JSON(nil, memberSvc.NotityPurgeCache(ctx, param.Mid, param.Action))
}

View File

@ -0,0 +1,358 @@
package http
import (
"strings"
"go-common/app/interface/main/account/model"
col "go-common/app/service/main/coupon/model"
vipmol "go-common/app/service/main/vip/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
const (
_headerBuvid = "Buvid"
)
func codeVerify(c *bm.Context) {
c.JSON(vipSvc.CodeVerify(c))
}
func codeOpen(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(struct {
Token string `form:"token" validate:"required"`
Code string `form:"code" validate:"required"`
Verify string `form:"verify" validate:"required"`
})
if err := c.Bind(arg); err != nil {
return
}
arg.Code = strings.Trim(arg.Code, " ")
c.JSON(vipSvc.CodeOpen(c, mid.(int64), arg.Code, arg.Token, arg.Verify))
}
// tips info.
func tips(c *bm.Context) {
var (
res *vipmol.TipsResp
arg = new(model.TipsReq)
err error
)
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
if res, err = vipSvc.Tips(c, arg); err != nil {
log.Error("vipSvc.Tips(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
// tips info.
func tipsv2(c *bm.Context) {
var (
res []*vipmol.TipsResp
arg = new(model.TipsReq)
err error
)
if err = c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
if res, err = vipSvc.TipsV2(c, arg); err != nil {
log.Error("vipSvc.Tips(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
func vipPanel(c *bm.Context) {
var (
err error
res *vipmol.VipPirceResp5
)
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.VipPanelRes)
if err = c.Bind(arg); err != nil {
return
}
if res, err = vipSvc.VipPanel5(c, mid.(int64), arg); err != nil {
log.Error("vipSvc.VipPanel(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
func couponUsable(c *bm.Context) {
var (
err error
res *col.CouponAllowancePanelInfo
)
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.ArgVipCoupon)
if err = c.Bind(arg); err != nil {
return
}
if res, err = vipSvc.CouponBySuitID(c, mid.(int64), arg.ID); err != nil {
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
func couponList(c *bm.Context) {
var (
err error
res *col.CouponAllowancePanelResp
)
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.ArgVipCoupon)
if err = c.Bind(arg); err != nil {
return
}
if res, err = vipSvc.CouponsForPanelV2(c, mid.(int64), arg.ID); err != nil {
log.Error("vipSvc.CouponsForPanelV2(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
func couponUnlock(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.ArgVipCancelPay)
if err = c.Bind(arg); err != nil {
return
}
if err = vipSvc.CancelUseCoupon(c, &vipmol.ArgCancelUseCoupon{
Mid: mid.(int64),
CouponToken: arg.CouponToken,
}); err != nil {
log.Error("vipSvc.CancelUseCoupon(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(model.CouponCancelExplain, nil)
}
func vipPanelV2(c *bm.Context) {
var err error
arg := new(model.ArgVipPanel)
if err = c.Bind(arg); err != nil {
return
}
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
arg.IP = metadata.String(c, metadata.RemoteIP)
c.JSON(vipSvc.VipPanelV2(c, arg))
}
func vipPanelV8(c *bm.Context) {
var err error
arg := new(model.ArgVipPanel)
if err = c.Bind(arg); err != nil {
return
}
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
arg.IP = metadata.String(c, metadata.RemoteIP)
c.JSON(vipSvc.VipPanelV8(c, arg))
}
func privilegeBySid(c *bm.Context) {
var err error
arg := new(vipmol.ArgPrivilegeBySid)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.PrivilegebySid(c, arg))
}
func privilegeByType(c *bm.Context) {
var err error
arg := new(vipmol.ArgPrivilegeDetail)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.PrivilegebyType(c, arg))
}
func vipManagerInfo(c *bm.Context) {
c.JSON(vipSvc.ManagerInfo(c))
}
func codeOpeneds(c *bm.Context) {
var (
err error
)
arg := new(model.CodeInfoReq)
if err = c.Bind(arg); err != nil {
return
}
c.JSON(vipSvc.CodeOpeneds(c, arg, metadata.String(c, metadata.RemoteIP)))
}
func unfrozen(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(nil, vipSvc.Unfrozen(c, mid.(int64)))
}
func frozenTime(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
c.JSON(vipSvc.FrozenTime(c, mid.(int64)))
}
func publicPriceList(c *bm.Context) {
var (
err error
res *vipmol.VipPirceResp
mid int64
)
midStr, exists := c.Get("mid")
if exists {
mid = midStr.(int64)
}
arg := new(model.VipPanelRes)
if err = c.Bind(arg); err != nil {
return
}
if res, err = vipSvc.VipPanel(c, mid, arg); err != nil {
log.Error("vipSvc.VipPanel(%+v) err(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(res, nil)
}
func useBatch(c *bm.Context) {
var err error
arg := new(vipmol.ArgUseBatch)
if err = c.Bind(arg); err != nil {
log.Error("use batch bind err(%+v) arg(%+v)", err, arg)
return
}
c.JSON(nil, vipSvc.UseBatch(c, arg))
}
func orderStatus(c *bm.Context) {
var (
err error
)
midI, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(vipmol.ArgDialog)
if err = c.Bind(arg); err != nil {
return
}
arg.Mid = midI.(int64)
c.JSON(vipSvc.OrderStatus(c, arg))
}
func resourceBanner(c *bm.Context) {
var (
err error
)
midI, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.ArgResource)
if err = c.Bind(arg); err != nil {
return
}
arg.MID = midI.(int64)
arg.Buvid = c.Request.Header.Get(_headerBuvid)
arg.Plat = model.Plat(arg.MobiApp, arg.Device)
c.JSON(vipSvc.ResourceBanner(c, arg))
}
func resourceBuy(c *bm.Context) {
var (
err error
)
midI, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(model.ArgResource)
if err = c.Bind(arg); err != nil {
return
}
arg.MID = midI.(int64)
arg.Buvid = c.Request.Header.Get(_headerBuvid)
arg.Plat = model.Plat(arg.MobiApp, arg.Device)
c.JSON(vipSvc.ResourceBuy(c, arg))
}
func couponBySuitIDV2(c *bm.Context) {
var err error
arg := new(model.ArgCouponBySuitID)
if err = c.Bind(arg); err != nil {
return
}
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
c.JSON(vipSvc.CouponBySuitIDV2(c, arg))
}
func vipPanelV9(c *bm.Context) {
var err error
arg := new(model.ArgVipPanel)
if err = c.Bind(arg); err != nil {
return
}
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
arg.IP = metadata.String(c, metadata.RemoteIP)
c.JSON(vipSvc.VipPanelV9(c, arg))
}

View File

@ -0,0 +1,109 @@
package http
import (
"go-common/app/interface/main/account/model"
v1 "go-common/app/service/main/vip/api"
vipmol "go-common/app/service/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
func bindInfoByMid(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
a := new(model.ArgBindInfo)
if err = c.Bind(a); err != nil {
return
}
a.Mid = mid.(int64)
a.AppID = vipmol.EleAppID
c.JSON(vipSvc.BindInfoByMid(c, a))
}
func createAssociateOrder(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
a := new(model.ArgCreateAssociateOrder)
if err = c.Bind(a); err != nil {
return
}
a.Mid = mid.(int64)
a.IP = metadata.String(c, metadata.RemoteIP)
c.JSON(vipSvc.CreateAssociateOrder(c, a))
}
func associatePanel(c *bm.Context) {
var err error
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.AccountNotLogin)
return
}
a := new(vipmol.ArgAssociatePanel)
if err = c.Bind(a); err != nil {
return
}
a.Mid = mid.(int64)
a.IP = metadata.String(c, metadata.RemoteIP)
res := new(struct {
PriceList []*v1.AssociatePanelInfo `json:"price_list"`
})
res.PriceList, err = vipSvc.AssociatePanel(c, a)
if res.PriceList == nil {
res.PriceList = []*v1.AssociatePanelInfo{}
}
c.JSON(res, err)
}
func redpackets(c *bm.Context) {
c.JSON(vipSvc.EleRedPackages(c))
}
func specailfoods(c *bm.Context) {
c.JSON(vipSvc.EleSpecailFoods(c))
}
func actlimit(ctx *bm.Context) {
var mid int64
midi, exists := ctx.Get("mid")
if exists {
mid = midi.(int64)
}
if err := vipSvc.ActivityTimeLimit(mid); err != nil {
ctx.JSON(nil, err)
ctx.Abort()
return
}
}
func iplimit(ctx *bm.Context) {
req := ctx.Request
params := req.Form
sappkey := params.Get("appkey")
ip := metadata.String(ctx, metadata.RemoteIP)
if err := vipSvc.ActivityWhiteIPLimit(sappkey, ip); err != nil {
ctx.JSON(nil, err)
ctx.Abort()
return
}
}
func openlimit(ctx *bm.Context) {
req := ctx.Request
params := req.Form
outOpenID := params.Get("out_open_id")
if err := vipSvc.ActivityWhiteOutOpenIDLimit(outOpenID); err != nil {
ctx.JSON(nil, err)
ctx.Abort()
return
}
}

View File

@ -0,0 +1,122 @@
package http
import (
"net/http"
"go-common/app/interface/main/account/model"
idtv1 "go-common/app/service/main/identify/api/grpc"
vipmol "go-common/app/service/main/vip/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/metadata"
)
//
// vip 第三方[ele]接入gateway
//
// openID
func openIDByOAuth2Code(c *bm.Context) {
var err error
a := new(model.ArgAuthCode)
if err = c.Bind(a); err != nil {
return
}
a.IP = metadata.String(c, metadata.RemoteIP)
a.APPID = vipmol.EleAppID
c.JSON(vipSvc.OpenIDByAuthCode(c, a))
}
func openBindByOutOpenID(c *bm.Context) {
var err error
a := new(model.ArgBind)
if err = c.Bind(a); err != nil {
return
}
a.AppID = vipmol.EleAppID
c.JSON(nil, vipSvc.OpenBindByOutOpenID(c, a))
}
func userInfoByOpenID(c *bm.Context) {
var err error
a := new(model.ArgUserInfoByOpenID)
if err = c.Bind(a); err != nil {
return
}
a.AppID = vipmol.EleAppID
c.JSON(vipSvc.UserInfoByOpenID(c, a))
}
func bilibiliVipGrant(c *bm.Context) {
var err error
a := new(model.ArgBilibiliVipGrant)
if err = c.Bind(a); err != nil {
return
}
a.AppID = vipmol.EleAppID
c.JSON(nil, vipSvc.BilibiliVipGrant(c, a))
}
func bilibiliPrizeGrant(c *bm.Context) {
var err error
a := new(model.ArgBilibiliPrizeGrant)
if err = c.Bind(a); err != nil {
return
}
a.AppID = vipmol.EleAppID
c.JSON(vipSvc.BilibiliPrizeGrant(c, a))
}
func openAuthCallBack(c *bm.Context) {
var err error
midI, ok := c.Get("mid")
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
a := new(model.ArgOpenAuthCallBack)
if err = c.Bind(a); err != nil {
return
}
// verify csrf.
verifyState(c, authn, a.State)
a.AppID = vipmol.EleAppID
a.Mid = midI.(int64)
c.Redirect(http.StatusFound, vipSvc.OpenAuthCallBack(c, a))
}
func eleOAuthURL(c *bm.Context) {
var (
state string
err error
)
if state, err = csrf(c, authn); err != nil {
return
}
c.JSON(vipSvc.ElemeOAuthURI(c, state), nil)
}
func verifyState(ctx *bm.Context, a *auth.Auth, state string) (err error) {
var csrfStr string
if csrfStr, err = csrf(ctx, a); err != nil {
return
}
if csrfStr != state {
return ecode.CsrfNotMatchErr
}
return
}
func csrf(ctx *bm.Context, a *auth.Auth) (string, error) {
req := ctx.Request
cookie := req.Header.Get("Cookie")
reply, err := a.GetCookieInfo(ctx, &idtv1.GetCookieInfoReq{Cookie: cookie})
if err != nil {
return "", err
}
if !reply.IsLogin {
return "", ecode.NoLogin
}
return reply.Csrf, nil
}

View File

@ -0,0 +1,66 @@
package http
import (
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func welfareList(c *bm.Context) {
arg := new(struct {
Tid int64 `form:"tid"`
Recommend int64 `form:"recommend"`
Pn int64 `form:"pn"`
Ps int64 `form:"ps"`
})
if err := c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
c.JSON(vipSvc.WelfareList(c, arg.Tid, arg.Recommend, arg.Pn, arg.Ps))
}
func welfareTypeList(c *bm.Context) {
c.JSON(vipSvc.WelfareTypeList(c))
}
func welfareInfo(c *bm.Context) {
userId := int64(0)
mid, exists := c.Get("mid")
if exists {
userId = mid.(int64)
}
arg := new(struct {
Wid int64 `form:"id"`
})
if err := c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
c.JSON(vipSvc.WelfareInfo(c, arg.Wid, userId))
}
func receiveWelfare(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(struct {
Wid int64 `form:"id"`
})
if err := c.Bind(arg); err != nil {
log.Error("c.Bind err(%+v)", err)
return
}
c.JSON(vipSvc.WelfareReceive(c, arg.Wid, mid.(int64)))
}
func myWelfare(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(vipSvc.MyWelfare(c, mid.(int64)))
}

View File

@ -0,0 +1,155 @@
package http
import (
"strconv"
"go-common/app/interface/main/account/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// replyHistoryList
func replyHistoryList(c *bm.Context) {
var (
err error
//ip = c.RemoteIP()
header = c.Request.Header
params = c.Request.Form
mid, _ = c.Get("mid")
cookie = header.Get("Cookie")
accessKey = params.Get("access_key")
stime = params.Get("stime")
etime = params.Get("etime")
order = params.Get("order")
sort = params.Get("sort")
pnStr = params.Get("pn")
psStr = params.Get("ps")
pn, ps int64
)
if pnStr != "" {
if pn, err = strconv.ParseInt(pnStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if psStr != "" {
if ps, err = strconv.ParseInt(psStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
c.JSON(memberSvc.ReplyHistoryList(c, mid.(int64), stime, etime, order, sort, pn, ps, accessKey, cookie))
}
// updateSettings
func update(c *bm.Context) {
var (
params = c.Request.Form
mid, ok = c.Get("mid")
//ip = c.RemoteIP()
unameStr = params.Get("uname")
signStr = params.Get("usersign")
sexStr = params.Get("sex")
birthdayStr = params.Get("birthday")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
settings := &model.Settings{
Uname: unameStr,
Sign: signStr,
Sex: sexStr,
Birthday: birthdayStr,
}
log.Error("request(%v)", settings)
c.JSON(nil, memberSvc.UpdateSettings(c, mid.(int64), settings))
}
func account(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.SettingsInfo(c, mid.(int64)))
}
// logCoin
func logCoin(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.LogCoin(c, mid.(int64)))
}
// coin
func coin(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.Coin(c, mid.(int64)))
}
func logMoral(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.LogMoral(c, mid.(int64)))
}
func logExp(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.LogExp(c, mid.(int64)))
}
// logLogin
func logLogin(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.LogLogin(c, mid.(int64)))
}
func reward(c *bm.Context) {
var (
//ip = c.RemoteIP()
mid, ok = c.Get("mid")
)
if !ok {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(memberSvc.Reward(c, mid.(int64)))
}