woodpecker/server/token.go

71 lines
1.3 KiB
Go
Raw Normal View History

2015-04-11 05:22:55 +00:00
package server
import (
"time"
2015-04-11 05:22:55 +00:00
"github.com/gin-gonic/gin"
2015-04-13 08:22:51 +00:00
"github.com/gin-gonic/gin/binding"
2015-04-11 05:22:55 +00:00
2015-04-13 06:15:28 +00:00
"github.com/drone/drone/common"
2015-04-11 05:22:55 +00:00
)
2015-04-13 08:22:51 +00:00
// POST /api/user/tokens
2015-04-11 05:22:55 +00:00
func PostToken(c *gin.Context) {
settings := ToSettings(c)
2015-04-13 06:15:28 +00:00
store := ToDatastore(c)
sess := ToSession(c)
user := ToUser(c)
2015-04-13 08:22:51 +00:00
// if a session secret is not defined there is no way to
// generate jwt user tokens, so we must throw an error
if settings.Session == nil || len(settings.Session.Secret) == 0 {
c.String(500, "User tokens are not configured")
return
}
2015-04-13 08:22:51 +00:00
in := &common.Token{}
if !c.BindWith(in, binding.JSON) {
return
}
2015-04-13 06:15:28 +00:00
token := &common.Token{}
2015-04-13 08:22:51 +00:00
token.Label = in.Label
token.Repos = in.Repos
token.Scopes = in.Scopes
2015-04-13 06:15:28 +00:00
token.Login = user.Login
token.Kind = common.TokenUser
token.Issued = time.Now().UTC().Unix()
2015-04-13 06:15:28 +00:00
err := store.SetToken(token)
2015-04-13 06:15:28 +00:00
if err != nil {
c.Fail(400, err)
}
jwt, err := sess.GenerateToken(token)
if err != nil {
c.Fail(400, err)
}
c.JSON(200, struct {
*common.Token
Hash string `json:"hash"`
}{token, jwt})
2015-04-11 05:22:55 +00:00
}
// DELETE /api/user/tokens/:label
2015-04-11 05:22:55 +00:00
func DelToken(c *gin.Context) {
store := ToDatastore(c)
user := ToUser(c)
2015-04-13 05:32:32 +00:00
label := c.Params.ByName("label")
2015-04-13 08:22:51 +00:00
token, err := store.Token(user.Login, label)
2015-04-11 05:22:55 +00:00
if err != nil {
c.Fail(404, err)
}
err = store.DelToken(token)
2015-04-11 05:22:55 +00:00
if err != nil {
c.Fail(400, err)
}
2015-04-13 08:22:51 +00:00
c.Writer.WriteHeader(200)
2015-04-11 05:22:55 +00:00
}