package main import ( "fmt" "gitea-issue/controller" "gitea-issue/giteaClient" "gitea-issue/proxy" "gitea-issue/security" "github.com/caarlos0/env" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" _ "github.com/jinzhu/gorm/dialects/sqlite" "github.com/savaki/swag" "github.com/savaki/swag/swagger" ginSwagger "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" "net/http" "strconv" ) var ( giteaConfig giteaClient.GiteaConfig proxyConfig proxy.ProxyConfig ) func init() { if err := env.Parse(&giteaConfig); err != nil { panic(fmt.Sprintf("ENV error: %+v", err.Error())) } if err := env.Parse(&proxyConfig); err != nil { panic(fmt.Sprintf("ENV error: %+v", err.Error())) } giteaClient.SetUp(giteaConfig) proxy.SetUp(proxyConfig) } func main() { router := gin.Default() config := cors.DefaultConfig() config.AllowOrigins = []string{proxyConfig.ProjectOrigin} router.Use(gin.Logger()) router.Use(cors.New(config)) router.Use(gin.Recovery()) proxyApi := swag.New( swag.Title("Gitea issues proxy"), swag.Description("Gitea issues proxy for separate projects"), swag.ContactEmail("aleksander@cynarski.pl"), swag.License("MIT", "https://opensource.org/licenses/MIT"), swag.Tag("issues", "Gitea issues proxy endpoints"), swag.Tag("labels", "Gites labels for issue"), swag.Endpoints( controller.PostUserSwagger(), controller.PostIssueSwagger(), controller.PostIssueCommentSwagger(), controller.GetIssuesSwagger(), controller.GetIssueSwagger(), controller.GetIssueCommentsSwagger(), controller.GetLabelsSwagger()), ) authorizedApi := router.Group("/", security.BearerToken()) proxyApi.Walk(func(path string, endpoint *swagger.Endpoint) { h := endpoint.Handler.(func(c *gin.Context)) path = swag.ColonPath(path) authorizedApi.Handle(endpoint.Method, path, h) }) docs := router.Group("/") docs.GET("/swagger.json", gin.WrapH(proxyApi.Handler(true))) url := ginSwagger.URL("/swagger.json") docs.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url)) _ = router.Run() } func getIssues(c *gin.Context) { issues, err := giteaClient.GetIssues(); if (err != nil) { c.AbortWithStatus(http.StatusNotFound) } c.AsciiJSON(http.StatusOK, issues) } func getIssue(c *gin.Context) { issueId, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { fmt.Println(fmt.Sprintf("ParseInt err: %+v", err)) c.AsciiJSON(http.StatusNotFound, err.Error()) } issue, err := giteaClient.GetIssue(issueId) if err != nil { c.AbortWithStatus(http.StatusNotFound) } c.AsciiJSON(http.StatusOK, issue) } func getIssueComments(c *gin.Context) { issueId, err := strconv.ParseInt(c.Param("id"), 10, 64) if err != nil { fmt.Println(fmt.Sprintf("ParseInt err: %+v", err)) c.AsciiJSON(http.StatusNotFound, err.Error()) } issueComments, err := giteaClient.GetIssueComments(issueId) if err != nil { c.AbortWithStatus(http.StatusNotFound) } c.AsciiJSON(http.StatusOK, issueComments) } func getLabels(c *gin.Context) { labels, err := giteaClient.GetLabels() if err != nil { c.AbortWithStatus(http.StatusNotFound) } c.AsciiJSON(http.StatusOK, labels) }