diff options
author | 6543 <6543@obermui.de> | 2021-06-23 21:58:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-23 15:58:44 -0400 |
commit | 58501a26821160c3258c1ad3501f4c1d8db0a597 (patch) | |
tree | d8a75bc1e8145e83b02c220006b9bc24d8ba2f9b /routers | |
parent | 8640717f5fb045ee88eda14c7dbe3731b8c068b2 (diff) | |
download | gitea-58501a26821160c3258c1ad3501f4c1d8db0a597.tar.gz gitea-58501a26821160c3258c1ad3501f4c1d8db0a597.zip |
[API] GET / SET User Settings (#16169)
* API: GET/SET User Settings
* linter
* Apply suggestions from code review
* Update modules/structs/user.go
* lint
* fix swagger
* move User2UserSettings to convert
* as per @zeripath "preferences" -> "settings"
Co-authored-by: techknowlogick <matti@mdranta.net>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/api/v1/api.go | 4 | ||||
-rw-r--r-- | routers/api/v1/swagger/options.go | 3 | ||||
-rw-r--r-- | routers/api/v1/swagger/user.go | 7 | ||||
-rw-r--r-- | routers/api/v1/user/settings.go | 83 |
4 files changed, 97 insertions, 0 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 9efc2af244..87db804dcb 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -649,6 +649,10 @@ func Routes() *web.Route { m.Group("/user", func() { m.Get("", user.GetAuthenticatedUser) + m.Group("/settings", func() { + m.Get("", user.GetUserSettings) + m.Patch("", bind(api.UserSettingsOptions{}), user.UpdateUserSettings) + }, reqToken()) m.Combo("/emails").Get(user.ListEmails). Post(bind(api.CreateEmailOption{}), user.AddEmail). Delete(bind(api.DeleteEmailOption{}), user.DeleteEmail) diff --git a/routers/api/v1/swagger/options.go b/routers/api/v1/swagger/options.go index 11158fb86d..b5f34e86a3 100644 --- a/routers/api/v1/swagger/options.go +++ b/routers/api/v1/swagger/options.go @@ -161,4 +161,7 @@ type swaggerParameterBodies struct { // in:body CreateTagOption api.CreateTagOption + + // in:body + UserSettingsOptions api.UserSettingsOptions } diff --git a/routers/api/v1/swagger/user.go b/routers/api/v1/swagger/user.go index a2df40e4cf..a4d5201236 100644 --- a/routers/api/v1/swagger/user.go +++ b/routers/api/v1/swagger/user.go @@ -42,3 +42,10 @@ type swaggerResponseUserHeatmapData struct { // in:body Body []models.UserHeatmapData `json:"body"` } + +// UserSettings +// swagger:response UserSettings +type swaggerResponseUserSettings struct { + // in:body + Body []api.UserSettings `json:"body"` +} diff --git a/routers/api/v1/user/settings.go b/routers/api/v1/user/settings.go new file mode 100644 index 0000000000..b4548e7443 --- /dev/null +++ b/routers/api/v1/user/settings.go @@ -0,0 +1,83 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package user + +import ( + "net/http" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/convert" + api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/web" +) + +// GetUserSettings returns user settings +func GetUserSettings(ctx *context.APIContext) { + // swagger:operation GET /user/settings user getUserSettings + // --- + // summary: Get user settings + // produces: + // - application/json + // responses: + // "200": + // "$ref": "#/responses/UserSettings" + ctx.JSON(http.StatusOK, convert.User2UserSettings(ctx.User)) +} + +// UpdateUserSettings returns user settings +func UpdateUserSettings(ctx *context.APIContext) { + // swagger:operation PATCH /user/settings user updateUserSettings + // --- + // summary: Update user settings + // parameters: + // - name: body + // in: body + // schema: + // "$ref": "#/definitions/UserSettingsOptions" + // produces: + // - application/json + // responses: + // "200": + // "$ref": "#/responses/UserSettings" + + form := web.GetForm(ctx).(*api.UserSettingsOptions) + + if form.FullName != nil { + ctx.User.FullName = *form.FullName + } + if form.Description != nil { + ctx.User.Description = *form.Description + } + if form.Website != nil { + ctx.User.Website = *form.Website + } + if form.Location != nil { + ctx.User.Location = *form.Location + } + if form.Language != nil { + ctx.User.Language = *form.Language + } + if form.Theme != nil { + ctx.User.Theme = *form.Theme + } + if form.DiffViewStyle != nil { + ctx.User.DiffViewStyle = *form.DiffViewStyle + } + + if form.HideEmail != nil { + ctx.User.KeepEmailPrivate = *form.HideEmail + } + if form.HideActivity != nil { + ctx.User.KeepActivityPrivate = *form.HideActivity + } + + if err := models.UpdateUser(ctx.User); err != nil { + ctx.InternalServerError(err) + return + } + + ctx.JSON(http.StatusOK, convert.User2UserSettings(ctx.User)) +} |