mirror of
https://gitea.com/gitea/tea.git
synced 2026-10-26 11:01:25 +01:00
fix(team): show public teams to non-members
Signed-off-by: bircni <bircni@icloud.com>
This commit is contained in:
2 files changed
+14
-2
No files matched your search
@@ -184,8 +184,10 @@ $ tea team view 2 --json units`,
|
|||||||
if a.options.json != "" {
|
if a.options.json != "" {
|
||||||
return a.writeJSON(cmd, team)
|
return a.writeJSON(cmd, team)
|
||||||
}
|
}
|
||||||
|
// Gitea shows a public team to non-members of its organization, but not its members.
|
||||||
members, err := service.Members(cmd.Context(), team.ID, teamViewNames, 1)
|
members, err := service.Members(cmd.Context(), team.ID, teamViewNames, 1)
|
||||||
if err != nil {
|
membersHidden := services.IsForbidden(err)
|
||||||
|
if err != nil && !membersHidden {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
repos, err := service.Repositories(cmd.Context(), team.ID, teamViewNames, 1)
|
repos, err := service.Repositories(cmd.Context(), team.ID, teamViewNames, 1)
|
||||||
@@ -199,6 +201,10 @@ $ tea team view 2 --json units`,
|
|||||||
units = append(units, strings.TrimPrefix(unit, "repo.")+": "+access)
|
units = append(units, strings.TrimPrefix(unit, "repo.")+": "+access)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
memberNames := ""
|
||||||
|
if !membersHidden {
|
||||||
|
memberNames = listedNames(members, func(member services.OrganizationMember) string { return member.Username })
|
||||||
|
}
|
||||||
repositories := listedNames(repos, func(repo services.Repository) string { return repo.FullName })
|
repositories := listedNames(repos, func(repo services.Repository) string { return repo.FullName })
|
||||||
if team.AllRepositories {
|
if team.AllRepositories {
|
||||||
repositories = "all repositories of " + team.Organization
|
repositories = "all repositories of " + team.Organization
|
||||||
@@ -208,7 +214,7 @@ $ tea team view 2 --json units`,
|
|||||||
Fields: []terminal.Field{
|
Fields: []terminal.Field{
|
||||||
{Label: "Access", Value: team.Access(), PipedOnly: true},
|
{Label: "Access", Value: team.Access(), PipedOnly: true},
|
||||||
{Label: "Units", Value: strings.Join(units, ", ")},
|
{Label: "Units", Value: strings.Join(units, ", ")},
|
||||||
{Label: "Members", Value: listedNames(members, func(member services.OrganizationMember) string { return member.Username })},
|
{Label: "Members", Value: memberNames},
|
||||||
{Label: "Repositories", Value: repositories},
|
{Label: "Repositories", Value: repositories},
|
||||||
{Label: "Can create repos", Value: yesNo(team.CanCreateRepo)},
|
{Label: "Can create repos", Value: yesNo(team.CanCreateRepo)},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -198,6 +198,12 @@ func IsNotFound(err error) bool {
|
|||||||
return ok && failure.Status == http.StatusNotFound
|
return ok && failure.Status == http.StatusNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsForbidden reports whether err is a 403 response.
|
||||||
|
func IsForbidden(err error) bool {
|
||||||
|
failure, ok := errors.AsType[*transport.APIError](err)
|
||||||
|
return ok && failure.Status == http.StatusForbidden
|
||||||
|
}
|
||||||
|
|
||||||
// refusal returns the conflict reason of a refused request, or "".
|
// refusal returns the conflict reason of a refused request, or "".
|
||||||
func refusal(apiErr *transport.APIError) string {
|
func refusal(apiErr *transport.APIError) string {
|
||||||
if apiErr.Status == http.StatusLocked {
|
if apiErr.Status == http.StatusLocked {
|
||||||
|
|||||||
Reference in new issue
Block a user