···127127}
128128129129// GetUserRepoPermission returns the user permissions to the repository
130130-func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, user *user_model.User) (perm Permission, err error) {
130130+func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, user *user_model.User) (Permission, error) {
131131+ var perm Permission
131132 if log.IsTrace() {
132133 defer func() {
133134 if user == nil {
···147148 // TODO: anonymous user visit public unit of private repo???
148149 if user == nil && repo.IsPrivate {
149150 perm.AccessMode = perm_model.AccessModeNone
150150- return
151151+ return perm, nil
151152 }
152153153153- var is bool
154154+ var isCollaborator bool
155155+ var err error
154156 if user != nil {
155155- is, err = repo_model.IsCollaborator(ctx, repo.ID, user.ID)
157157+ isCollaborator, err = repo_model.IsCollaborator(ctx, repo.ID, user.ID)
156158 if err != nil {
157159 return perm, err
158160 }
159161 }
160162161161- if err = repo.LoadOwner(ctx); err != nil {
162162- return
163163+ if err := repo.LoadOwner(ctx); err != nil {
164164+ return perm, err
163165 }
164166165167 // Prevent strangers from checking out public repo of private organization/users
166168 // Allow user if they are collaborator of a repo within a private user or a private organization but not a member of the organization itself
167167- if !organization.HasOrgOrUserVisible(ctx, repo.Owner, user) && !is {
169169+ if !organization.HasOrgOrUserVisible(ctx, repo.Owner, user) && !isCollaborator {
168170 perm.AccessMode = perm_model.AccessModeNone
169169- return
171171+ return perm, nil
170172 }
171173172172- if err = repo.LoadUnits(ctx); err != nil {
173173- return
174174+ if err := repo.LoadUnits(ctx); err != nil {
175175+ return perm, err
174176 }
175177176178 perm.Units = repo.Units
···178180 // anonymous visit public repo
179181 if user == nil {
180182 perm.AccessMode = perm_model.AccessModeRead
181181- return
183183+ return perm, nil
182184 }
183185184186 // Admin or the owner has super access to the repository
185187 if user.IsAdmin || user.ID == repo.OwnerID {
186188 perm.AccessMode = perm_model.AccessModeOwner
187187- return
189189+ return perm, nil
188190 }
189191190192 // plain user
191193 perm.AccessMode, err = accessLevel(ctx, user, repo)
192194 if err != nil {
193193- return
195195+ return perm, err
194196 }
195197196196- if err = repo.LoadOwner(ctx); err != nil {
197197- return
198198+ if err := repo.LoadOwner(ctx); err != nil {
199199+ return perm, err
198200 }
199201 if !repo.Owner.IsOrganization() {
200200- return
202202+ return perm, nil
201203 }
202204203205 perm.UnitsMode = make(map[unit.Type]perm_model.AccessMode)
204206205207 // Collaborators on organization
206206- if is {
208208+ if isCollaborator {
207209 for _, u := range repo.Units {
208210 perm.UnitsMode[u.Type] = perm.AccessMode
209211 }
···212214 // get units mode from teams
213215 teams, err := organization.GetUserRepoTeams(ctx, repo.OwnerID, user.ID, repo.ID)
214216 if err != nil {
215215- return
217217+ return perm, err
216218 }
217219218220 // if user in an owner team
···220222 if team.AccessMode >= perm_model.AccessModeAdmin {
221223 perm.AccessMode = perm_model.AccessModeOwner
222224 perm.UnitsMode = nil
223223- return
225225+ return perm, nil
224226 }
225227 }
226228
+1-1
models/repo/release.go
···339339// GetReleaseAttachments retrieves the attachments for releases
340340func GetReleaseAttachments(ctx context.Context, rels ...*Release) (err error) {
341341 if len(rels) == 0 {
342342- return
342342+ return nil
343343 }
344344345345 // To keep this efficient as possible sort all releases by id,