2014-03-15 20:03:23 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package middleware
import (
2014-03-16 10:28:24 +04:00
"errors"
2014-03-15 20:03:23 +04:00
"github.com/codegangsta/martini"
"github.com/gogits/gogs/models"
)
func RepoAssignment ( redirect bool ) martini . Handler {
return func ( ctx * Context , params martini . Params ) {
// assign false first
ctx . Data [ "IsRepositoryValid" ] = false
var (
user * models . User
err error
)
// get repository owner
ctx . Repo . IsOwner = ctx . IsSigned && ctx . User . LowerName == params [ "username" ]
if ! ctx . Repo . IsOwner {
user , err = models . GetUserByName ( params [ "username" ] )
if err != nil {
if redirect {
ctx . Render . Redirect ( "/" )
return
}
2014-03-16 10:28:24 +04:00
ctx . Handle ( 200 , "RepoAssignment" , err )
2014-03-15 20:03:23 +04:00
return
}
} else {
user = ctx . User
}
if user == nil {
if redirect {
ctx . Render . Redirect ( "/" )
return
}
2014-03-16 10:28:24 +04:00
ctx . Handle ( 200 , "RepoAssignment" , errors . New ( "invliad user account for single repository" ) )
2014-03-15 20:03:23 +04:00
return
}
2014-03-15 20:14:26 +04:00
ctx . Repo . Owner = user
2014-03-15 20:03:23 +04:00
// get repository
repo , err := models . GetRepositoryByName ( user , params [ "reponame" ] )
if err != nil {
if redirect {
ctx . Render . Redirect ( "/" )
return
}
2014-03-16 10:28:24 +04:00
ctx . Handle ( 200 , "RepoAssignment" , err )
2014-03-15 20:03:23 +04:00
return
}
ctx . Repo . IsValid = true
ctx . Repo . Repository = repo
ctx . Data [ "IsRepositoryValid" ] = true
ctx . Data [ "Repository" ] = repo
ctx . Data [ "Owner" ] = user
ctx . Data [ "Title" ] = user . Name + "/" + repo . Name
ctx . Data [ "RepositoryLink" ] = ctx . Data [ "Title" ]
2014-03-17 09:12:28 +04:00
ctx . Data [ "IsRepositoryOwner" ] = ctx . Repo . IsOwner
2014-03-15 20:03:23 +04:00
}
}