diff options
author | Dan Molik <dan@danmolik.com> | 2020-04-09 20:37:31 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-09 19:37:31 -0500 |
commit | 743022116df236c0a77c020ad142a6e21b394320 (patch) | |
tree | 3cf43fe05f84d3e270ca38e28bba2af66c7eb502 /routers/api/v1 | |
parent | 4ec7a659cee94036d4632a7d3a09d37939ea1548 (diff) | |
download | gitea-743022116df236c0a77c020ad142a6e21b394320.tar.gz gitea-743022116df236c0a77c020ad142a6e21b394320.zip |
Add Get/Update for api/v1/user/applications/oauth2 (#11008)
Add api methods for getting and updating user oauth2 applications.
Signed-off-by: Dan Molik <dan@danmolik.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'routers/api/v1')
-rw-r--r-- | routers/api/v1/api.go | 5 | ||||
-rw-r--r-- | routers/api/v1/user/app.go | 86 |
2 files changed, 90 insertions, 1 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 150c073c91..bce3bf2452 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -580,7 +580,10 @@ func RegisterRoutes(m *macaron.Macaron) { m.Combo("/oauth2"). Get(user.ListOauth2Applications). Post(bind(api.CreateOAuth2ApplicationOptions{}), user.CreateOauth2Application) - m.Delete("/oauth2/:id", user.DeleteOauth2Application) + m.Combo("/oauth2/:id"). + Delete(user.DeleteOauth2Application). + Patch(bind(api.CreateOAuth2ApplicationOptions{}), user.UpdateOauth2Application). + Get(user.GetOauth2Application) }, reqToken()) m.Group("/gpg_keys", func() { diff --git a/routers/api/v1/user/app.go b/routers/api/v1/user/app.go index 7e0e620fea..9ec506bcf2 100644 --- a/routers/api/v1/user/app.go +++ b/routers/api/v1/user/app.go @@ -231,3 +231,89 @@ func DeleteOauth2Application(ctx *context.APIContext) { ctx.Status(http.StatusNoContent) } + +// GetOauth2Application get OAuth2 Application +func GetOauth2Application(ctx *context.APIContext) { + // swagger:operation GET /user/applications/oauth2/{id} user userGetOAuth2Application + // --- + // summary: get an OAuth2 Application + // produces: + // - application/json + // parameters: + // - name: id + // in: path + // description: Application ID to be found + // type: integer + // format: int64 + // required: true + // responses: + // "200": + // "$ref": "#/responses/OAuth2Application" + appID := ctx.ParamsInt64(":id") + app, err := models.GetOAuth2ApplicationByID(appID) + if err != nil { + if models.IsErrOauthClientIDInvalid(err) || models.IsErrOAuthApplicationNotFound(err) { + ctx.NotFound() + } else { + ctx.Error(http.StatusInternalServerError, "GetOauth2ApplicationByID", err) + } + return + } + + app.ClientSecret = "" + + ctx.JSON(http.StatusOK, convert.ToOAuth2Application(app)) +} + +// UpdateOauth2Application update OAuth2 Application +func UpdateOauth2Application(ctx *context.APIContext, data api.CreateOAuth2ApplicationOptions) { + // swagger:operation PATCH /user/applications/oauth2/{id} user userUpdateOAuth2Application + // --- + // summary: update an OAuth2 Application, this includes regenerating the client secret + // produces: + // - application/json + // parameters: + // - name: id + // in: path + // description: application to be updated + // type: integer + // format: int64 + // required: true + // - name: body + // in: body + // required: true + // schema: + // "$ref": "#/definitions/CreateOAuth2ApplicationOptions" + // responses: + // "200": + // "$ref": "#/responses/OAuth2Application" + appID := ctx.ParamsInt64(":id") + + err := models.UpdateOAuth2Application(models.UpdateOAuth2ApplicationOptions{ + Name: data.Name, + UserID: ctx.User.ID, + ID: appID, + RedirectURIs: data.RedirectURIs, + }) + if err != nil { + ctx.Error(http.StatusBadRequest, "", "error updating oauth2 application") + return + } + app, err := models.GetOAuth2ApplicationByID(appID) + if err != nil { + if models.IsErrOauthClientIDInvalid(err) || models.IsErrOAuthApplicationNotFound(err) { + ctx.NotFound() + } else { + ctx.Error(http.StatusInternalServerError, "UpdateOauth2ApplicationByID", err) + } + return + } + secret, err := app.GenerateClientSecret() + if err != nil { + ctx.Error(http.StatusBadRequest, "", "error updating application secret") + return + } + app.ClientSecret = secret + + ctx.JSON(http.StatusOK, convert.ToOAuth2Application(app)) +} |