diff --git a/api.go b/api.go index 22dc82a..7aaca5c 100644 --- a/api.go +++ b/api.go @@ -14,6 +14,7 @@ func declareAPIRoutes(router *gin.Engine) { declareAPIAuthRoutes(apiRoutes) declareAPISurveysRoutes(apiRoutes) declareAPIWorksRoutes(apiRoutes) + declareAPIKeysRoutes(apiRoutes) declareCallbacksRoutes(apiRoutes) authRoutes := router.Group("") diff --git a/keys.go b/keys.go index 4364bb9..77f9321 100644 --- a/keys.go +++ b/keys.go @@ -13,6 +13,36 @@ import ( "github.com/gin-gonic/gin" ) +func declareAPIKeysRoutes(router *gin.RouterGroup) { + usersRoutes := router.Group("/users/:uid") + usersRoutes.Use(userHandler) + + usersRoutes.GET("/pgp_keys", func(c *gin.Context) { + var u *User + if user, ok := c.Get("user"); ok { + u = user.(*User) + } else { + u = c.MustGet("LoggedUser").(*User) + } + + keys, err := u.GetKeys() + if err != nil { + log.Println("Unable to GetKeys:", err) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to retrieve your keys. Please try again in a few moment."}) + return + } + + var ret []byte + for _, key := range keys { + if key.Type == "pgp" { + ret = append(ret, []byte(key.Content)...) + } + } + + c.Data(http.StatusOK, "application/pgp-keys", ret) + }) +} + func declareAPIAuthKeysRoutes(router *gin.RouterGroup) { router.GET("/keys", func(c *gin.Context) { var u *User diff --git a/repositories.go b/repositories.go index a411170..08e78c8 100644 --- a/repositories.go +++ b/repositories.go @@ -349,24 +349,12 @@ func TriggerTagUpdate(c *gin.Context, work *Work, repo *Repository, u *User, tag repo_tag = *tag } - var pgp_keys string - keys, err := u.GetKeys() - if err != nil { - c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Something goes really wrong with your PGP keys: unable to retrieve them."}) - return - } - - for _, k := range keys { - pgp_keys += k.Content + "\n" - } - client := drone.NewClient(droneEndpoint, droneConfig) result, err := client.BuildCreate("srs", "atsebay.t-worker", "", "master", map[string]string{ - "REPO_URL": repo.URI, - "REPO_TAG": repo_tag, - "USER_PGP_PUBKEY": pgp_keys, - "LOGIN": u.Login, - "DEST": fmt.Sprintf("%d", work.Id), + "REPO_URL": repo.URI, + "REPO_TAG": repo_tag, + "LOGIN": u.Login, + "DEST": fmt.Sprintf("%d", work.Id), }) if err != nil { log.Println("Unable to communicate with Drone:", err.Error())