github.com/covergates/covergates@v0.2.2-0.20201009050117-42ef8a19fb95/routers/api/api.go (about) 1 package api 2 3 import ( 4 "net/url" 5 6 "github.com/covergates/covergates/config" 7 "github.com/covergates/covergates/core" 8 "github.com/covergates/covergates/routers/api/repo" 9 "github.com/covergates/covergates/routers/api/report" 10 "github.com/covergates/covergates/routers/api/request" 11 "github.com/covergates/covergates/routers/api/user" 12 "github.com/covergates/covergates/routers/docs" 13 "github.com/gin-gonic/gin" 14 swaggerFiles "github.com/swaggo/files" 15 ginSwagger "github.com/swaggo/gin-swagger" 16 ) 17 18 //go:generate swag init -g ./api.go -d ./ -o ../docs 19 20 // @title CodeCover API 21 // @version 1.0 22 // @description REST API for CodeCover 23 // @termsOfService http://swagger.io/terms/ 24 25 // @license.name Apache 2.0 26 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html 27 28 // @host localhost:8080 29 // @BasePath /api/v1 30 31 // Router for API 32 type Router struct { 33 Config *config.Config 34 Session core.Session 35 // service 36 CoverageService core.CoverageService 37 ChartService core.ChartService 38 SCMService core.SCMService 39 RepoService core.RepoService 40 ReportService core.ReportService 41 HookService core.HookService 42 OAuthService core.OAuthService 43 // store 44 UserStore core.UserStore 45 ReportStore core.ReportStore 46 RepoStore core.RepoStore 47 OAuthStore core.OAuthStore 48 } 49 50 func host(addr string) string { 51 u, err := url.Parse(addr) 52 if err != nil { 53 return addr 54 } 55 return u.Host 56 } 57 58 // RegisterRoutes for API 59 func (r *Router) RegisterRoutes(e *gin.Engine) { 60 docs.SwaggerInfo.Host = host(r.Config.Server.Addr) 61 checkLogin := request.CheckLogin(r.Session, r.OAuthService) 62 e.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) 63 g := e.Group("/api/v1") 64 { 65 g := g.Group("/user") 66 g.GET("", checkLogin, user.HandleGet()) 67 g.POST("", user.HandleCreate()) 68 g.GET("/scm", checkLogin, user.HandleGetSCM(r.Config)) 69 g.GET("/owner/:scm/:namespace/:name", checkLogin, user.HandleGetOwner(r.RepoStore, r.SCMService)) 70 // tokens 71 g.POST("/tokens", checkLogin, user.HandleCreateToken(r.OAuthService)) 72 g.GET("/tokens", checkLogin, user.HandleListTokens(r.OAuthService)) 73 g.DELETE("tokens/:id", checkLogin, user.HandleDeleteToken(r.OAuthService, r.OAuthStore)) 74 // repo 75 g.PATCH("/repos", checkLogin, user.HandleSynchronizeRepo(r.RepoService)) 76 g.GET("/repos", checkLogin, user.HandleListRepo(r.UserStore)) 77 } 78 { 79 g := g.Group("/reports") 80 g.POST("/:id", 81 report.InjectReportContext(r.RepoStore), 82 report.ProtectReport( 83 checkLogin, 84 r.RepoStore, 85 r.SCMService, 86 ), 87 report.HandleUpload( 88 r.CoverageService, 89 r.ReportStore, 90 )) 91 g.POST("/:id/comment/:number", report.HandleComment( 92 r.Config, 93 r.SCMService, 94 r.RepoStore, 95 r.ReportStore, 96 r.ReportService, 97 )) 98 g.GET("/:id", report.HandleGet(r.ReportStore, r.RepoStore, r.SCMService)) 99 g.GET("/:id/treemap/*ref", report.HandleGetTreeMap( 100 r.ReportStore, 101 r.RepoStore, 102 r.ChartService, 103 )) 104 g.GET("/:id/card", report.HandleGetCard(r.RepoStore, r.ReportStore, r.ChartService)) 105 g.GET("/:id/badge", report.HandleGetBadge(r.ReportStore, r.RepoStore)) 106 } 107 { 108 g := g.Group("/repos") 109 g.Use(checkLogin) 110 g.GET("", repo.HandleListAll(r.Config, r.SCMService, r.RepoStore)) 111 g.POST("", repo.HandleCreate(r.RepoStore, r.SCMService)) 112 g.GET("/:scm", repo.HandleListSCM(r.SCMService, r.RepoStore)) 113 { 114 g := g.Group("/:scm/:namespace/:name") 115 g.PATCH("", repo.HandleSync(r.SCMService, r.RepoStore)) 116 g.GET("/setting", repo.HandleGetSetting(r.RepoStore)) 117 g.POST("/setting", repo.WithRepo(r.RepoStore), repo.HandleUpdateSetting(r.RepoStore, r.SCMService)) 118 g.PATCH("/report", repo.HandleReportIDRenew(r.RepoStore, r.SCMService)) 119 g.GET("/files", repo.HandleGetFiles(r.SCMService)) 120 g.GET("/content/*path", repo.HandleGetFileContent(r.SCMService)) 121 g.POST("/hook/create", repo.WithRepo(r.RepoStore), repo.HandleHookCreate(r.HookService)) 122 g.GET("/commits", repo.WithRepo(r.RepoStore), repo.HandleListCommits(r.SCMService)) 123 g.GET("/branches", repo.WithRepo(r.RepoStore), repo.HandleListBranches(r.SCMService)) 124 } 125 } 126 { 127 // repo api without authorization required 128 g := g.Group("/repos/:scm/:namespace/:name") 129 g.GET("", repo.HandleGet(r.RepoStore)) 130 g.POST("/hook", repo.WithRepo(r.RepoStore), repo.HandleHook(r.SCMService, r.HookService)) 131 } 132 }