diff --git a/routers/common/runners.go b/routers/common/runners.go index 703fb46408..17cf337568 100644 --- a/routers/common/runners.go +++ b/routers/common/runners.go @@ -1,6 +1,7 @@ package common import ( + "errors" "net/http" "strings" @@ -60,7 +61,7 @@ func RunnersList(ctx *context.Context, tplName base.TplName, opts bots_model.Fin ctx.HTML(http.StatusOK, tplName) } -func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { +func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64, ownerID int64, repoID int64) { runner, err := bots_model.GetRunnerByID(runnerID) if err != nil { ctx.ServerError("GetRunnerByID", err) @@ -70,6 +71,11 @@ func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { ctx.ServerError("LoadAttributes", err) return } + if !runner.Editable(ownerID, repoID) { + err = errors.New("no permission to edit this runner") + ctx.NotFound("RunnerDetails", err) + return + } ctx.Data["Runner"] = runner @@ -79,13 +85,18 @@ func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { } // RunnerDetailsEditPost response for edit runner details -func RunnerDetailsEditPost(ctx *context.Context, runnerID int64, redirectTo string) { +func RunnerDetailsEditPost(ctx *context.Context, runnerID int64, ownerID int64, repoID int64, redirectTo string) { runner, err := bots_model.GetRunnerByID(runnerID) if err != nil { log.Warn("RunnerDetailsEditPost.GetRunnerByID failed: %v, url: %s", err, ctx.Req.URL) ctx.ServerError("RunnerDetailsEditPost.GetRunnerByID", err) return } + if !runner.Editable(ownerID, repoID) { + err = errors.New("no permission to edit this runner") + ctx.NotFound("RunnerDetailsEditPost.Editable", err) + return + } form := web.GetForm(ctx).(*forms.EditRunnerForm) runner.Description = form.Description diff --git a/routers/web/admin/runners.go b/routers/web/admin/runners.go index bdfc52f2e6..fc15e133ee 100644 --- a/routers/web/admin/runners.go +++ b/routers/web/admin/runners.go @@ -55,7 +55,7 @@ func EditRunner(ctx *context.Context) { ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminRunners"] = true - common.RunnerDetails(ctx, tplRunnerEdit, ctx.ParamsInt64(":runnerid")) + common.RunnerDetails(ctx, tplRunnerEdit, ctx.ParamsInt64(":runnerid"), 0, 0) } // EditRunnerPost response for editing runner @@ -63,7 +63,7 @@ func EditRunnerPost(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("admin.runners.edit") ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminRunners"] = true - common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), + common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), 0, 0, setting.AppSubURL+"/admin/runners/"+url.PathEscape(ctx.Params(":runnerid"))) } diff --git a/routers/web/org/org_runners.go b/routers/web/org/org_runners.go index 661b4090be..dd072f393d 100644 --- a/routers/web/org/org_runners.go +++ b/routers/web/org/org_runners.go @@ -1,6 +1,8 @@ package org import ( + "net/url" + bots_model "code.gitea.io/gitea/models/bots" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/context" @@ -39,3 +41,24 @@ func ResetRunnerRegistrationToken(ctx *context.Context) { ctx.Org.Organization.ID, 0, ctx.Org.OrgLink+"/settings/runners") } + +// RunnersEdit render runner edit page +func RunnersEdit(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("org.runners.edit") + ctx.Data["PageIsOrgSettings"] = true + ctx.Data["PageIsOrgSettingsRunners"] = true + + common.RunnerDetails(ctx, tplSettingsRunnersEdit, + ctx.ParamsInt64(":runnerid"), ctx.Org.Organization.ID, 0, + ) +} + +// RunnersEditPost response for editing runner +func RunnersEditPost(ctx *context.Context) { + ctx.Data["Title"] = ctx.Tr("org.runners.edit") + ctx.Data["PageIsOrgSettings"] = true + ctx.Data["PageIsOrgSettingsRunners"] = true + common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), + ctx.Org.Organization.ID, 0, + ctx.Org.OrgLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid"))) +} diff --git a/routers/web/org/setting.go b/routers/web/org/setting.go index 7a86b52bcc..e2116edf96 100644 --- a/routers/web/org/setting.go +++ b/routers/web/org/setting.go @@ -41,6 +41,8 @@ const ( tplSettingsLabels base.TplName = "org/settings/labels" // tplSettingsRunners template path for render runners settings tplSettingsRunners base.TplName = "org/settings/runners" + // tplSettingsRunnersEdit template path for render runners edit settings + tplSettingsRunnersEdit base.TplName = "org/settings/runners_edit" // tplSettingsSecrets template path for render secrets settings tplSettingsSecrets base.TplName = "org/settings/secrets" ) diff --git a/routers/web/web.go b/routers/web/web.go index 9db81987c9..0dcb413b59 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -793,6 +793,13 @@ func RegisterRoutes(m *web.Route) { m.Post("/initialize", bindIgnErr(forms.InitializeLabelsForm{}), org.InitializeLabels) }) + m.Group("/runners", func() { + m.Get("", org.Runners) + m.Combo("/{runnerid}").Get(org.RunnersEdit). + Post(bindIgnErr(forms.EditRunnerForm{}), org.RunnersEditPost) + m.Get("/reset_registration_token", org.ResetRunnerRegistrationToken) + }) + m.Group("/secrets", func() { m.Get("", org.Secrets) m.Post("", bindIgnErr(forms.AddSecretForm{}), org.SecretsPost) diff --git a/templates/admin/runners/edit.tmpl b/templates/admin/runners/edit.tmpl index 6a46eed8f4..0b98ef883e 100644 --- a/templates/admin/runners/edit.tmpl +++ b/templates/admin/runners/edit.tmpl @@ -2,84 +2,7 @@