Skip to content

Commit

Permalink
API: GET/SET User Settings
Browse files Browse the repository at this point in the history
  • Loading branch information
6543 committed Jun 16, 2021
1 parent b8e4ce7 commit 9c9f0ee
Show file tree
Hide file tree
Showing 6 changed files with 273 additions and 1 deletion.
26 changes: 26 additions & 0 deletions modules/structs/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,29 @@ func (u User) MarshalJSON() ([]byte, error) {
CompatUserName string `json:"username"`
}{shadow(u), u.UserName})
}

type UserSettings struct {
FullName string `json:"full_name"`
Website string `json:"website"`
Description string `json:"description"`
Location string `json:"location"`
Language string `json:"language"`
Theme string `json:"theme"`
DiffViewStyle string `json:"diff_view_style"`
// Piracy
HideEmail bool `json:"hide_email"`
HideActivity bool `json:"hide_activity"`
}

type UserSettingsOptions struct {
FullName *string `json:"full_name" binding:"MaxSize(100)"`
Website *string `json:"website" binding:"OmitEmpty;ValidUrl;MaxSize(255)"`
Description *string `json:"description" binding:"MaxSize(255)"`
Location *string `json:"location" binding:"MaxSize(50)"`
Language *string `json:"language"`
Theme *string `json:"theme"`
DiffViewStyle *string `json:"diff_view_style"`
// Piracy
HideEmail *bool `json:"hide_email"`
HideActivity *bool `json:"hide_activity"`
}
4 changes: 4 additions & 0 deletions routers/api/v1/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,10 @@ func Routes() *web.Route {

m.Group("/user", func() {
m.Get("", user.GetAuthenticatedUser)
m.Group("/preferences", 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)
Expand Down
3 changes: 3 additions & 0 deletions routers/api/v1/swagger/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,7 @@ type swaggerParameterBodies struct {

// in:body
PullReviewRequestOptions api.PullReviewRequestOptions

// in:body
UserSettingsOptions api.UserSettingsOptions
}
7 changes: 7 additions & 0 deletions routers/api/v1/swagger/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
}
96 changes: 96 additions & 0 deletions routers/api/v1/user/preferences.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// 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"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/web"
)

func user2UserSettings(user *models.User) api.UserSettings {
return api.UserSettings{
FullName: user.FullName,
Website: user.Website,
Location: user.Location,
Language: user.Language,
Description: user.Description,
Theme: user.Theme,
HideEmail: user.KeepEmailPrivate,
HideActivity: user.KeepActivityPrivate,
DiffViewStyle: user.DiffViewStyle,
}
}

// GetUserSettings returns user settings
func GetUserSettings(ctx *context.APIContext) {
// swagger:operation GET /user/preferences user getUserSettings
// ---
// summary: Get user settings
// produces:
// - application/json
// responses:
// "200":
// "$ref": "#/responses/UserSettings"
ctx.JSON(http.StatusOK, user2UserSettings(ctx.User))
}

// UpdateUserSettings returns user settings
func UpdateUserSettings(ctx *context.APIContext) {
// swagger:operation PATCH /user/preferences user getUserSettings
// ---
// 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, user2UserSettings(ctx.User))
}
138 changes: 137 additions & 1 deletion templates/swagger/v1_json.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -10654,6 +10654,47 @@
}
}
},
"/user/preferences": {
"get": {
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "Get user settings",
"operationId": "getUserSettings",
"responses": {
"200": {
"$ref": "#/responses/UserSettings"
}
}
},
"patch": {
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "Update user settings",
"operationId": "getUserSettings",
"parameters": [
{
"name": "body",
"in": "body",
"schema": {
"$ref": "#/definitions/UserSettingsOptions"
}
}
],
"responses": {
"200": {
"$ref": "#/responses/UserSettings"
}
}
}
},
"/user/repos": {
"get": {
"produces": [
Expand Down Expand Up @@ -16344,6 +16385,92 @@
},
"x-go-package": "code.gitea.io/gitea/models"
},
"UserSettings": {
"type": "object",
"properties": {
"description": {
"type": "string",
"x-go-name": "Description"
},
"diff_view_style": {
"type": "string",
"x-go-name": "DiffViewStyle"
},
"full_name": {
"type": "string",
"x-go-name": "FullName"
},
"hide_activity": {
"type": "boolean",
"x-go-name": "HideActivity"
},
"hide_email": {
"description": "Piracy",
"type": "boolean",
"x-go-name": "HideEmail"
},
"language": {
"type": "string",
"x-go-name": "Language"
},
"location": {
"type": "string",
"x-go-name": "Location"
},
"theme": {
"type": "string",
"x-go-name": "Theme"
},
"website": {
"type": "string",
"x-go-name": "Website"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"UserSettingsOptions": {
"type": "object",
"properties": {
"description": {
"type": "string",
"x-go-name": "Description"
},
"diff_view_style": {
"type": "string",
"x-go-name": "DiffViewStyle"
},
"full_name": {
"type": "string",
"x-go-name": "FullName"
},
"hide_activity": {
"type": "boolean",
"x-go-name": "HideActivity"
},
"hide_email": {
"description": "Piracy",
"type": "boolean",
"x-go-name": "HideEmail"
},
"language": {
"type": "string",
"x-go-name": "Language"
},
"location": {
"type": "string",
"x-go-name": "Location"
},
"theme": {
"type": "string",
"x-go-name": "Theme"
},
"website": {
"type": "string",
"x-go-name": "Website"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"WatchInfo": {
"description": "WatchInfo represents an API watch status of one repository",
"type": "object",
Expand Down Expand Up @@ -17047,6 +17174,15 @@
}
}
},
"UserSettings": {
"description": "UserSettings",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/UserSettings"
}
}
},
"WatchInfo": {
"description": "WatchInfo",
"schema": {
Expand Down Expand Up @@ -17101,7 +17237,7 @@
"parameterBodies": {
"description": "parameterBodies",
"schema": {
"$ref": "#/definitions/PullReviewRequestOptions"
"$ref": "#/definitions/UserSettingsOptions"
}
},
"redirect": {
Expand Down

0 comments on commit 9c9f0ee

Please sign in to comment.