@@ -162,6 +162,75 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) {
162
162
ctx .Redirect (redirectPath )
163
163
}
164
164
165
+ // RepoIDAssignment returns an macaron handler which assigns the repo to the context.
166
+ func RepoIDAssignment () macaron.Handler {
167
+ return func (ctx * Context ) {
168
+ var (
169
+ err error
170
+ )
171
+
172
+ repoID := ctx .ParamsInt64 (":repoid" )
173
+
174
+ // Get repository.
175
+ repo , err := models .GetRepositoryByID (repoID )
176
+ if err != nil {
177
+ if models .IsErrRepoNotExist (err ) {
178
+ ctx .Handle (404 , "GetRepositoryByID" , nil )
179
+ } else {
180
+ ctx .Handle (500 , "GetRepositoryByID" , err )
181
+ }
182
+ return
183
+ }
184
+
185
+ if err = repo .GetOwner (); err != nil {
186
+ ctx .Handle (500 , "GetOwner" , err )
187
+ return
188
+ }
189
+
190
+ // Admin has super access.
191
+ if ctx .IsSigned && ctx .User .IsAdmin {
192
+ ctx .Repo .AccessMode = models .AccessModeOwner
193
+ } else {
194
+ var userID int64
195
+ if ctx .User != nil {
196
+ userID = ctx .User .ID
197
+ }
198
+ mode , err := models .AccessLevel (userID , repo )
199
+ if err != nil {
200
+ ctx .Handle (500 , "AccessLevel" , err )
201
+ return
202
+ }
203
+ ctx .Repo .AccessMode = mode
204
+ }
205
+
206
+ // Check access.
207
+ if ctx .Repo .AccessMode == models .AccessModeNone {
208
+ if ctx .Query ("go-get" ) == "1" {
209
+ earlyResponseForGoGetMeta (ctx )
210
+ return
211
+ }
212
+ ctx .Handle (404 , "no access right" , err )
213
+ return
214
+ }
215
+ ctx .Data ["HasAccess" ] = true
216
+
217
+ if repo .IsMirror {
218
+ ctx .Repo .Mirror , err = models .GetMirrorByRepoID (repo .ID )
219
+ if err != nil {
220
+ ctx .Handle (500 , "GetMirror" , err )
221
+ return
222
+ }
223
+ ctx .Data ["MirrorEnablePrune" ] = ctx .Repo .Mirror .EnablePrune
224
+ ctx .Data ["MirrorInterval" ] = ctx .Repo .Mirror .Interval
225
+ ctx .Data ["Mirror" ] = ctx .Repo .Mirror
226
+ }
227
+
228
+ ctx .Repo .Repository = repo
229
+ ctx .Data ["RepoName" ] = ctx .Repo .Repository .Name
230
+ ctx .Data ["IsBareRepo" ] = ctx .Repo .Repository .IsBare
231
+ }
232
+ }
233
+
165
234
// RepoAssignment returns a macaron to handle repository assignment
166
235
func RepoAssignment () macaron.Handler {
167
236
return func (ctx * Context ) {
0 commit comments