API: Expose its limitation settings (#12714)

* API: Expose its limitation settings

* TESTs

Co-authored-by: zeripath <art27@cantab.net>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
release/v1.15
6543 2020-09-04 20:10:15 +02:00 committed by GitHub
parent 45c0ec3152
commit 2a52aeec49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 133 additions and 14 deletions

View File

@ -11,25 +11,11 @@ import (
"time" "time"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestAPIAllowedReactions(t *testing.T) {
defer prepareTestEnv(t)()
a := new(api.GeneralUISettings)
req := NewRequest(t, "GET", "/api/v1/settings/ui")
resp := MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &a)
assert.Len(t, a.AllowedReactions, len(setting.UI.Reactions))
assert.ElementsMatch(t, setting.UI.Reactions, a.AllowedReactions)
}
func TestAPIIssuesReactions(t *testing.T) { func TestAPIIssuesReactions(t *testing.T) {
defer prepareTestEnv(t)() defer prepareTestEnv(t)()

View File

@ -0,0 +1,49 @@
// Copyright 2020 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 integrations
import (
"net/http"
"testing"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"github.com/stretchr/testify/assert"
)
func TestAPIExposedSettings(t *testing.T) {
defer prepareTestEnv(t)()
ui := new(api.GeneralUISettings)
req := NewRequest(t, "GET", "/api/v1/settings/ui")
resp := MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &ui)
assert.Len(t, ui.AllowedReactions, len(setting.UI.Reactions))
assert.ElementsMatch(t, setting.UI.Reactions, ui.AllowedReactions)
apiSettings := new(api.GeneralAPISettings)
req = NewRequest(t, "GET", "/api/v1/settings/api")
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &apiSettings)
assert.EqualValues(t, &api.GeneralAPISettings{
MaxResponseItems: setting.API.MaxResponseItems,
DefaultPagingNum: setting.API.DefaultPagingNum,
DefaultGitTreesPerPage: setting.API.DefaultGitTreesPerPage,
DefaultMaxBlobSize: setting.API.DefaultMaxBlobSize,
}, apiSettings)
repo := new(api.GeneralRepoSettings)
req = NewRequest(t, "GET", "/api/v1/settings/repository")
resp = MakeRequest(t, req, http.StatusOK)
DecodeJSON(t, resp, &repo)
assert.EqualValues(t, &api.GeneralRepoSettings{
MirrorsDisabled: setting.Repository.DisableMirrors,
HTTPGitDisabled: setting.Repository.DisableHTTPGit,
}, repo)
}

View File

@ -14,3 +14,11 @@ type GeneralRepoSettings struct {
type GeneralUISettings struct { type GeneralUISettings struct {
AllowedReactions []string `json:"allowed_reactions"` AllowedReactions []string `json:"allowed_reactions"`
} }
// GeneralAPISettings contains global api settings exposed by it
type GeneralAPISettings struct {
MaxResponseItems int `json:"max_response_items"`
DefaultPagingNum int `json:"default_paging_num"`
DefaultGitTreesPerPage int `json:"default_git_trees_per_page"`
DefaultMaxBlobSize int64 `json:"default_max_blob_size"`
}

View File

@ -521,6 +521,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Post("/markdown/raw", misc.MarkdownRaw) m.Post("/markdown/raw", misc.MarkdownRaw)
m.Group("/settings", func() { m.Group("/settings", func() {
m.Get("/ui", settings.GetGeneralUISettings) m.Get("/ui", settings.GetGeneralUISettings)
m.Get("/api", settings.GetGeneralAPISettings)
m.Get("/repository", settings.GetGeneralRepoSettings) m.Get("/repository", settings.GetGeneralRepoSettings)
}) })

View File

@ -27,6 +27,24 @@ func GetGeneralUISettings(ctx *context.APIContext) {
}) })
} }
// GetGeneralAPISettings returns instance's global settings for api
func GetGeneralAPISettings(ctx *context.APIContext) {
// swagger:operation GET /settings/api settings getGeneralAPISettings
// ---
// summary: Get instance's global settings for api
// produces:
// - application/json
// responses:
// "200":
// "$ref": "#/responses/GeneralAPISettings"
ctx.JSON(http.StatusOK, api.GeneralAPISettings{
MaxResponseItems: setting.API.MaxResponseItems,
DefaultPagingNum: setting.API.DefaultPagingNum,
DefaultGitTreesPerPage: setting.API.DefaultGitTreesPerPage,
DefaultMaxBlobSize: setting.API.DefaultMaxBlobSize,
})
}
// GetGeneralRepoSettings returns instance's global settings for repositories // GetGeneralRepoSettings returns instance's global settings for repositories
func GetGeneralRepoSettings(ctx *context.APIContext) { func GetGeneralRepoSettings(ctx *context.APIContext) {
// swagger:operation GET /settings/repository settings getGeneralRepositorySettings // swagger:operation GET /settings/repository settings getGeneralRepositorySettings

View File

@ -19,3 +19,10 @@ type swaggerResponseGeneralUISettings struct {
// in:body // in:body
Body api.GeneralUISettings `json:"body"` Body api.GeneralUISettings `json:"body"`
} }
// GeneralAPISettings
// swagger:response GeneralAPISettings
type swaggerResponseGeneralAPISettings struct {
// in:body
Body api.GeneralAPISettings `json:"body"`
}

View File

@ -8672,6 +8672,23 @@
} }
} }
}, },
"/settings/api": {
"get": {
"produces": [
"application/json"
],
"tags": [
"settings"
],
"summary": "Get instance's global settings for api",
"operationId": "getGeneralAPISettings",
"responses": {
"200": {
"$ref": "#/responses/GeneralAPISettings"
}
}
}
},
"/settings/repository": { "/settings/repository": {
"get": { "get": {
"produces": [ "produces": [
@ -12977,6 +12994,33 @@
}, },
"x-go-package": "code.gitea.io/gitea/modules/structs" "x-go-package": "code.gitea.io/gitea/modules/structs"
}, },
"GeneralAPISettings": {
"description": "GeneralAPISettings contains global api settings exposed by it",
"type": "object",
"properties": {
"default_git_trees_per_page": {
"type": "integer",
"format": "int64",
"x-go-name": "DefaultGitTreesPerPage"
},
"default_max_blob_size": {
"type": "integer",
"format": "int64",
"x-go-name": "DefaultMaxBlobSize"
},
"default_paging_num": {
"type": "integer",
"format": "int64",
"x-go-name": "DefaultPagingNum"
},
"max_response_items": {
"type": "integer",
"format": "int64",
"x-go-name": "MaxResponseItems"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"
},
"GeneralRepoSettings": { "GeneralRepoSettings": {
"description": "GeneralRepoSettings contains global repository settings exposed by API", "description": "GeneralRepoSettings contains global repository settings exposed by API",
"type": "object", "type": "object",
@ -15197,6 +15241,12 @@
} }
} }
}, },
"GeneralAPISettings": {
"description": "GeneralAPISettings",
"schema": {
"$ref": "#/definitions/GeneralAPISettings"
}
},
"GeneralRepoSettings": { "GeneralRepoSettings": {
"description": "GeneralRepoSettings", "description": "GeneralRepoSettings",
"schema": { "schema": {