Browse Source

Ensure that feeds are appropriately restricted (#10018)

* Always limit results by what is accessible to the user

* Change signature of AccessibleRepoIDsQuery

* Ensure that user with ID <= 0 is handled

* Update models/repo_list.go
tags/v1.10.5
zeripath 4 years ago
parent
commit
206a031b38
No account linked to committer's email address
2 changed files with 6 additions and 5 deletions
  1. 2
    2
      models/action.go
  2. 4
    3
      models/repo_list.go

+ 2
- 2
models/action.go View File

} }


cond = cond.And(builder.In("repo_id", repoIDs)) cond = cond.And(builder.In("repo_id", repoIDs))
} else if opts.Actor != nil {
cond = cond.And(builder.In("repo_id", opts.Actor.AccessibleRepoIDsQuery()))
} else {
cond = cond.And(builder.In("repo_id", AccessibleRepoIDsQuery(opts.Actor)))
} }


cond = cond.And(builder.Eq{"user_id": opts.RequestedUser.ID}) cond = cond.And(builder.Eq{"user_id": opts.RequestedUser.ID})

+ 4
- 3
models/repo_list.go View File

func accessibleRepositoryCondition(user *User) builder.Cond { func accessibleRepositoryCondition(user *User) builder.Cond {
var cond = builder.NewCond() var cond = builder.NewCond()


if user == nil || !user.IsRestricted {
if user == nil || !user.IsRestricted || user.ID <= 0 {
orgVisibilityLimit := []structs.VisibleType{structs.VisibleTypePrivate} orgVisibilityLimit := []structs.VisibleType{structs.VisibleTypePrivate}
if user == nil {
if user == nil || user.ID <= 0 {
orgVisibilityLimit = append(orgVisibilityLimit, structs.VisibleTypeLimited) orgVisibilityLimit = append(orgVisibilityLimit, structs.VisibleTypeLimited)
} }
// 1. Be able to see all non-private repositories that either: // 1. Be able to see all non-private repositories that either:
} }


// AccessibleRepoIDsQuery queries accessible repository ids. Usable as a subquery wherever repo ids need to be filtered. // AccessibleRepoIDsQuery queries accessible repository ids. Usable as a subquery wherever repo ids need to be filtered.
func (user *User) AccessibleRepoIDsQuery() *builder.Builder {
func AccessibleRepoIDsQuery(user *User) *builder.Builder {
// NB: Please note this code needs to still work if user is nil
return builder.Select("id").From("repository").Where(accessibleRepositoryCondition(user)) return builder.Select("id").From("repository").Where(accessibleRepositoryCondition(user))
} }



Loading…
Cancel
Save