aboutsummaryrefslogtreecommitdiff
path: root/routers/repo/repo.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/repo.go')
-rw-r--r--routers/repo/repo.go145
1 files changed, 74 insertions, 71 deletions
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index 73c9277d..cd231ccd 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -28,18 +28,25 @@ const (
FORK base.TplName = "repo/fork"
)
-func checkContextUser(ctx *middleware.Context, uid int64) (*models.User, error) {
- ctxUser := ctx.User
- if uid > 0 {
- org, err := models.GetUserById(uid)
- if err != models.ErrUserNotExist {
- if err != nil {
- return nil, fmt.Errorf("GetUserById: %v", err)
- }
- ctxUser = org
- }
+func checkContextUser(ctx *middleware.Context, uid int64) *models.User {
+ // Not equal means current user is an organization.
+ if uid == ctx.User.Id || uid == 0 {
+ return ctx.User
+ }
+
+ org, err := models.GetUserById(uid)
+ if err == models.ErrUserNotExist {
+ return ctx.User
}
- return ctxUser, nil
+
+ if err != nil {
+ ctx.Handle(500, "checkContextUser", fmt.Errorf("GetUserById(%d): %v", uid, err))
+ return nil
+ } else if !org.IsOrganization() {
+ ctx.Error(403)
+ return nil
+ }
+ return org
}
func Create(ctx *middleware.Context) {
@@ -51,9 +58,8 @@ func Create(ctx *middleware.Context) {
ctx.Data["Gitignores"] = models.Gitignores
ctx.Data["Licenses"] = models.Licenses
- ctxUser, err := checkContextUser(ctx, ctx.QueryInt64("org"))
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
+ ctxUser := checkContextUser(ctx, ctx.QueryInt64("org"))
+ if ctx.Written() {
return
}
ctx.Data["ContextUser"] = ctxUser
@@ -73,15 +79,9 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
ctx.Data["Gitignores"] = models.Gitignores
ctx.Data["Licenses"] = models.Licenses
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
+ ctxUser := checkContextUser(ctx, form.Uid)
+ if ctx.Written() {
+ return
}
ctx.Data["ContextUser"] = ctxUser
@@ -110,14 +110,6 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Trace("Repository created: %s/%s", ctxUser.Name, repo.Name)
ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name)
return
- } else if err == models.ErrRepoAlreadyExist {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), CREATE, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), CREATE, &form)
- return
}
if repo != nil {
@@ -125,15 +117,27 @@ func CreatePost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Error(4, "DeleteRepository: %v", errDelete)
}
}
- ctx.Handle(500, "CreatePost", err)
+
+ switch {
+ case err == models.ErrRepoAlreadyExist:
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), CREATE, &form)
+ case models.IsErrNameReserved(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), CREATE, &form)
+ case models.IsErrNamePatternNotAllowed(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), CREATE, &form)
+ default:
+ ctx.Handle(500, "CreatePost", err)
+ }
}
func Migrate(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("new_migrate")
- ctxUser, err := checkContextUser(ctx, ctx.QueryInt64("org"))
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
+ ctxUser := checkContextUser(ctx, ctx.QueryInt64("org"))
+ if ctx.Written() {
return
}
ctx.Data["ContextUser"] = ctxUser
@@ -150,15 +154,9 @@ func Migrate(ctx *middleware.Context) {
func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
ctx.Data["Title"] = ctx.Tr("new_migrate")
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
+ ctxUser := checkContextUser(ctx, form.Uid)
+ if ctx.Written() {
+ return
}
ctx.Data["ContextUser"] = ctxUser
@@ -209,14 +207,6 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
log.Trace("Repository migrated: %s/%s", ctxUser.Name, form.RepoName)
ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + form.RepoName)
return
- } else if err == models.ErrRepoAlreadyExist {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), MIGRATE, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), MIGRATE, &form)
- return
}
if repo != nil {
@@ -230,7 +220,20 @@ func MigratePost(ctx *middleware.Context, form auth.MigrateRepoForm) {
ctx.RenderWithErr(ctx.Tr("form.auth_failed", err), MIGRATE, &form)
return
}
- ctx.Handle(500, "MigratePost", err)
+
+ switch {
+ case err == models.ErrRepoAlreadyExist:
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), MIGRATE, &form)
+ case models.IsErrNameReserved(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), MIGRATE, &form)
+ case models.IsErrNamePatternNotAllowed(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), MIGRATE, &form)
+ default:
+ ctx.Handle(500, "MigratePost", err)
+ }
}
func getForkRepository(ctx *middleware.Context) (*models.Repository, error) {
@@ -287,15 +290,9 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) {
return
}
- ctxUser := ctx.User
- // Not equal means current user is an organization.
- if form.Uid != ctx.User.Id {
- var err error
- ctxUser, err = checkContextUser(ctx, form.Uid)
- if err != nil {
- ctx.Handle(500, "checkContextUser", err)
- return
- }
+ ctxUser := checkContextUser(ctx, form.Uid)
+ if ctx.Written() {
+ return
}
ctx.Data["ContextUser"] = ctxUser
@@ -323,14 +320,6 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Trace("Repository forked: %s/%s", ctxUser.Name, repo.Name)
ctx.Redirect(setting.AppSubUrl + "/" + ctxUser.Name + "/" + repo.Name)
return
- } else if err == models.ErrRepoAlreadyExist {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), FORK, &form)
- return
- } else if err == models.ErrRepoNameIllegal {
- ctx.Data["Err_RepoName"] = true
- ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), CREATE, &form)
- return
}
if repo != nil {
@@ -338,7 +327,21 @@ func ForkPost(ctx *middleware.Context, form auth.CreateRepoForm) {
log.Error(4, "DeleteRepository: %v", errDelete)
}
}
- ctx.Handle(500, "ForkPost", err)
+
+ // FIXME: merge this with other 2 error handling in to one.
+ switch {
+ case err == models.ErrRepoAlreadyExist:
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), FORK, &form)
+ case models.IsErrNameReserved(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), FORK, &form)
+ case models.IsErrNamePatternNotAllowed(err):
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), FORK, &form)
+ default:
+ ctx.Handle(500, "ForkPost", err)
+ }
}
func Action(ctx *middleware.Context) {