diff options
author | 6543 <6543@obermui.de> | 2020-12-16 23:39:12 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-17 00:39:12 +0100 |
commit | 9e456b5a56c3cf1860ca86be85e19619ad544160 (patch) | |
tree | 2088623e52e885947199b947c1a593ba30ecb9c0 /routers/api | |
parent | 069acf6a215ea05f23ba5bf75e84dcc63ff95044 (diff) | |
download | gitea-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.go | 31 | ||||
-rw-r--r-- | routers/api/v1/utils/utils.go | 19 |
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 +} |