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