Skip to content

Commit 2fbbf4c

Browse files
authored
Merge pull request #26 from iver-wharf/feature/add-patch-for-token
Add endpoint PUT /token
2 parents 81d395e + a2518db commit 2fbbf4c

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ This project tries to follow [SemVer 2.0.0](https://semver.org/).
1717
- Added endpoint `PUT /provider` as an idempotent way of creating a
1818
provider. (#28)
1919

20+
- Add endpoint `PUT /token` as an idempotent way of creating a
21+
token. (#26)
22+
2023
- Added environment var for setting bind address and port. (#29)
2124

2225
- Fixed missing `failed` field from `main.TestsResults` in

token.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ func (m TokenModule) Register(g *gin.RouterGroup) {
2727
{
2828
token.GET("/:tokenid", m.getTokenHandler)
2929
token.POST("", m.postTokenHandler)
30+
token.PUT("", m.putTokenHandler)
3031
}
3132
}
3233

@@ -73,6 +74,7 @@ func (m TokenModule) getTokenHandler(c *gin.Context) {
7374
} else if err != nil {
7475
problem.WriteDBReadError(c, err, fmt.Sprintf(
7576
"Failed fetching token by ID %d from database.", tokenID))
77+
return
7678
}
7779

7880
c.JSON(http.StatusOK, token)
@@ -122,7 +124,6 @@ type TokenWithProviderID struct {
122124
// postTokenHandler godoc
123125
// @summary Add token to database.
124126
// @description Add token to database. Provider in post object has to exists or should be empty.
125-
// @description Provider will has to be updated token ID during this operation.
126127
// @tags token
127128
// @accept json
128129
// @produce json
@@ -178,3 +179,31 @@ func (m TokenModule) postTokenHandler(c *gin.Context) {
178179

179180
c.JSON(http.StatusCreated, token)
180181
}
182+
183+
// postTokenHandler godoc
184+
// @summary Put token in database.
185+
// @description Creates a new token if a match is not found.
186+
// @tags token
187+
// @accept json
188+
// @produce json
189+
// @param token body TokenWithProviderID _ "token object"
190+
// @success 200 {object} Token
191+
// @failure 400 {object} problem.Response "Bad request"
192+
// @failure 401 {object} problem.Response "Unauthorized or missing jwt token"
193+
// @failure 502 {object} problem.Response "Database is unreachable"
194+
// @router /token [put]
195+
func (m TokenModule) putTokenHandler(c *gin.Context) {
196+
var inputToken Token
197+
if err := c.ShouldBindJSON(&inputToken); err != nil {
198+
problem.WriteInvalidBindError(c, err, "One or more parameters failed to parse when reading the request body.")
199+
return
200+
}
201+
var token Token
202+
if err := m.Database.Where(inputToken).FirstOrCreate(&token).Error; err != nil {
203+
problem.WriteDBWriteError(c, err, fmt.Sprintf(
204+
"Failed fetch or create on token by username %q and token value.",
205+
inputToken.UserName))
206+
return
207+
}
208+
c.JSON(http.StatusOK, token)
209+
}

0 commit comments

Comments
 (0)