aboutsummaryrefslogtreecommitdiff
path: root/routers/repo/setting.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/setting.go')
-rw-r--r--routers/repo/setting.go303
1 files changed, 167 insertions, 136 deletions
diff --git a/routers/repo/setting.go b/routers/repo/setting.go
index 5a57f760..24c1b13a 100644
--- a/routers/repo/setting.go
+++ b/routers/repo/setting.go
@@ -9,7 +9,7 @@ import (
"strings"
"time"
- "github.com/go-martini/martini"
+ "github.com/Unknwon/com"
"github.com/gogits/gogs/models"
"github.com/gogits/gogs/modules/auth"
@@ -21,27 +21,26 @@ import (
)
const (
- SETTING base.TplName = "repo/setting"
- COLLABORATION base.TplName = "repo/collaboration"
-
- HOOKS base.TplName = "repo/hooks"
- HOOK_ADD base.TplName = "repo/hook_add"
- HOOK_EDIT base.TplName = "repo/hook_edit"
+ SETTINGS_OPTIONS base.TplName = "repo/settings/options"
+ COLLABORATION base.TplName = "repo/settings/collaboration"
+ HOOKS base.TplName = "repo/settings/hooks"
+ HOOK_NEW base.TplName = "repo/settings/hook_new"
)
-func Setting(ctx *middleware.Context) {
- ctx.Data["IsRepoToolbarSetting"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - settings"
- ctx.HTML(200, SETTING)
+func Settings(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsOptions"] = true
+ ctx.HTML(200, SETTINGS_OPTIONS)
}
-func SettingPost(ctx *middleware.Context, form auth.RepoSettingForm) {
- ctx.Data["IsRepoToolbarSetting"] = true
+func SettingsPost(ctx *middleware.Context, form auth.RepoSettingForm) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsOptions"] = true
switch ctx.Query("action") {
case "update":
if ctx.HasError() {
- ctx.HTML(200, SETTING)
+ ctx.HTML(200, SETTINGS_OPTIONS)
return
}
@@ -50,17 +49,22 @@ func SettingPost(ctx *middleware.Context, form auth.RepoSettingForm) {
if ctx.Repo.Repository.Name != newRepoName {
isExist, err := models.IsRepositoryExist(ctx.Repo.Owner, newRepoName)
if err != nil {
- ctx.Handle(500, "setting.SettingPost(update: check existence)", err)
+ ctx.Handle(500, "IsRepositoryExist", err)
return
} else if isExist {
- ctx.RenderWithErr("Repository name has been taken in your repositories.", SETTING, nil)
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.repo_name_been_taken"), SETTINGS_OPTIONS, nil)
return
} else if err = models.ChangeRepositoryName(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name, newRepoName); err != nil {
- ctx.Handle(500, "setting.SettingPost(change repository name)", err)
+ if err == models.ErrRepoNameIllegal {
+ ctx.Data["Err_RepoName"] = true
+ ctx.RenderWithErr(ctx.Tr("form.illegal_repo_name"), SETTINGS_OPTIONS, nil)
+ } else {
+ ctx.Handle(500, "ChangeRepositoryName", err)
+ }
return
}
- log.Trace("%s Repository name changed: %s/%s -> %s", ctx.Req.RequestURI, ctx.User.Name, ctx.Repo.Repository.Name, newRepoName)
-
+ log.Trace("Repository name changed: %s/%s -> %s", ctx.Repo.Owner.Name, ctx.Repo.Repository.Name, newRepoName)
ctx.Repo.Repository.Name = newRepoName
}
@@ -74,66 +78,70 @@ func SettingPost(ctx *middleware.Context, form auth.RepoSettingForm) {
ctx.Repo.Repository.IsPrivate = form.Private
ctx.Repo.Repository.IsGoget = form.GoGet
if err := models.UpdateRepository(ctx.Repo.Repository); err != nil {
- ctx.Handle(404, "setting.SettingPost(update)", err)
+ ctx.Handle(404, "UpdateRepository", err)
return
}
- log.Trace("%s Repository updated: %s/%s", ctx.Req.RequestURI, ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
+ log.Trace("Repository updated: %s/%s", ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
if ctx.Repo.Repository.IsMirror {
if form.Interval > 0 {
ctx.Repo.Mirror.Interval = form.Interval
ctx.Repo.Mirror.NextUpdate = time.Now().Add(time.Duration(form.Interval) * time.Hour)
if err := models.UpdateMirror(ctx.Repo.Mirror); err != nil {
- log.Error("setting.SettingPost(UpdateMirror): %v", err)
+ log.Error(4, "UpdateMirror: %v", err)
}
}
}
- ctx.Flash.Success("Repository options has been successfully updated.")
+ ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success"))
ctx.Redirect(fmt.Sprintf("/%s/%s/settings", ctx.Repo.Owner.Name, ctx.Repo.Repository.Name))
case "transfer":
- if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
- ctx.RenderWithErr("Please make sure you entered repository name is correct.", SETTING, nil)
- return
- } else if ctx.Repo.Repository.IsMirror {
- ctx.Error(404)
+ if ctx.Repo.Repository.Name != form.RepoName {
+ ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), SETTINGS_OPTIONS, nil)
return
}
- newOwner := ctx.Query("owner")
- // Check if new owner exists.
+ newOwner := ctx.Query("new_owner_name")
isExist, err := models.IsUserExist(newOwner)
if err != nil {
- ctx.Handle(500, "setting.SettingPost(transfer: check existence)", err)
+ ctx.Handle(500, "IsUserExist", err)
return
} else if !isExist {
- ctx.RenderWithErr("Please make sure you entered owner name is correct.", SETTING, nil)
+ ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_owner_name"), SETTINGS_OPTIONS, nil)
return
} else if err = models.TransferOwnership(ctx.Repo.Owner, newOwner, ctx.Repo.Repository); err != nil {
- ctx.Handle(500, "setting.SettingPost(transfer repository)", err)
+ ctx.Handle(500, "TransferOwnership", err)
return
}
- log.Trace("%s Repository transfered: %s/%s -> %s", ctx.Req.RequestURI, ctx.User.Name, ctx.Repo.Repository.Name, newOwner)
-
+ log.Trace("Repository transfered: %s/%s -> %s", ctx.Repo.Owner.Name, ctx.Repo.Repository.Name, newOwner)
ctx.Redirect("/")
case "delete":
- if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
- ctx.RenderWithErr("Please make sure you entered repository name is correct.", SETTING, nil)
+ if ctx.Repo.Repository.Name != form.RepoName {
+ ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), SETTINGS_OPTIONS, nil)
return
}
- if ctx.Repo.Owner.IsOrganization() &&
- !ctx.Repo.Owner.IsOrgOwner(ctx.User.Id) {
- ctx.Error(403)
- return
+ if ctx.Repo.Owner.IsOrganization() {
+ if !ctx.Repo.Owner.IsOrgOwner(ctx.User.Id) {
+ ctx.Error(404)
+ return
+ }
+ if !ctx.User.ValidtePassword(ctx.Query("password")) {
+ ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_password"), SETTINGS_OPTIONS, nil)
+ return
+ }
+ } else {
+ if !ctx.Repo.Owner.ValidtePassword(ctx.Query("password")) {
+ ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_password"), SETTINGS_OPTIONS, nil)
+ return
+ }
}
if err := models.DeleteRepository(ctx.Repo.Owner.Id, ctx.Repo.Repository.Id, ctx.Repo.Owner.Name); err != nil {
- ctx.Handle(500, "setting.Delete(DeleteRepository)", err)
+ ctx.Handle(500, "DeleteRepository", err)
return
}
- log.Trace("%s Repository deleted: %s/%s", ctx.Req.RequestURI, ctx.Repo.Owner.LowerName, ctx.Repo.Repository.LowerName)
-
+ log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
if ctx.Repo.Owner.IsOrganization() {
ctx.Redirect("/org/" + ctx.Repo.Owner.Name + "/dashboard")
} else {
@@ -142,26 +150,86 @@ func SettingPost(ctx *middleware.Context, form auth.RepoSettingForm) {
}
}
-func Collaboration(ctx *middleware.Context) {
+func SettingsCollaboration(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsCollaboration"] = true
+
repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/")
- ctx.Data["IsRepoToolbarCollaboration"] = true
- ctx.Data["Title"] = repoLink + " - collaboration"
+
+ if ctx.Req.Method == "POST" {
+ name := strings.ToLower(ctx.Query("collaborator"))
+ if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
+ ctx.Redirect(ctx.Req.URL.Path)
+ return
+ }
+ has, err := models.HasAccess(name, repoLink, models.WRITABLE)
+ if err != nil {
+ ctx.Handle(500, "HasAccess", err)
+ return
+ } else if has {
+ ctx.Redirect(ctx.Req.URL.Path)
+ return
+ }
+
+ u, err := models.GetUserByName(name)
+ if err != nil {
+ if err == models.ErrUserNotExist {
+ ctx.Flash.Error(ctx.Tr("form.user_not_exist"))
+ ctx.Redirect(ctx.Req.URL.Path)
+ } else {
+ ctx.Handle(500, "GetUserByName", err)
+ }
+ return
+ }
+
+ if err = models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
+ Mode: models.WRITABLE}); err != nil {
+ ctx.Handle(500, "AddAccess2", err)
+ return
+ }
+
+ if setting.Service.EnableNotifyMail {
+ if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
+ ctx.Handle(500, "SendCollaboratorMail", err)
+ return
+ }
+ }
+
+ ctx.Flash.Success(ctx.Tr("repo.settings.add_collaborator_success"))
+ ctx.Redirect(ctx.Req.URL.Path)
+ return
+ }
// Delete collaborator.
remove := strings.ToLower(ctx.Query("remove"))
if len(remove) > 0 && remove != ctx.Repo.Owner.LowerName {
- if err := models.DeleteAccess(&models.Access{UserName: remove, RepoName: repoLink}); err != nil {
- ctx.Handle(500, "setting.Collaboration(DeleteAccess)", err)
- return
+ needDelete := true
+ if ctx.User.IsOrganization() {
+ // Check if user belongs to a team that has access to this repository.
+ auth, err := models.GetHighestAuthorize(ctx.Repo.Owner.Id, ctx.User.Id, 0, ctx.Repo.Repository.Id)
+ if err != nil {
+ ctx.Handle(500, "GetHighestAuthorize", err)
+ return
+ }
+ if auth > 0 {
+ needDelete = false
+ }
+ }
+
+ if needDelete {
+ if err := models.DeleteAccess(&models.Access{UserName: remove, RepoName: repoLink}); err != nil {
+ ctx.Handle(500, "DeleteAccess", err)
+ return
+ }
}
- ctx.Flash.Success("Collaborator has been removed.")
+ ctx.Flash.Success(ctx.Tr("repo.settings.remove_collaborator_success"))
ctx.Redirect(ctx.Repo.RepoLink + "/settings/collaboration")
return
}
names, err := models.GetCollaboratorNames(repoLink)
if err != nil {
- ctx.Handle(500, "setting.Collaboration(GetCollaborators)", err)
+ ctx.Handle(500, "GetCollaborators", err)
return
}
@@ -169,7 +237,7 @@ func Collaboration(ctx *middleware.Context) {
for i, name := range names {
us[i], err = models.GetUserByName(name)
if err != nil {
- ctx.Handle(500, "setting.Collaboration(GetUserByName)", err)
+ ctx.Handle(500, "GetUserByName", err)
return
}
}
@@ -178,69 +246,25 @@ func Collaboration(ctx *middleware.Context) {
ctx.HTML(200, COLLABORATION)
}
-func CollaborationPost(ctx *middleware.Context) {
- repoLink := strings.TrimPrefix(ctx.Repo.RepoLink, "/")
- name := strings.ToLower(ctx.Query("collaborator"))
- if len(name) == 0 || ctx.Repo.Owner.LowerName == name {
- ctx.Redirect(ctx.Req.RequestURI)
- return
- }
- has, err := models.HasAccess(name, repoLink, models.WRITABLE)
- if err != nil {
- ctx.Handle(500, "setting.CollaborationPost(HasAccess)", err)
- return
- } else if has {
- ctx.Redirect(ctx.Req.RequestURI)
- return
- }
-
- u, err := models.GetUserByName(name)
- if err != nil {
- if err == models.ErrUserNotExist {
- ctx.Flash.Error("Given user does not exist.")
- ctx.Redirect(ctx.Req.RequestURI)
- } else {
- ctx.Handle(500, "setting.CollaborationPost(GetUserByName)", err)
- }
- return
- }
-
- if err = models.AddAccess(&models.Access{UserName: name, RepoName: repoLink,
- Mode: models.WRITABLE}); err != nil {
- ctx.Handle(500, "setting.CollaborationPost(AddAccess)", err)
- return
- }
-
- if setting.Service.EnableNotifyMail {
- if err = mailer.SendCollaboratorMail(ctx.Render, u, ctx.User, ctx.Repo.Repository); err != nil {
- ctx.Handle(500, "setting.CollaborationPost(SendCollaboratorMail)", err)
- return
- }
- }
-
- ctx.Flash.Success("New collaborator has been added.")
- ctx.Redirect(ctx.Req.RequestURI)
-}
-
-func WebHooks(ctx *middleware.Context) {
- ctx.Data["IsRepoToolbarWebHooks"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Webhooks"
+func Webhooks(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsHooks"] = true
- // Delete webhook.
- remove, _ := base.StrTo(ctx.Query("remove")).Int64()
+ // Delete web hook.
+ remove := com.StrTo(ctx.Query("remove")).MustInt64()
if remove > 0 {
if err := models.DeleteWebhook(remove); err != nil {
- ctx.Handle(500, "setting.WebHooks(DeleteWebhook)", err)
+ ctx.Handle(500, "DeleteWebhook", err)
return
}
- ctx.Flash.Success("Webhook has been removed.")
+ ctx.Flash.Success(ctx.Tr("repo.settings.remove_hook_success"))
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks")
return
}
ws, err := models.GetWebhooksByRepoId(ctx.Repo.Repository.Id)
if err != nil {
- ctx.Handle(500, "setting.WebHooks(GetWebhooksByRepoId)", err)
+ ctx.Handle(500, "GetWebhooksByRepoId", err)
return
}
@@ -248,18 +272,22 @@ func WebHooks(ctx *middleware.Context) {
ctx.HTML(200, HOOKS)
}
-func WebHooksAdd(ctx *middleware.Context) {
- ctx.Data["IsRepoToolbarWebHooks"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Add Webhook"
- ctx.HTML(200, HOOK_ADD)
+func WebHooksNew(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsHooks"] = true
+ ctx.Data["PageIsSettingsHooksNew"] = true
+ ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}}
+ ctx.HTML(200, HOOK_NEW)
}
-func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) {
- ctx.Data["IsRepoToolbarWebHooks"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Add Webhook"
+func WebHooksNewPost(ctx *middleware.Context, form auth.NewWebhookForm) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsHooks"] = true
+ ctx.Data["PageIsSettingsHooksNew"] = true
+ ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}}
if ctx.HasError() {
- ctx.HTML(200, HOOK_ADD)
+ ctx.HTML(200, HOOK_NEW)
return
}
@@ -270,7 +298,7 @@ func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) {
w := &models.Webhook{
RepoId: ctx.Repo.Repository.Id,
- Url: form.Url,
+ Url: form.PayloadUrl,
ContentType: ct,
Secret: form.Secret,
HookEvent: &models.HookEvent{
@@ -279,22 +307,23 @@ func WebHooksAddPost(ctx *middleware.Context, form auth.NewWebhookForm) {
IsActive: form.Active,
}
if err := w.UpdateEvent(); err != nil {
- ctx.Handle(500, "setting.WebHooksAddPost(UpdateEvent)", err)
+ ctx.Handle(500, "UpdateEvent", err)
return
} else if err := models.CreateWebhook(w); err != nil {
- ctx.Handle(500, "setting.WebHooksAddPost(CreateWebhook)", err)
+ ctx.Handle(500, "CreateWebhook", err)
return
}
- ctx.Flash.Success("New webhook has been added.")
+ ctx.Flash.Success(ctx.Tr("repo.settings.add_hook_success"))
ctx.Redirect(ctx.Repo.RepoLink + "/settings/hooks")
}
-func WebHooksEdit(ctx *middleware.Context, params martini.Params) {
- ctx.Data["IsRepoToolbarWebHooks"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Webhook"
+func WebHooksEdit(ctx *middleware.Context) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsHooks"] = true
+ ctx.Data["PageIsSettingsHooksEdit"] = true
- hookId, _ := base.StrTo(params["id"]).Int64()
+ hookId := com.StrTo(ctx.Params(":id")).MustInt64()
if hookId == 0 {
ctx.Handle(404, "setting.WebHooksEdit", nil)
return
@@ -303,23 +332,23 @@ func WebHooksEdit(ctx *middleware.Context, params martini.Params) {
w, err := models.GetWebhookById(hookId)
if err != nil {
if err == models.ErrWebhookNotExist {
- ctx.Handle(404, "setting.WebHooksEdit(GetWebhookById)", nil)
+ ctx.Handle(404, "GetWebhookById", nil)
} else {
- ctx.Handle(500, "setting.WebHooksEdit(GetWebhookById)", err)
+ ctx.Handle(500, "GetWebhookById", err)
}
return
}
-
w.GetEvent()
ctx.Data["Webhook"] = w
- ctx.HTML(200, HOOK_EDIT)
+ ctx.HTML(200, HOOK_NEW)
}
-func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.NewWebhookForm) {
- ctx.Data["IsRepoToolbarWebHooks"] = true
- ctx.Data["Title"] = strings.TrimPrefix(ctx.Repo.RepoLink, "/") + " - Webhook"
+func WebHooksEditPost(ctx *middleware.Context, form auth.NewWebhookForm) {
+ ctx.Data["Title"] = ctx.Tr("repo.settings")
+ ctx.Data["PageIsSettingsHooks"] = true
+ ctx.Data["PageIsSettingsHooksEdit"] = true
- hookId, _ := base.StrTo(params["id"]).Int64()
+ hookId := com.StrTo(ctx.Params(":id")).MustInt64()
if hookId == 0 {
ctx.Handle(404, "setting.WebHooksEditPost", nil)
return
@@ -328,15 +357,17 @@ func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.
w, err := models.GetWebhookById(hookId)
if err != nil {
if err == models.ErrWebhookNotExist {
- ctx.Handle(404, "setting.WebHooksEditPost(GetWebhookById)", nil)
+ ctx.Handle(404, "GetWebhookById", nil)
} else {
- ctx.Handle(500, "setting.WebHooksEditPost(GetWebhookById)", err)
+ ctx.Handle(500, "GetWebhookById", err)
}
return
}
+ w.GetEvent()
+ ctx.Data["Webhook"] = w
if ctx.HasError() {
- ctx.HTML(200, HOOK_EDIT)
+ ctx.HTML(200, HOOK_NEW)
return
}
@@ -345,7 +376,7 @@ func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.
ct = models.FORM
}
- w.Url = form.Url
+ w.Url = form.PayloadUrl
w.ContentType = ct
w.Secret = form.Secret
w.HookEvent = &models.HookEvent{
@@ -353,13 +384,13 @@ func WebHooksEditPost(ctx *middleware.Context, params martini.Params, form auth.
}
w.IsActive = form.Active
if err := w.UpdateEvent(); err != nil {
- ctx.Handle(500, "setting.WebHooksEditPost(UpdateEvent)", err)
+ ctx.Handle(500, "UpdateEvent", err)
return
} else if err := models.UpdateWebhook(w); err != nil {
- ctx.Handle(500, "setting.WebHooksEditPost(WebHooksEditPost)", err)
+ ctx.Handle(500, "WebHooksEditPost", err)
return
}
- ctx.Flash.Success("Webhook has been updated.")
+ ctx.Flash.Success(ctx.Tr("repo.settings.update_hook_success"))
ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", ctx.Repo.RepoLink, hookId))
}