summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2021-06-23 21:58:44 +0200
committerGitHub <noreply@github.com>2021-06-23 15:58:44 -0400
commit58501a26821160c3258c1ad3501f4c1d8db0a597 (patch)
treed8a75bc1e8145e83b02c220006b9bc24d8ba2f9b /routers
parent8640717f5fb045ee88eda14c7dbe3731b8c068b2 (diff)
downloadgitea-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.go4
-rw-r--r--routers/api/v1/swagger/options.go3
-rw-r--r--routers/api/v1/swagger/user.go7
-rw-r--r--routers/api/v1/user/settings.go83
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))
+}