ripple-api/app/start.go

132 lines
4.2 KiB
Go
Raw Normal View History

2016-04-03 17:59:27 +00:00
package app
import (
"fmt"
2016-04-03 17:59:27 +00:00
2016-04-19 14:07:27 +00:00
"git.zxq.co/ripple/rippleapi/app/internals"
"git.zxq.co/ripple/rippleapi/app/peppy"
2016-04-19 14:07:27 +00:00
"git.zxq.co/ripple/rippleapi/app/v1"
"git.zxq.co/ripple/rippleapi/common"
"github.com/getsentry/raven-go"
2016-04-03 17:59:27 +00:00
"github.com/gin-gonic/contrib/gzip"
"github.com/gin-gonic/gin"
"github.com/jmoiron/sqlx"
"github.com/serenize/snaker"
2016-04-03 17:59:27 +00:00
)
2016-08-09 21:06:23 +00:00
var (
db *sqlx.DB
2016-08-09 21:06:23 +00:00
cf common.Conf
)
var commonClusterfucks = map[string]string{
"RegisteredOn": "register_datetime",
"UsernameAKA": "username_aka",
}
2016-04-03 17:59:27 +00:00
// Start begins taking HTTP connections.
func Start(conf common.Conf, dbO *sqlx.DB) *gin.Engine {
db = dbO
2016-08-09 21:06:23 +00:00
cf = conf
db.MapperFunc(func(s string) string {
if x, ok := commonClusterfucks[s]; ok {
return x
}
return snaker.CamelToSnake(s)
})
setUpLimiter()
2016-04-03 17:59:27 +00:00
r := gin.Default()
r.Use(gzip.Gzip(gzip.DefaultCompression))
if conf.SentryDSN != "" {
ravenClient, err := raven.New(conf.SentryDSN)
2016-06-17 08:34:53 +00:00
ravenClient.SetRelease(common.Version)
if err != nil {
fmt.Println(err)
} else {
2016-06-16 11:49:35 +00:00
r.Use(Recovery(ravenClient, false))
}
}
2016-04-03 17:59:27 +00:00
api := r.Group("/api")
{
2016-09-02 16:14:23 +00:00
p := api.Group("/")
{
p.GET("/get_user", PeppyMethod(peppy.GetUser))
p.GET("/get_match", PeppyMethod(peppy.GetMatch))
p.GET("/get_user_recent", PeppyMethod(peppy.GetUserRecent))
p.GET("/get_user_best", PeppyMethod(peppy.GetUserBest))
p.GET("/get_scores", PeppyMethod(peppy.GetScores))
p.GET("/get_beatmaps", PeppyMethod(peppy.GetBeatmap))
}
2016-04-03 17:59:27 +00:00
gv1 := api.Group("/v1")
{
gv1.POST("/tokens", Method(v1.TokenNewPOST))
gv1.POST("/tokens/new", Method(v1.TokenNewPOST))
2016-06-14 08:03:53 +00:00
gv1.GET("/tokens/self/delete", Method(v1.TokenSelfDeleteGET))
2016-04-05 20:22:13 +00:00
// Auth-free API endpoints (public data)
gv1.GET("/ping", Method(v1.PingGET))
gv1.GET("/surprise_me", Method(v1.SurpriseMeGET))
2016-06-13 20:40:01 +00:00
gv1.GET("/doc", Method(v1.DocGET))
gv1.GET("/doc/content", Method(v1.DocContentGET))
gv1.GET("/doc/rules", Method(v1.DocRulesGET))
gv1.GET("/users", Method(v1.UsersGET))
gv1.GET("/users/whatid", Method(v1.UserWhatsTheIDGET))
gv1.GET("/users/full", Method(v1.UserFullGET))
gv1.GET("/users/userpage", Method(v1.UserUserpageGET))
gv1.GET("/users/lookup", Method(v1.UserLookupGET))
gv1.GET("/users/scores/best", Method(v1.UserScoresBestGET))
gv1.GET("/users/scores/recent", Method(v1.UserScoresRecentGET))
gv1.GET("/badges", Method(v1.BadgesGET))
gv1.GET("/beatmaps", Method(v1.BeatmapGET))
gv1.GET("/leaderboard", Method(v1.LeaderboardGET))
gv1.GET("/tokens", Method(v1.TokenGET))
gv1.GET("/users/self", Method(v1.UserSelfGET))
gv1.GET("/tokens/self", Method(v1.TokenSelfGET))
2016-07-06 22:20:36 +00:00
gv1.GET("/blog/posts", Method(v1.BlogPostsGET))
gv1.GET("/blog/posts/content", Method(v1.BlogPostsContentGET))
gv1.GET("/scores", Method(v1.ScoresGET))
2016-04-07 09:20:35 +00:00
// ReadConfidential privilege required
gv1.GET("/friends", Method(v1.FriendsGET, common.PrivilegeReadConfidential))
gv1.GET("/friends/with", Method(v1.FriendsWithGET, common.PrivilegeReadConfidential))
gv1.GET("/users/self/donor_info", Method(v1.UsersSelfDonorInfoGET, common.PrivilegeReadConfidential))
2016-04-07 17:32:48 +00:00
// Write privilege required
gv1.GET("/friends/add", Method(v1.FriendsAddGET, common.PrivilegeWrite))
gv1.GET("/friends/del", Method(v1.FriendsDelGET, common.PrivilegeWrite))
2016-04-27 18:03:06 +00:00
// Admin: beatmap
gv1.POST("/beatmaps/set_status", Method(v1.BeatmapSetStatusPOST, common.PrivilegeBeatmap))
gv1.GET("/beatmaps/ranked_frozen_full", Method(v1.BeatmapRankedFrozenFullGET, common.PrivilegeBeatmap))
2016-04-27 18:03:06 +00:00
2016-04-12 19:41:08 +00:00
// Admin: user managing
gv1.POST("/users/manage/set_allowed", Method(v1.UserManageSetAllowedPOST, common.PrivilegeManageUser))
2016-04-12 19:41:08 +00:00
2016-04-07 17:32:48 +00:00
// M E T A
// E T "wow thats so meta"
// T E -- the one who said "wow thats so meta"
2016-04-07 17:32:48 +00:00
// A T E M
gv1.GET("/meta/restart", Method(v1.MetaRestartGET, common.PrivilegeAPIMeta))
gv1.GET("/meta/kill", Method(v1.MetaKillGET, common.PrivilegeAPIMeta))
gv1.GET("/meta/up_since", Method(v1.MetaUpSinceGET, common.PrivilegeAPIMeta))
gv1.GET("/meta/update", Method(v1.MetaUpdateGET, common.PrivilegeAPIMeta))
// User Managing + meta
gv1.GET("/tokens/fix_privileges", Method(v1.TokenFixPrivilegesGET,
common.PrivilegeManageUser, common.PrivilegeAPIMeta))
2016-04-03 17:59:27 +00:00
}
api.GET("/status", internals.Status)
2016-04-03 17:59:27 +00:00
}
r.NoRoute(v1.Handle404)
2016-04-07 17:32:48 +00:00
return r
2016-04-03 17:59:27 +00:00
}