From f2e8a0124b51879e7a0b4c6b6974e6db9f423dcb Mon Sep 17 00:00:00 2001 From: jolheiser Date: Wed, 6 Mar 2019 21:00:48 -0600 Subject: [PATCH 1/4] Adds auto-name if repo name is blank Adds error checking before sanitization in migration Signed-off-by: jolheiser --- public/js/index.js | 8 ++++++++ routers/repo/repo.go | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/public/js/index.js b/public/js/index.js index a34904abbadae..2b8d8567a9328 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -2132,6 +2132,14 @@ $(document).ready(function () { break; } } + + var $cloneAddr = $('#clone_addr'); + $cloneAddr.change(function() { + var $repoName = $('#repo_name'); + if ($cloneAddr.val().length > 0 && $repoName.val().length === 0) { // Only modify if repo_name input is blank + $repoName.val($cloneAddr.val().match(/^(.*\/)?((.+?)(\.git)?)$/)[3]); + } + }); }); function changeHash(hash) { diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 42dfd56268686..a0f2c762f416f 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -257,10 +257,23 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { } if models.IsErrRepoAlreadyExist(err) { + ctx.Data["Err_RepoName"] = true ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tplMigrate, &form) return } + if models.IsErrNameReserved(err) { + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplMigrate, &form) + return + } + + if models.IsErrNamePatternNotAllowed(err) { + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplMigrate, &form) + return + } + // remoteAddr may contain credentials, so we sanitize it err = util.URLSanitizedError(err, remoteAddr) From 81af564401e357daa7eabd2207a5139498c3dd67 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Thu, 7 Mar 2019 13:32:59 -0600 Subject: [PATCH 2/4] Changed err from sanitization to a different variable Signed-off-by: jolheiser --- routers/repo/repo.go | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/routers/repo/repo.go b/routers/repo/repo.go index a0f2c762f416f..aeb0f9eddbdb6 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -256,26 +256,8 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { return } - if models.IsErrRepoAlreadyExist(err) { - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tplMigrate, &form) - return - } - - if models.IsErrNameReserved(err) { - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplMigrate, &form) - return - } - - if models.IsErrNamePatternNotAllowed(err) { - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplMigrate, &form) - return - } - // remoteAddr may contain credentials, so we sanitize it - err = util.URLSanitizedError(err, remoteAddr) + sanitizedErr := util.URLSanitizedError(err, remoteAddr) if repo != nil { if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil { @@ -283,14 +265,14 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { } } - if strings.Contains(err.Error(), "Authentication failed") || - strings.Contains(err.Error(), "could not read Username") { + if strings.Contains(sanitizedErr.Error(), "Authentication failed") || + strings.Contains(sanitizedErr.Error(), "could not read Username") { ctx.Data["Err_Auth"] = true - ctx.RenderWithErr(ctx.Tr("form.auth_failed", err.Error()), tplMigrate, &form) + ctx.RenderWithErr(ctx.Tr("form.auth_failed", sanitizedErr.Error()), tplMigrate, &form) return - } else if strings.Contains(err.Error(), "fatal:") { + } else if strings.Contains(sanitizedErr.Error(), "fatal:") { ctx.Data["Err_CloneAddr"] = true - ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", err.Error()), tplMigrate, &form) + ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", sanitizedErr.Error()), tplMigrate, &form) return } From 9ac78933d352c124d0ecc1638681f9a25d1b1e92 Mon Sep 17 00:00:00 2001 From: jolheiser Date: Thu, 7 Mar 2019 13:45:27 -0600 Subject: [PATCH 3/4] Remove handleCreatePost and implement separately Signed-off-by: jolheiser --- routers/repo/repo.go | 65 +++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/routers/repo/repo.go b/routers/repo/repo.go index aeb0f9eddbdb6..2e268a5cc748f 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -129,23 +129,6 @@ func Create(ctx *context.Context) { ctx.HTML(200, tplCreate) } -func handleCreateError(ctx *context.Context, owner *models.User, err error, name string, tpl base.TplName, form interface{}) { - switch { - case models.IsErrReachLimitOfRepo(err): - ctx.RenderWithErr(ctx.Tr("repo.form.reach_limit_of_creation", owner.MaxCreationLimit()), tpl, form) - case models.IsErrRepoAlreadyExist(err): - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tpl, form) - case models.IsErrNameReserved(err): - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tpl, form) - case models.IsErrNamePatternNotAllowed(err): - ctx.Data["Err_RepoName"] = true - ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tpl, form) - default: - ctx.ServerError(name, err) - } -} // CreatePost response for creating repository func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { @@ -187,7 +170,21 @@ func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { } } - handleCreateError(ctx, ctxUser, err, "CreatePost", tplCreate, &form) + switch { + case models.IsErrReachLimitOfRepo(err): + ctx.RenderWithErr(ctx.Tr("repo.form.reach_limit_of_creation", ctxUser.MaxCreationLimit()), tplCreate, form) + case models.IsErrRepoAlreadyExist(err): + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tplCreate, form) + case models.IsErrNameReserved(err): + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplCreate, form) + case models.IsErrNamePatternNotAllowed(err): + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplCreate, form) + default: + ctx.ServerError("CreatePost", err) + } } // Migrate render migration of repository page @@ -256,8 +253,26 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { return } + if models.IsErrRepoAlreadyExist(err) { + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), tplMigrate, &form) + return + } + + if models.IsErrNameReserved(err) { + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_reserved", err.(models.ErrNameReserved).Name), tplMigrate, &form) + return + } + + if models.IsErrNamePatternNotAllowed(err) { + ctx.Data["Err_RepoName"] = true + ctx.RenderWithErr(ctx.Tr("repo.form.name_pattern_not_allowed", err.(models.ErrNamePatternNotAllowed).Pattern), tplMigrate, &form) + return + } + // remoteAddr may contain credentials, so we sanitize it - sanitizedErr := util.URLSanitizedError(err, remoteAddr) + err = util.URLSanitizedError(err, remoteAddr) if repo != nil { if errDelete := models.DeleteRepository(ctx.User, ctxUser.ID, repo.ID); errDelete != nil { @@ -265,18 +280,18 @@ func MigratePost(ctx *context.Context, form auth.MigrateRepoForm) { } } - if strings.Contains(sanitizedErr.Error(), "Authentication failed") || - strings.Contains(sanitizedErr.Error(), "could not read Username") { + if strings.Contains(err.Error(), "Authentication failed") || + strings.Contains(err.Error(), "could not read Username") { ctx.Data["Err_Auth"] = true - ctx.RenderWithErr(ctx.Tr("form.auth_failed", sanitizedErr.Error()), tplMigrate, &form) + ctx.RenderWithErr(ctx.Tr("form.auth_failed", err.Error()), tplMigrate, &form) return - } else if strings.Contains(sanitizedErr.Error(), "fatal:") { + } else if strings.Contains(err.Error(), "fatal:") { ctx.Data["Err_CloneAddr"] = true - ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", sanitizedErr.Error()), tplMigrate, &form) + ctx.RenderWithErr(ctx.Tr("repo.migrate.failed", err.Error()), tplMigrate, &form) return } - handleCreateError(ctx, ctxUser, err, "MigratePost", tplMigrate, &form) + ctx.ServerError("MigratePost", err) } // Action response for actions to a repository From 6f87ac21316ddfa038e28fa531dedf8118ffaaaa Mon Sep 17 00:00:00 2001 From: jolheiser Date: Thu, 7 Mar 2019 13:50:22 -0600 Subject: [PATCH 4/4] Make fmt Signed-off-by: jolheiser --- routers/repo/repo.go | 1 - 1 file changed, 1 deletion(-) diff --git a/routers/repo/repo.go b/routers/repo/repo.go index 2e268a5cc748f..cb438842a1967 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -129,7 +129,6 @@ func Create(ctx *context.Context) { ctx.HTML(200, tplCreate) } - // CreatePost response for creating repository func CreatePost(ctx *context.Context, form auth.CreateRepoForm) { ctx.Data["Title"] = ctx.Tr("new_repo")