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 @@
{{template "admin/navbar" .}}
- {{template "base/alert" .}} -

- {{.locale.Tr "admin.runners.runner_title"}} #{{.Runner.ID}} {{.Runner.Name}} -

-
-
- {{template "base/disable_form_autofill"}} - {{.CsrfTokenHtml}} -
-
- - {{.Runner.StatusType}} -
-
- - {{TimeSinceUnix .Runner.LastOnline $.locale}} -
-
- - - {{range .Runner.AgentLabels}} - {{.}} - {{end}} - -
-
- - {{.Runner.OwnType}} -
-
- -
- -
- - -
-
- - -

{{.locale.Tr "admin.runners.custom_labels_helper"}}

-
- -
- -
- - -
-
-
- -

- {{.locale.Tr "admin.runners.task_list"}} -

-
- Comming soon -
-
-
- - {{template "base/footer" .}} diff --git a/templates/org/settings/runners_edit.tmpl b/templates/org/settings/runners_edit.tmpl new file mode 100644 index 0000000000..01dfe3de1e --- /dev/null +++ b/templates/org/settings/runners_edit.tmpl @@ -0,0 +1,13 @@ +{{template "base/head" .}} +
+ {{template "org/header" .}} +
+
+ {{template "org/settings/navbar" .}} +
+ {{template "runners/edit" .}} +
+
+
+
+{{template "base/footer" .}} diff --git a/templates/runners/edit.tmpl b/templates/runners/edit.tmpl index 6a46eed8f4..fb893d7f7e 100644 --- a/templates/runners/edit.tmpl +++ b/templates/runners/edit.tmpl @@ -1,85 +1,61 @@ -{{template "base/head" .}} -
- {{template "admin/navbar" .}} -
- {{template "base/alert" .}} -

- {{.locale.Tr "admin.runners.runner_title"}} #{{.Runner.ID}} {{.Runner.Name}} -

-
-
- {{template "base/disable_form_autofill"}} - {{.CsrfTokenHtml}} -
-
- - {{.Runner.StatusType}} -
-
- - {{TimeSinceUnix .Runner.LastOnline $.locale}} -
-
- - - {{range .Runner.AgentLabels}} - {{.}} - {{end}} - -
-
- - {{.Runner.OwnType}} -
-
- -
- -
- - -
-
- - -

{{.locale.Tr "admin.runners.custom_labels_helper"}}

-
- -
- -
- - -
-
-
- -

- {{.locale.Tr "admin.runners.task_list"}} -

-
- Comming soon -
-
-
- -