Wrap fasthttprouter inside own router
This commit is contained in:
parent
85e6dc7e5e
commit
68a9808942
25
app/router.go
Normal file
25
app/router.go
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/buaazp/fasthttprouter"
|
||||||
|
"github.com/jmoiron/sqlx"
|
||||||
|
"github.com/valyala/fasthttp"
|
||||||
|
"zxq.co/ripple/rippleapi/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type router struct {
|
||||||
|
r *fasthttprouter.Router
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r router) Method(path string, f func(md common.MethodData) common.CodeMessager, privilegesNeeded ...int) {
|
||||||
|
r.r.GET(path, Method(f, privilegesNeeded...))
|
||||||
|
}
|
||||||
|
func (r router) POSTMethod(path string, f func(md common.MethodData) common.CodeMessager, privilegesNeeded ...int) {
|
||||||
|
r.r.POST(path, Method(f, privilegesNeeded...))
|
||||||
|
}
|
||||||
|
func (r router) Peppy(path string, a func(c *fasthttp.RequestCtx, db *sqlx.DB)) {
|
||||||
|
r.r.GET(path, PeppyMethod(a))
|
||||||
|
}
|
||||||
|
func (r router) GET(path string, handle fasthttp.RequestHandler) {
|
||||||
|
r.r.GET(path, handle)
|
||||||
|
}
|
117
app/start.go
117
app/start.go
|
@ -39,7 +39,8 @@ func Start(conf common.Conf, dbO *sqlx.DB) *fhr.Router {
|
||||||
return snaker.CamelToSnake(s)
|
return snaker.CamelToSnake(s)
|
||||||
})
|
})
|
||||||
|
|
||||||
r := fhr.New()
|
rawRouter := fhr.New()
|
||||||
|
r := router{rawRouter}
|
||||||
// TODO: add back gzip
|
// TODO: add back gzip
|
||||||
// TODO: add logging
|
// TODO: add logging
|
||||||
// TODO: add sentry panic recovering
|
// TODO: add sentry panic recovering
|
||||||
|
@ -79,91 +80,91 @@ func Start(conf common.Conf, dbO *sqlx.DB) *fhr.Router {
|
||||||
|
|
||||||
// peppyapi
|
// peppyapi
|
||||||
{
|
{
|
||||||
r.GET("/api/get_user", PeppyMethod(peppy.GetUser))
|
r.Peppy("/api/get_user", peppy.GetUser)
|
||||||
r.GET("/api/get_match", PeppyMethod(peppy.GetMatch))
|
r.Peppy("/api/get_match", peppy.GetMatch)
|
||||||
r.GET("/api/get_user_recent", PeppyMethod(peppy.GetUserRecent))
|
r.Peppy("/api/get_user_recent", peppy.GetUserRecent)
|
||||||
r.GET("/api/get_user_best", PeppyMethod(peppy.GetUserBest))
|
r.Peppy("/api/get_user_best", peppy.GetUserBest)
|
||||||
r.GET("/api/get_scores", PeppyMethod(peppy.GetScores))
|
r.Peppy("/api/get_scores", peppy.GetScores)
|
||||||
r.GET("/api/get_beatmaps", PeppyMethod(peppy.GetBeatmap))
|
r.Peppy("/api/get_beatmaps", peppy.GetBeatmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
// v1 API
|
// v1 API
|
||||||
{
|
{
|
||||||
r.POST("/api/v1/tokens", Method(v1.TokenNewPOST))
|
r.POSTMethod("/api/v1/tokens", v1.TokenNewPOST)
|
||||||
r.POST("/api/v1/tokens/new", Method(v1.TokenNewPOST))
|
r.POSTMethod("/api/v1/tokens/new", v1.TokenNewPOST)
|
||||||
r.POST("/api/v1/tokens/self/delete", Method(v1.TokenSelfDeletePOST))
|
r.POSTMethod("/api/v1/tokens/self/delete", v1.TokenSelfDeletePOST)
|
||||||
|
|
||||||
// Auth-free API endpoints (public data)
|
// Auth-free API endpoints (public data)
|
||||||
r.GET("/api/v1/ping", Method(v1.PingGET))
|
r.Method("/api/v1/ping", v1.PingGET)
|
||||||
r.GET("/api/v1/surprise_me", Method(v1.SurpriseMeGET))
|
r.Method("/api/v1/surprise_me", v1.SurpriseMeGET)
|
||||||
r.GET("/api/v1/doc", Method(v1.DocGET))
|
r.Method("/api/v1/doc", v1.DocGET)
|
||||||
r.GET("/api/v1/doc/content", Method(v1.DocContentGET))
|
r.Method("/api/v1/doc/content", v1.DocContentGET)
|
||||||
r.GET("/api/v1/doc/rules", Method(v1.DocRulesGET))
|
r.Method("/api/v1/doc/rules", v1.DocRulesGET)
|
||||||
r.GET("/api/v1/users", Method(v1.UsersGET))
|
r.Method("/api/v1/users", v1.UsersGET)
|
||||||
r.GET("/api/v1/users/whatid", Method(v1.UserWhatsTheIDGET))
|
r.Method("/api/v1/users/whatid", v1.UserWhatsTheIDGET)
|
||||||
r.GET("/api/v1/users/full", Method(v1.UserFullGET))
|
r.Method("/api/v1/users/full", v1.UserFullGET)
|
||||||
r.GET("/api/v1/users/userpage", Method(v1.UserUserpageGET))
|
r.Method("/api/v1/users/userpage", v1.UserUserpageGET)
|
||||||
r.GET("/api/v1/users/lookup", Method(v1.UserLookupGET))
|
r.Method("/api/v1/users/lookup", v1.UserLookupGET)
|
||||||
r.GET("/api/v1/users/scores/best", Method(v1.UserScoresBestGET))
|
r.Method("/api/v1/users/scores/best", v1.UserScoresBestGET)
|
||||||
r.GET("/api/v1/users/scores/recent", Method(v1.UserScoresRecentGET))
|
r.Method("/api/v1/users/scores/recent", v1.UserScoresRecentGET)
|
||||||
r.GET("/api/v1/badges", Method(v1.BadgesGET))
|
r.Method("/api/v1/badges", v1.BadgesGET)
|
||||||
r.GET("/api/v1/beatmaps", Method(v1.BeatmapGET))
|
r.Method("/api/v1/beatmaps", v1.BeatmapGET)
|
||||||
r.GET("/api/v1/leaderboard", Method(v1.LeaderboardGET))
|
r.Method("/api/v1/leaderboard", v1.LeaderboardGET)
|
||||||
r.GET("/api/v1/tokens", Method(v1.TokenGET))
|
r.Method("/api/v1/tokens", v1.TokenGET)
|
||||||
r.GET("/api/v1/users/self", Method(v1.UserSelfGET))
|
r.Method("/api/v1/users/self", v1.UserSelfGET)
|
||||||
r.GET("/api/v1/tokens/self", Method(v1.TokenSelfGET))
|
r.Method("/api/v1/tokens/self", v1.TokenSelfGET)
|
||||||
r.GET("/api/v1/blog/posts", Method(v1.BlogPostsGET))
|
r.Method("/api/v1/blog/posts", v1.BlogPostsGET)
|
||||||
r.GET("/api/v1/scores", Method(v1.ScoresGET))
|
r.Method("/api/v1/scores", v1.ScoresGET)
|
||||||
r.GET("/api/v1/beatmaps/rank_requests/status", Method(v1.BeatmapRankRequestsStatusGET))
|
r.Method("/api/v1/beatmaps/rank_requests/status", v1.BeatmapRankRequestsStatusGET)
|
||||||
|
|
||||||
// ReadConfidential privilege required
|
// ReadConfidential privilege required
|
||||||
r.GET("/api/v1/friends", Method(v1.FriendsGET, common.PrivilegeReadConfidential))
|
r.Method("/api/v1/friends", v1.FriendsGET, common.PrivilegeReadConfidential)
|
||||||
r.GET("/api/v1/friends/with", Method(v1.FriendsWithGET, common.PrivilegeReadConfidential))
|
r.Method("/api/v1/friends/with", v1.FriendsWithGET, common.PrivilegeReadConfidential)
|
||||||
r.GET("/api/v1/users/self/donor_info", Method(v1.UsersSelfDonorInfoGET, common.PrivilegeReadConfidential))
|
r.Method("/api/v1/users/self/donor_info", v1.UsersSelfDonorInfoGET, common.PrivilegeReadConfidential)
|
||||||
r.GET("/api/v1/users/self/favourite_mode", Method(v1.UsersSelfFavouriteModeGET, common.PrivilegeReadConfidential))
|
r.Method("/api/v1/users/self/favourite_mode", v1.UsersSelfFavouriteModeGET, common.PrivilegeReadConfidential)
|
||||||
r.GET("/api/v1/users/self/settings", Method(v1.UsersSelfSettingsGET, common.PrivilegeReadConfidential))
|
r.Method("/api/v1/users/self/settings", v1.UsersSelfSettingsGET, common.PrivilegeReadConfidential)
|
||||||
|
|
||||||
// Write privilege required
|
// Write privilege required
|
||||||
r.POST("/api/v1/friends/add", Method(v1.FriendsAddPOST, common.PrivilegeWrite))
|
r.POSTMethod("/api/v1/friends/add", v1.FriendsAddPOST, common.PrivilegeWrite)
|
||||||
r.POST("/api/v1/friends/del", Method(v1.FriendsDelPOST, common.PrivilegeWrite))
|
r.POSTMethod("/api/v1/friends/del", v1.FriendsDelPOST, common.PrivilegeWrite)
|
||||||
r.POST("/api/v1/users/self/settings", Method(v1.UsersSelfSettingsPOST, common.PrivilegeWrite))
|
r.POSTMethod("/api/v1/users/self/settings", v1.UsersSelfSettingsPOST, common.PrivilegeWrite)
|
||||||
r.POST("/api/v1/users/self/userpage", Method(v1.UserSelfUserpagePOST, common.PrivilegeWrite))
|
r.POSTMethod("/api/v1/users/self/userpage", v1.UserSelfUserpagePOST, common.PrivilegeWrite)
|
||||||
r.POST("/api/v1/beatmaps/rank_requests", Method(v1.BeatmapRankRequestsSubmitPOST, common.PrivilegeWrite))
|
r.POSTMethod("/api/v1/beatmaps/rank_requests", v1.BeatmapRankRequestsSubmitPOST, common.PrivilegeWrite)
|
||||||
|
|
||||||
// Admin: beatmap
|
// Admin: beatmap
|
||||||
r.POST("/api/v1/beatmaps/set_status", Method(v1.BeatmapSetStatusPOST, common.PrivilegeBeatmap))
|
r.POSTMethod("/api/v1/beatmaps/set_status", v1.BeatmapSetStatusPOST, common.PrivilegeBeatmap)
|
||||||
r.GET("/api/v1/beatmaps/ranked_frozen_full", Method(v1.BeatmapRankedFrozenFullGET, common.PrivilegeBeatmap))
|
r.Method("/api/v1/beatmaps/ranked_frozen_full", v1.BeatmapRankedFrozenFullGET, common.PrivilegeBeatmap)
|
||||||
|
|
||||||
// Admin: user managing
|
// Admin: user managing
|
||||||
r.POST("/api/v1/users/manage/set_allowed", Method(v1.UserManageSetAllowedPOST, common.PrivilegeManageUser))
|
r.POSTMethod("/api/v1/users/manage/set_allowed", v1.UserManageSetAllowedPOST, common.PrivilegeManageUser)
|
||||||
|
|
||||||
// M E T A
|
// M E T A
|
||||||
// E T "wow thats so meta"
|
// E T "wow thats so meta"
|
||||||
// T E -- the one who said "wow thats so meta"
|
// T E -- the one who said "wow thats so meta"
|
||||||
// A T E M
|
// A T E M
|
||||||
r.GET("/api/v1/meta/restart", Method(v1.MetaRestartGET, common.PrivilegeAPIMeta))
|
r.Method("/api/v1/meta/restart", v1.MetaRestartGET, common.PrivilegeAPIMeta)
|
||||||
r.GET("/api/v1/meta/kill", Method(v1.MetaKillGET, common.PrivilegeAPIMeta))
|
r.Method("/api/v1/meta/kill", v1.MetaKillGET, common.PrivilegeAPIMeta)
|
||||||
r.GET("/api/v1/meta/up_since", Method(v1.MetaUpSinceGET, common.PrivilegeAPIMeta))
|
r.Method("/api/v1/meta/up_since", v1.MetaUpSinceGET, common.PrivilegeAPIMeta)
|
||||||
r.GET("/api/v1/meta/update", Method(v1.MetaUpdateGET, common.PrivilegeAPIMeta))
|
r.Method("/api/v1/meta/update", v1.MetaUpdateGET, common.PrivilegeAPIMeta)
|
||||||
|
|
||||||
// User Managing + meta
|
// User Managing + meta
|
||||||
r.POST("/api/v1/tokens/fix_privileges", Method(v1.TokenFixPrivilegesPOST,
|
r.POSTMethod("/api/v1/tokens/fix_privileges", v1.TokenFixPrivilegesPOST,
|
||||||
common.PrivilegeManageUser, common.PrivilegeAPIMeta))
|
common.PrivilegeManageUser, common.PrivilegeAPIMeta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// in the new osu-web, the old endpoints are also in /v1 it seems. So /shrug
|
// in the new osu-web, the old endpoints are also in /v1 it seems. So /shrug
|
||||||
{
|
{
|
||||||
r.GET("/api/v1/get_user", PeppyMethod(peppy.GetUser))
|
r.Peppy("/api/v1/get_user", peppy.GetUser)
|
||||||
r.GET("/api/v1/get_match", PeppyMethod(peppy.GetMatch))
|
r.Peppy("/api/v1/get_match", peppy.GetMatch)
|
||||||
r.GET("/api/v1/get_user_recent", PeppyMethod(peppy.GetUserRecent))
|
r.Peppy("/api/v1/get_user_recent", peppy.GetUserRecent)
|
||||||
r.GET("/api/v1/get_user_best", PeppyMethod(peppy.GetUserBest))
|
r.Peppy("/api/v1/get_user_best", peppy.GetUserBest)
|
||||||
r.GET("/api/v1/get_scores", PeppyMethod(peppy.GetScores))
|
r.Peppy("/api/v1/get_scores", peppy.GetScores)
|
||||||
r.GET("/api/v1/get_beatmaps", PeppyMethod(peppy.GetBeatmap))
|
r.Peppy("/api/v1/get_beatmaps", peppy.GetBeatmap)
|
||||||
}
|
}
|
||||||
|
|
||||||
r.GET("/api/status", internals.Status)
|
r.GET("/api/status", internals.Status)
|
||||||
|
|
||||||
r.NotFound = v1.Handle404
|
rawRouter.NotFound = v1.Handle404
|
||||||
|
|
||||||
return r
|
return rawRouter
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user