aboutsummaryrefslogtreecommitdiffstats
path: root/routers/api
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-12-16 23:39:12 +0000
committerGitHub <noreply@github.com>2020-12-17 00:39:12 +0100
commit9e456b5a56c3cf1860ca86be85e19619ad544160 (patch)
tree2088623e52e885947199b947c1a593ba30ecb9c0 /routers/api
parent069acf6a215ea05f23ba5bf75e84dcc63ff95044 (diff)
downloadgitea-9e456b5a56c3cf1860ca86be85e19619ad544160.tar.gz
gitea-9e456b5a56c3cf1860ca86be85e19619ad544160.zip
HotFix: Hide private partisipation in Orgs (#13994)
* HotFix: Hide private partisipation in Orgs * refactor & add node to fuc GetOrganizations
Diffstat (limited to 'routers/api')
-rw-r--r--routers/api/v1/org/org.go31
-rw-r--r--routers/api/v1/utils/utils.go19
2 files changed, 39 insertions, 11 deletions
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go
index 987f141078..ca3e10173b 100644
--- a/routers/api/v1/org/org.go
+++ b/routers/api/v1/org/org.go
@@ -17,19 +17,28 @@ import (
"code.gitea.io/gitea/routers/api/v1/utils"
)
-func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) {
- if err := u.GetOrganizations(&models.SearchOrganizationsOptions{
- ListOptions: utils.GetListOptions(ctx),
- All: all,
- }); err != nil {
- ctx.Error(http.StatusInternalServerError, "GetOrganizations", err)
+func listUserOrgs(ctx *context.APIContext, u *models.User) {
+
+ listOptions := utils.GetListOptions(ctx)
+ showPrivate := ctx.IsSigned && (ctx.User.IsAdmin || ctx.User.ID == u.ID)
+
+ orgs, err := models.GetOrgsByUserID(u.ID, showPrivate)
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "GetOrgsByUserID", err)
return
}
+ maxResults := len(orgs)
+
+ orgs = utils.PaginateUserSlice(orgs, listOptions.Page, listOptions.PageSize)
- apiOrgs := make([]*api.Organization, len(u.Orgs))
- for i := range u.Orgs {
- apiOrgs[i] = convert.ToOrganization(u.Orgs[i])
+ apiOrgs := make([]*api.Organization, len(orgs))
+ for i := range orgs {
+ apiOrgs[i] = convert.ToOrganization(orgs[i])
}
+
+ ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
+ ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
+ ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
ctx.JSON(http.StatusOK, &apiOrgs)
}
@@ -53,7 +62,7 @@ func ListMyOrgs(ctx *context.APIContext) {
// "200":
// "$ref": "#/responses/OrganizationList"
- listUserOrgs(ctx, ctx.User, true)
+ listUserOrgs(ctx, ctx.User)
}
// ListUserOrgs list user's orgs
@@ -85,7 +94,7 @@ func ListUserOrgs(ctx *context.APIContext) {
if ctx.Written() {
return
}
- listUserOrgs(ctx, u, ctx.User != nil && (ctx.User.IsAdmin || ctx.User.ID == u.ID))
+ listUserOrgs(ctx, u)
}
// GetAll return list of all public organizations
diff --git a/routers/api/v1/utils/utils.go b/routers/api/v1/utils/utils.go
index ad1a136db4..5732ea7f7d 100644
--- a/routers/api/v1/utils/utils.go
+++ b/routers/api/v1/utils/utils.go
@@ -66,3 +66,22 @@ func GetListOptions(ctx *context.APIContext) models.ListOptions {
PageSize: convert.ToCorrectPageSize(ctx.QueryInt("limit")),
}
}
+
+// PaginateUserSlice cut a slice of Users as per pagination options
+// TODO: make it generic
+func PaginateUserSlice(items []*models.User, page, pageSize int) []*models.User {
+ if page != 0 {
+ page--
+ }
+
+ if page*pageSize >= len(items) {
+ return items[len(items):]
+ }
+
+ items = items[page*pageSize:]
+
+ if len(items) > pageSize {
+ return items[:pageSize]
+ }
+ return items
+}