go-common/app/interface/main/account/http/http.go

356 lines
14 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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)
}