@@ -127,7 +127,8 @@ func (p *Permission) LogString() string {
127
127
}
128
128
129
129
// GetUserRepoPermission returns the user permissions to the repository
130
- func GetUserRepoPermission (ctx context.Context , repo * repo_model.Repository , user * user_model.User ) (perm Permission , err error ) {
130
+ func GetUserRepoPermission (ctx context.Context , repo * repo_model.Repository , user * user_model.User ) (Permission , error ) {
131
+ var perm Permission
131
132
if log .IsTrace () {
132
133
defer func () {
133
134
if user == nil {
@@ -147,63 +148,64 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
147
148
// TODO: anonymous user visit public unit of private repo???
148
149
if user == nil && repo .IsPrivate {
149
150
perm .AccessMode = perm_model .AccessModeNone
150
- return
151
+ return perm , nil
151
152
}
152
153
153
- var is bool
154
+ var isCollaborator bool
155
+ var err error
154
156
if user != nil {
155
- is , err = repo_model .IsCollaborator (ctx , repo .ID , user .ID )
157
+ isCollaborator , err = repo_model .IsCollaborator (ctx , repo .ID , user .ID )
156
158
if err != nil {
157
159
return perm , err
158
160
}
159
161
}
160
162
161
- if err = repo .LoadOwner (ctx ); err != nil {
162
- return
163
+ if err : = repo .LoadOwner (ctx ); err != nil {
164
+ return perm , err
163
165
}
164
166
165
167
// Prevent strangers from checking out public repo of private organization/users
166
168
// 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
167
- if ! organization .HasOrgOrUserVisible (ctx , repo .Owner , user ) && ! is {
169
+ if ! organization .HasOrgOrUserVisible (ctx , repo .Owner , user ) && ! isCollaborator {
168
170
perm .AccessMode = perm_model .AccessModeNone
169
- return
171
+ return perm , nil
170
172
}
171
173
172
- if err = repo .LoadUnits (ctx ); err != nil {
173
- return
174
+ if err : = repo .LoadUnits (ctx ); err != nil {
175
+ return perm , err
174
176
}
175
177
176
178
perm .Units = repo .Units
177
179
178
180
// anonymous visit public repo
179
181
if user == nil {
180
182
perm .AccessMode = perm_model .AccessModeRead
181
- return
183
+ return perm , nil
182
184
}
183
185
184
186
// Admin or the owner has super access to the repository
185
187
if user .IsAdmin || user .ID == repo .OwnerID {
186
188
perm .AccessMode = perm_model .AccessModeOwner
187
- return
189
+ return perm , nil
188
190
}
189
191
190
192
// plain user
191
193
perm .AccessMode , err = accessLevel (ctx , user , repo )
192
194
if err != nil {
193
- return
195
+ return perm , err
194
196
}
195
197
196
- if err = repo .LoadOwner (ctx ); err != nil {
197
- return
198
+ if err : = repo .LoadOwner (ctx ); err != nil {
199
+ return perm , err
198
200
}
199
201
if ! repo .Owner .IsOrganization () {
200
- return
202
+ return perm , nil
201
203
}
202
204
203
205
perm .UnitsMode = make (map [unit.Type ]perm_model.AccessMode )
204
206
205
207
// Collaborators on organization
206
- if is {
208
+ if isCollaborator {
207
209
for _ , u := range repo .Units {
208
210
perm .UnitsMode [u .Type ] = perm .AccessMode
209
211
}
@@ -212,15 +214,15 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
212
214
// get units mode from teams
213
215
teams , err := organization .GetUserRepoTeams (ctx , repo .OwnerID , user .ID , repo .ID )
214
216
if err != nil {
215
- return
217
+ return perm , err
216
218
}
217
219
218
220
// if user in an owner team
219
221
for _ , team := range teams {
220
222
if team .AccessMode >= perm_model .AccessModeAdmin {
221
223
perm .AccessMode = perm_model .AccessModeOwner
222
224
perm .UnitsMode = nil
223
- return
225
+ return perm , nil
224
226
}
225
227
}
226
228
0 commit comments