mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Move secrets and runners settings to actions settings (#24200)
This PR moves the secrets and runners settings to actions settings on
all settings(repo,org,user,admin) levels.
After this PR, if
[ENABLED](5e7543fcf4/custom/conf/app.example.ini (L2604))
inside `app.ini` under `[actions]` is set to `false`, the "Actions" tab
(including runners management and secrets management) will not be shown.
After, the settings under actions settings for each level:
1. Admin Level
"Runners Management"
<img width="1437" alt="Screen Shot 2023-04-26 at 14 34 20"
src="https://user-images.githubusercontent.com/17645053/234489731-15822d21-38e1-4560-8bbe-69f122376abc.png">
2. User Level
"Secrets Management"
<img width="1427" alt="Screen Shot 2023-04-26 at 14 34 30"
src="https://user-images.githubusercontent.com/17645053/234489795-68c9c0cb-24f8-4f09-95c6-458ab914c313.png">
3. Repo and Organization Levels
"Runners Management" and "Secrets Management" 
   Org:
<img width="1437" alt="Screen Shot 2023-04-26 at 14 35 07"
src="https://user-images.githubusercontent.com/17645053/234489996-f3af5ebb-d354-46ca-9087-a0b586845281.png">
<img width="1433" alt="Screen Shot 2023-04-26 at 14 35 14"
src="https://user-images.githubusercontent.com/17645053/234490004-3abf8fed-81fd-4ce2-837a-935dade1793d.png">
    Repo:
<img width="1419" alt="Screen Shot 2023-04-26 at 14 34 50"
src="https://user-images.githubusercontent.com/17645053/234489904-80c11038-4b58-462c-9d0b-8b7cf70bc2b3.png">
    
<img width="1430" alt="Screen Shot 2023-04-26 at 14 34 57"
src="https://user-images.githubusercontent.com/17645053/234489918-4e8d1fe2-9bcd-4d8a-96c1-238a8088d92e.png">
It also finished these tasks :
- [x] rename routers function "runners" to "actions", and refactor
related file names
- [x] check and modify part of the runners related functions to match
their name
- [x] Fix backend check caused by fmt check
---------
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
			
			
This commit is contained in:
		@@ -3357,6 +3357,7 @@ deletion = Remove secret
 | 
				
			|||||||
deletion.description = Removing a secret is permanent and cannot be undone. Continue?
 | 
					deletion.description = Removing a secret is permanent and cannot be undone. Continue?
 | 
				
			||||||
deletion.success = The secret has been removed.
 | 
					deletion.success = The secret has been removed.
 | 
				
			||||||
deletion.failed = Failed to remove secret.
 | 
					deletion.failed = Failed to remove secret.
 | 
				
			||||||
 | 
					management = Secrets Management
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[actions]
 | 
					[actions]
 | 
				
			||||||
actions = Actions
 | 
					actions = Actions
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,6 @@ func updateSystemStatus() {
 | 
				
			|||||||
// Dashboard show admin panel dashboard
 | 
					// Dashboard show admin panel dashboard
 | 
				
			||||||
func Dashboard(ctx *context.Context) {
 | 
					func Dashboard(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.dashboard")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.dashboard")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminDashboard"] = true
 | 
						ctx.Data["PageIsAdminDashboard"] = true
 | 
				
			||||||
	ctx.Data["Stats"] = activities_model.GetStatistic()
 | 
						ctx.Data["Stats"] = activities_model.GetStatistic()
 | 
				
			||||||
	ctx.Data["NeedUpdate"] = updatechecker.GetNeedUpdate()
 | 
						ctx.Data["NeedUpdate"] = updatechecker.GetNeedUpdate()
 | 
				
			||||||
@@ -129,7 +128,6 @@ func Dashboard(ctx *context.Context) {
 | 
				
			|||||||
func DashboardPost(ctx *context.Context) {
 | 
					func DashboardPost(ctx *context.Context) {
 | 
				
			||||||
	form := web.GetForm(ctx).(*forms.AdminDashboardForm)
 | 
						form := web.GetForm(ctx).(*forms.AdminDashboardForm)
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.dashboard")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.dashboard")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminDashboard"] = true
 | 
						ctx.Data["PageIsAdminDashboard"] = true
 | 
				
			||||||
	ctx.Data["Stats"] = activities_model.GetStatistic()
 | 
						ctx.Data["Stats"] = activities_model.GetStatistic()
 | 
				
			||||||
	updateSystemStatus()
 | 
						updateSystemStatus()
 | 
				
			||||||
@@ -155,7 +153,6 @@ func DashboardPost(ctx *context.Context) {
 | 
				
			|||||||
// Monitor show admin monitor page
 | 
					// Monitor show admin monitor page
 | 
				
			||||||
func Monitor(ctx *context.Context) {
 | 
					func Monitor(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.monitor")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.monitor")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminMonitor"] = true
 | 
						ctx.Data["PageIsAdminMonitor"] = true
 | 
				
			||||||
	ctx.Data["Processes"], ctx.Data["ProcessCount"] = process.GetManager().Processes(false, true)
 | 
						ctx.Data["Processes"], ctx.Data["ProcessCount"] = process.GetManager().Processes(false, true)
 | 
				
			||||||
	ctx.Data["Entries"] = cron.ListTasks()
 | 
						ctx.Data["Entries"] = cron.ListTasks()
 | 
				
			||||||
@@ -167,7 +164,6 @@ func Monitor(ctx *context.Context) {
 | 
				
			|||||||
// GoroutineStacktrace show admin monitor goroutines page
 | 
					// GoroutineStacktrace show admin monitor goroutines page
 | 
				
			||||||
func GoroutineStacktrace(ctx *context.Context) {
 | 
					func GoroutineStacktrace(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.monitor")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.monitor")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminMonitor"] = true
 | 
						ctx.Data["PageIsAdminMonitor"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	processStacks, processCount, goroutineCount, err := process.GetManager().ProcessStacktraces(false, false)
 | 
						processStacks, processCount, goroutineCount, err := process.GetManager().ProcessStacktraces(false, false)
 | 
				
			||||||
@@ -202,7 +198,6 @@ func Queue(ctx *context.Context) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.monitor.queue", mq.Name)
 | 
						ctx.Data["Title"] = ctx.Tr("admin.monitor.queue", mq.Name)
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminMonitor"] = true
 | 
						ctx.Data["PageIsAdminMonitor"] = true
 | 
				
			||||||
	ctx.Data["Queue"] = mq
 | 
						ctx.Data["Queue"] = mq
 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplQueue)
 | 
						ctx.HTML(http.StatusOK, tplQueue)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,6 @@ func newOAuth2CommonHandlers() *user_setting.OAuth2CommonHandlers {
 | 
				
			|||||||
// Applications render org applications page (for org, at the moment, there are only OAuth2 applications)
 | 
					// Applications render org applications page (for org, at the moment, there are only OAuth2 applications)
 | 
				
			||||||
func Applications(ctx *context.Context) {
 | 
					func Applications(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
						ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminApplications"] = true
 | 
						ctx.Data["PageIsAdminApplications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps, err := auth.GetOAuth2ApplicationsByUserID(ctx, 0)
 | 
						apps, err := auth.GetOAuth2ApplicationsByUserID(ctx, 0)
 | 
				
			||||||
@@ -47,7 +46,6 @@ func Applications(ctx *context.Context) {
 | 
				
			|||||||
// ApplicationsPost response for adding an oauth2 application
 | 
					// ApplicationsPost response for adding an oauth2 application
 | 
				
			||||||
func ApplicationsPost(ctx *context.Context) {
 | 
					func ApplicationsPost(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
						ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminApplications"] = true
 | 
						ctx.Data["PageIsAdminApplications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oa := newOAuth2CommonHandlers()
 | 
						oa := newOAuth2CommonHandlers()
 | 
				
			||||||
@@ -56,7 +54,6 @@ func ApplicationsPost(ctx *context.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// EditApplication displays the given application
 | 
					// EditApplication displays the given application
 | 
				
			||||||
func EditApplication(ctx *context.Context) {
 | 
					func EditApplication(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminApplications"] = true
 | 
						ctx.Data["PageIsAdminApplications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oa := newOAuth2CommonHandlers()
 | 
						oa := newOAuth2CommonHandlers()
 | 
				
			||||||
@@ -66,7 +63,6 @@ func EditApplication(ctx *context.Context) {
 | 
				
			|||||||
// EditApplicationPost response for editing oauth2 application
 | 
					// EditApplicationPost response for editing oauth2 application
 | 
				
			||||||
func EditApplicationPost(ctx *context.Context) {
 | 
					func EditApplicationPost(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
						ctx.Data["Title"] = ctx.Tr("settings.applications")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminApplications"] = true
 | 
						ctx.Data["PageIsAdminApplications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oa := newOAuth2CommonHandlers()
 | 
						oa := newOAuth2CommonHandlers()
 | 
				
			||||||
@@ -76,7 +72,6 @@ func EditApplicationPost(ctx *context.Context) {
 | 
				
			|||||||
// ApplicationsRegenerateSecret handles the post request for regenerating the secret
 | 
					// ApplicationsRegenerateSecret handles the post request for regenerating the secret
 | 
				
			||||||
func ApplicationsRegenerateSecret(ctx *context.Context) {
 | 
					func ApplicationsRegenerateSecret(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings")
 | 
						ctx.Data["Title"] = ctx.Tr("settings")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminApplications"] = true
 | 
						ctx.Data["PageIsAdminApplications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oa := newOAuth2CommonHandlers()
 | 
						oa := newOAuth2CommonHandlers()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,7 +45,6 @@ var (
 | 
				
			|||||||
// Authentications show authentication config page
 | 
					// Authentications show authentication config page
 | 
				
			||||||
func Authentications(ctx *context.Context) {
 | 
					func Authentications(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.authentication")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.authentication")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminAuthentications"] = true
 | 
						ctx.Data["PageIsAdminAuthentications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
@@ -89,7 +88,6 @@ var (
 | 
				
			|||||||
// NewAuthSource render adding a new auth source page
 | 
					// NewAuthSource render adding a new auth source page
 | 
				
			||||||
func NewAuthSource(ctx *context.Context) {
 | 
					func NewAuthSource(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.auths.new")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.auths.new")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminAuthentications"] = true
 | 
						ctx.Data["PageIsAdminAuthentications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["type"] = auth.LDAP.Int()
 | 
						ctx.Data["type"] = auth.LDAP.Int()
 | 
				
			||||||
@@ -237,7 +235,6 @@ func parseSSPIConfig(ctx *context.Context, form forms.AuthenticationForm) (*sspi
 | 
				
			|||||||
func NewAuthSourcePost(ctx *context.Context) {
 | 
					func NewAuthSourcePost(ctx *context.Context) {
 | 
				
			||||||
	form := *web.GetForm(ctx).(*forms.AuthenticationForm)
 | 
						form := *web.GetForm(ctx).(*forms.AuthenticationForm)
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.auths.new")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.auths.new")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminAuthentications"] = true
 | 
						ctx.Data["PageIsAdminAuthentications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["CurrentTypeName"] = auth.Type(form.Type).String()
 | 
						ctx.Data["CurrentTypeName"] = auth.Type(form.Type).String()
 | 
				
			||||||
@@ -333,7 +330,6 @@ func NewAuthSourcePost(ctx *context.Context) {
 | 
				
			|||||||
// EditAuthSource render editing auth source page
 | 
					// EditAuthSource render editing auth source page
 | 
				
			||||||
func EditAuthSource(ctx *context.Context) {
 | 
					func EditAuthSource(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminAuthentications"] = true
 | 
						ctx.Data["PageIsAdminAuthentications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["SecurityProtocols"] = securityProtocols
 | 
						ctx.Data["SecurityProtocols"] = securityProtocols
 | 
				
			||||||
@@ -369,7 +365,6 @@ func EditAuthSource(ctx *context.Context) {
 | 
				
			|||||||
func EditAuthSourcePost(ctx *context.Context) {
 | 
					func EditAuthSourcePost(ctx *context.Context) {
 | 
				
			||||||
	form := *web.GetForm(ctx).(*forms.AuthenticationForm)
 | 
						form := *web.GetForm(ctx).(*forms.AuthenticationForm)
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.auths.edit")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminAuthentications"] = true
 | 
						ctx.Data["PageIsAdminAuthentications"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["SMTPAuths"] = smtp.Authenticators
 | 
						ctx.Data["SMTPAuths"] = smtp.Authenticators
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -100,7 +100,6 @@ func shadowPassword(provider, cfgItem string) string {
 | 
				
			|||||||
// Config show admin config page
 | 
					// Config show admin config page
 | 
				
			||||||
func Config(ctx *context.Context) {
 | 
					func Config(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.config")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.config")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminConfig"] = true
 | 
						ctx.Data["PageIsAdminConfig"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	systemSettings, err := system_model.GetAllSettings(ctx)
 | 
						systemSettings, err := system_model.GetAllSettings(ctx)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@ const (
 | 
				
			|||||||
// Emails show all emails
 | 
					// Emails show all emails
 | 
				
			||||||
func Emails(ctx *context.Context) {
 | 
					func Emails(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.emails")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.emails")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminEmails"] = true
 | 
						ctx.Data["PageIsAdminEmails"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts := &user_model.SearchEmailOptions{
 | 
						opts := &user_model.SearchEmailOptions{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,6 @@ const (
 | 
				
			|||||||
// Notices show notices for admin
 | 
					// Notices show notices for admin
 | 
				
			||||||
func Notices(ctx *context.Context) {
 | 
					func Notices(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.notices")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.notices")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminNotices"] = true
 | 
						ctx.Data["PageIsAdminNotices"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	total := system_model.CountNotices()
 | 
						total := system_model.CountNotices()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,6 @@ const (
 | 
				
			|||||||
// Organizations show all the organizations
 | 
					// Organizations show all the organizations
 | 
				
			||||||
func Organizations(ctx *context.Context) {
 | 
					func Organizations(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.organizations")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.organizations")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminOrganizations"] = true
 | 
						ctx.Data["PageIsAdminOrganizations"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	explore.RenderUserSearch(ctx, &user_model.SearchUserOptions{
 | 
						explore.RenderUserSearch(ctx, &user_model.SearchUserOptions{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,6 @@ func Packages(ctx *context.Context) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("packages.title")
 | 
						ctx.Data["Title"] = ctx.Tr("packages.title")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminPackages"] = true
 | 
						ctx.Data["PageIsAdminPackages"] = true
 | 
				
			||||||
	ctx.Data["Query"] = query
 | 
						ctx.Data["Query"] = query
 | 
				
			||||||
	ctx.Data["PackageType"] = packageType
 | 
						ctx.Data["PackageType"] = packageType
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,6 @@ const (
 | 
				
			|||||||
// Repos show all the repositories
 | 
					// Repos show all the repositories
 | 
				
			||||||
func Repos(ctx *context.Context) {
 | 
					func Repos(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.repositories")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.repositories")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminRepositories"] = true
 | 
						ctx.Data["PageIsAdminRepositories"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	explore.RenderRepoSearch(ctx, &explore.RepoSearchOptions{
 | 
						explore.RenderRepoSearch(ctx, &explore.RepoSearchOptions{
 | 
				
			||||||
@@ -67,7 +66,6 @@ func DeleteRepo(ctx *context.Context) {
 | 
				
			|||||||
// UnadoptedRepos lists the unadopted repositories
 | 
					// UnadoptedRepos lists the unadopted repositories
 | 
				
			||||||
func UnadoptedRepos(ctx *context.Context) {
 | 
					func UnadoptedRepos(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.repositories")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.repositories")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminRepositories"] = true
 | 
						ctx.Data["PageIsAdminRepositories"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts := db.ListOptions{
 | 
						opts := db.ListOptions{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,75 +4,10 @@
 | 
				
			|||||||
package admin
 | 
					package admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"net/url"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_model "code.gitea.io/gitea/models/actions"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	actions_shared "code.gitea.io/gitea/routers/web/shared/actions"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					func RedirectToDefaultSetting(ctx *context.Context) {
 | 
				
			||||||
	tplRunners    base.TplName = "admin/runners/base"
 | 
						ctx.Redirect(setting.AppSubURL + "/admin/actions/runners")
 | 
				
			||||||
	tplRunnerEdit base.TplName = "admin/runners/edit"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Runners show all the runners
 | 
					 | 
				
			||||||
func Runners(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminRunners"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	opts := actions_model.FindRunnerOptions{
 | 
					 | 
				
			||||||
		ListOptions: db.ListOptions{
 | 
					 | 
				
			||||||
			Page:     page,
 | 
					 | 
				
			||||||
			PageSize: 100,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Sort:   ctx.Req.URL.Query().Get("sort"),
 | 
					 | 
				
			||||||
		Filter: ctx.Req.URL.Query().Get("q"),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnersList(ctx, tplRunners, opts)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EditRunner show editing runner page
 | 
					 | 
				
			||||||
func EditRunner(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners.edit_runner")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminRunners"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetails(ctx, tplRunnerEdit, page, ctx.ParamsInt64(":runnerid"), 0, 0)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// EditRunnerPost response for editing runner
 | 
					 | 
				
			||||||
func EditRunnerPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners.edit")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminRunners"] = true
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), 0, 0,
 | 
					 | 
				
			||||||
		setting.AppSubURL+"/admin/runners/"+url.PathEscape(ctx.Params(":runnerid")))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// DeleteRunnerPost response for deleting a runner
 | 
					 | 
				
			||||||
func DeleteRunnerPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerDeletePost(ctx, ctx.ParamsInt64(":runnerid"),
 | 
					 | 
				
			||||||
		setting.AppSubURL+"/admin/runners/",
 | 
					 | 
				
			||||||
		setting.AppSubURL+"/admin/runners/"+url.PathEscape(ctx.Params(":runnerid")),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func ResetRunnerRegistrationToken(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerResetRegistrationToken(ctx, 0, 0, setting.AppSubURL+"/admin/runners/")
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,6 @@ const (
 | 
				
			|||||||
// Users show all the users
 | 
					// Users show all the users
 | 
				
			||||||
func Users(ctx *context.Context) {
 | 
					func Users(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.users")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.users")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminUsers"] = true
 | 
						ctx.Data["PageIsAdminUsers"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	extraParamStrings := map[string]string{}
 | 
						extraParamStrings := map[string]string{}
 | 
				
			||||||
@@ -80,7 +79,6 @@ func Users(ctx *context.Context) {
 | 
				
			|||||||
// NewUser render adding a new user page
 | 
					// NewUser render adding a new user page
 | 
				
			||||||
func NewUser(ctx *context.Context) {
 | 
					func NewUser(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.users.new_account")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.users.new_account")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminUsers"] = true
 | 
						ctx.Data["PageIsAdminUsers"] = true
 | 
				
			||||||
	ctx.Data["DefaultUserVisibilityMode"] = setting.Service.DefaultUserVisibilityMode
 | 
						ctx.Data["DefaultUserVisibilityMode"] = setting.Service.DefaultUserVisibilityMode
 | 
				
			||||||
	ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
						ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
				
			||||||
@@ -102,7 +100,6 @@ func NewUser(ctx *context.Context) {
 | 
				
			|||||||
func NewUserPost(ctx *context.Context) {
 | 
					func NewUserPost(ctx *context.Context) {
 | 
				
			||||||
	form := web.GetForm(ctx).(*forms.AdminCreateUserForm)
 | 
						form := web.GetForm(ctx).(*forms.AdminCreateUserForm)
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.users.new_account")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.users.new_account")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminUsers"] = true
 | 
						ctx.Data["PageIsAdminUsers"] = true
 | 
				
			||||||
	ctx.Data["DefaultUserVisibilityMode"] = setting.Service.DefaultUserVisibilityMode
 | 
						ctx.Data["DefaultUserVisibilityMode"] = setting.Service.DefaultUserVisibilityMode
 | 
				
			||||||
	ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
						ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
				
			||||||
@@ -253,7 +250,6 @@ func prepareUserInfo(ctx *context.Context) *user_model.User {
 | 
				
			|||||||
// EditUser show editing user page
 | 
					// EditUser show editing user page
 | 
				
			||||||
func EditUser(ctx *context.Context) {
 | 
					func EditUser(ctx *context.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.users.edit_account")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.users.edit_account")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminUsers"] = true
 | 
						ctx.Data["PageIsAdminUsers"] = true
 | 
				
			||||||
	ctx.Data["DisableRegularOrgCreation"] = setting.Admin.DisableRegularOrgCreation
 | 
						ctx.Data["DisableRegularOrgCreation"] = setting.Admin.DisableRegularOrgCreation
 | 
				
			||||||
	ctx.Data["DisableMigrations"] = setting.Repository.DisableMigrations
 | 
						ctx.Data["DisableMigrations"] = setting.Repository.DisableMigrations
 | 
				
			||||||
@@ -271,7 +267,6 @@ func EditUser(ctx *context.Context) {
 | 
				
			|||||||
func EditUserPost(ctx *context.Context) {
 | 
					func EditUserPost(ctx *context.Context) {
 | 
				
			||||||
	form := web.GetForm(ctx).(*forms.AdminEditUserForm)
 | 
						form := web.GetForm(ctx).(*forms.AdminEditUserForm)
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("admin.users.edit_account")
 | 
						ctx.Data["Title"] = ctx.Tr("admin.users.edit_account")
 | 
				
			||||||
	ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsAdminUsers"] = true
 | 
						ctx.Data["PageIsAdminUsers"] = true
 | 
				
			||||||
	ctx.Data["DisableMigrations"] = setting.Repository.DisableMigrations
 | 
						ctx.Data["DisableMigrations"] = setting.Repository.DisableMigrations
 | 
				
			||||||
	ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
						ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,78 +0,0 @@
 | 
				
			|||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
					 | 
				
			||||||
// SPDX-License-Identifier: MIT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package org
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"net/url"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_model "code.gitea.io/gitea/models/actions"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
					 | 
				
			||||||
	actions_shared "code.gitea.io/gitea/routers/web/shared/actions"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Runners render runners page
 | 
					 | 
				
			||||||
func Runners(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("org.runners")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsOrgSettings"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsOrgSettingsRunners"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	opts := actions_model.FindRunnerOptions{
 | 
					 | 
				
			||||||
		ListOptions: db.ListOptions{
 | 
					 | 
				
			||||||
			Page:     page,
 | 
					 | 
				
			||||||
			PageSize: 100,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Sort:          ctx.Req.URL.Query().Get("sort"),
 | 
					 | 
				
			||||||
		Filter:        ctx.Req.URL.Query().Get("q"),
 | 
					 | 
				
			||||||
		OwnerID:       ctx.Org.Organization.ID,
 | 
					 | 
				
			||||||
		WithAvailable: true,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnersList(ctx, tplSettingsRunners, opts)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ResetRunnerRegistrationToken reset runner registration token
 | 
					 | 
				
			||||||
func ResetRunnerRegistrationToken(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerResetRegistrationToken(ctx,
 | 
					 | 
				
			||||||
		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
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetails(ctx, tplSettingsRunnersEdit, page,
 | 
					 | 
				
			||||||
		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
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"),
 | 
					 | 
				
			||||||
		ctx.Org.Organization.ID, 0,
 | 
					 | 
				
			||||||
		ctx.Org.OrgLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid")))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RunnerDeletePost response for deleting runner
 | 
					 | 
				
			||||||
func RunnerDeletePost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerDeletePost(ctx,
 | 
					 | 
				
			||||||
		ctx.ParamsInt64(":runnerid"),
 | 
					 | 
				
			||||||
		ctx.Org.OrgLink+"/settings/runners",
 | 
					 | 
				
			||||||
		ctx.Org.OrgLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid")))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -37,10 +37,6 @@ const (
 | 
				
			|||||||
	tplSettingsHooks base.TplName = "org/settings/hooks"
 | 
						tplSettingsHooks base.TplName = "org/settings/hooks"
 | 
				
			||||||
	// tplSettingsLabels template path for render labels settings
 | 
						// tplSettingsLabels template path for render labels settings
 | 
				
			||||||
	tplSettingsLabels base.TplName = "org/settings/labels"
 | 
						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"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Settings render the main settings page
 | 
					// Settings render the main settings page
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								routers/web/org/setting/runners.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								routers/web/org/setting/runners.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RedirectToDefaultSetting(ctx *context.Context) {
 | 
				
			||||||
 | 
						ctx.Redirect(ctx.Org.OrgLink + "/settings/actions/runners")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,50 +0,0 @@
 | 
				
			|||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
					 | 
				
			||||||
// SPDX-License-Identifier: MIT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package org
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
					 | 
				
			||||||
	shared "code.gitea.io/gitea/routers/web/shared/secrets"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	tplSettingsSecrets base.TplName = "org/settings/secrets"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Secrets render organization secrets page
 | 
					 | 
				
			||||||
func Secrets(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("secrets.secrets")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsOrgSettings"] = true
 | 
					 | 
				
			||||||
	ctx.Data["PageIsOrgSettingsSecrets"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	shared.SetSecretsContext(ctx, ctx.ContextUser.ID, 0)
 | 
					 | 
				
			||||||
	if ctx.Written() {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplSettingsSecrets)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SecretsPost add secrets
 | 
					 | 
				
			||||||
func SecretsPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsPost(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		ctx.ContextUser.ID,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		ctx.Org.OrgLink+"/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SecretsDelete delete secrets
 | 
					 | 
				
			||||||
func SecretsDelete(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsDelete(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		ctx.ContextUser.ID,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		ctx.Org.OrgLink+"/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,76 +0,0 @@
 | 
				
			|||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
					 | 
				
			||||||
// SPDX-License-Identifier: MIT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package repo
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"net/url"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_model "code.gitea.io/gitea/models/actions"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
					 | 
				
			||||||
	actions_shared "code.gitea.io/gitea/routers/web/shared/actions"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	tplRunners    = "repo/settings/runners"
 | 
					 | 
				
			||||||
	tplRunnerEdit = "repo/settings/runner_edit"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Runners render runners page
 | 
					 | 
				
			||||||
func Runners(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsRunners"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	opts := actions_model.FindRunnerOptions{
 | 
					 | 
				
			||||||
		ListOptions: db.ListOptions{
 | 
					 | 
				
			||||||
			Page:     page,
 | 
					 | 
				
			||||||
			PageSize: 100,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		Sort:          ctx.Req.URL.Query().Get("sort"),
 | 
					 | 
				
			||||||
		Filter:        ctx.Req.URL.Query().Get("q"),
 | 
					 | 
				
			||||||
		RepoID:        ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
		WithAvailable: true,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnersList(ctx, tplRunners, opts)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func RunnersEdit(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsRunners"] = true
 | 
					 | 
				
			||||||
	page := ctx.FormInt("page")
 | 
					 | 
				
			||||||
	if page <= 1 {
 | 
					 | 
				
			||||||
		page = 1
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetails(ctx, tplRunnerEdit, page,
 | 
					 | 
				
			||||||
		ctx.ParamsInt64(":runnerid"), 0, ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func RunnersEditPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("actions.runners")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsRunners"] = true
 | 
					 | 
				
			||||||
	actions_shared.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"),
 | 
					 | 
				
			||||||
		0, ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid")))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func ResetRunnerRegistrationToken(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerResetRegistrationToken(ctx,
 | 
					 | 
				
			||||||
		0, ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/runners")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// RunnerDeletePost response for deleting runner
 | 
					 | 
				
			||||||
func RunnerDeletePost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	actions_shared.RunnerDeletePost(ctx, ctx.ParamsInt64(":runnerid"),
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/runners",
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid")))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										167
									
								
								routers/web/repo/setting/runners.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								routers/web/repo/setting/runners.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
				
			|||||||
 | 
					// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						actions_model "code.gitea.io/gitea/models/actions"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
						actions_shared "code.gitea.io/gitea/routers/web/shared/actions"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// TODO: Separate secrets from runners when layout is ready
 | 
				
			||||||
 | 
						tplRepoRunners     base.TplName = "repo/settings/actions"
 | 
				
			||||||
 | 
						tplOrgRunners      base.TplName = "org/settings/actions"
 | 
				
			||||||
 | 
						tplAdminRunners    base.TplName = "admin/actions"
 | 
				
			||||||
 | 
						tplRepoRunnerEdit  base.TplName = "repo/settings/runner_edit"
 | 
				
			||||||
 | 
						tplOrgRunnerEdit   base.TplName = "org/settings/runners_edit"
 | 
				
			||||||
 | 
						tplAdminRunnerEdit base.TplName = "admin/runners/edit"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type runnersCtx struct {
 | 
				
			||||||
 | 
						OwnerID            int64
 | 
				
			||||||
 | 
						RepoID             int64
 | 
				
			||||||
 | 
						IsRepo             bool
 | 
				
			||||||
 | 
						IsOrg              bool
 | 
				
			||||||
 | 
						IsAdmin            bool
 | 
				
			||||||
 | 
						RunnersTemplate    base.TplName
 | 
				
			||||||
 | 
						RunnerEditTemplate base.TplName
 | 
				
			||||||
 | 
						RedirectLink       string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getRunnersCtx(ctx *context.Context) (*runnersCtx, error) {
 | 
				
			||||||
 | 
						if ctx.Data["PageIsRepoSettings"] == true {
 | 
				
			||||||
 | 
							return &runnersCtx{
 | 
				
			||||||
 | 
								RepoID:             ctx.Repo.Repository.ID,
 | 
				
			||||||
 | 
								OwnerID:            0,
 | 
				
			||||||
 | 
								IsRepo:             true,
 | 
				
			||||||
 | 
								RunnersTemplate:    tplRepoRunners,
 | 
				
			||||||
 | 
								RunnerEditTemplate: tplRepoRunnerEdit,
 | 
				
			||||||
 | 
								RedirectLink:       ctx.Repo.RepoLink + "/settings/actions/runners/",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.Data["PageIsOrgSettings"] == true {
 | 
				
			||||||
 | 
							return &runnersCtx{
 | 
				
			||||||
 | 
								RepoID:             0,
 | 
				
			||||||
 | 
								OwnerID:            ctx.Org.Organization.ID,
 | 
				
			||||||
 | 
								IsOrg:              true,
 | 
				
			||||||
 | 
								RunnersTemplate:    tplOrgRunners,
 | 
				
			||||||
 | 
								RunnerEditTemplate: tplOrgRunnerEdit,
 | 
				
			||||||
 | 
								RedirectLink:       ctx.Org.OrgLink + "/settings/actions/runners/",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.Data["PageIsAdmin"] == true {
 | 
				
			||||||
 | 
							return &runnersCtx{
 | 
				
			||||||
 | 
								RepoID:             0,
 | 
				
			||||||
 | 
								OwnerID:            0,
 | 
				
			||||||
 | 
								IsAdmin:            true,
 | 
				
			||||||
 | 
								RunnersTemplate:    tplAdminRunners,
 | 
				
			||||||
 | 
								RunnerEditTemplate: tplAdminRunnerEdit,
 | 
				
			||||||
 | 
								RedirectLink:       setting.AppSubURL + "/admin/actions/runners/",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil, errors.New("unable to set Runners context")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runners render settings/actions/runners page for repo level
 | 
				
			||||||
 | 
					func Runners(ctx *context.Context) {
 | 
				
			||||||
 | 
						ctx.Data["PageIsSharedSettingsRunners"] = true
 | 
				
			||||||
 | 
						ctx.Data["Title"] = ctx.Tr("actions.actions")
 | 
				
			||||||
 | 
						ctx.Data["PageType"] = "runners"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rCtx, err := getRunnersCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getRunnersCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						page := ctx.FormInt("page")
 | 
				
			||||||
 | 
						if page <= 1 {
 | 
				
			||||||
 | 
							page = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts := actions_model.FindRunnerOptions{
 | 
				
			||||||
 | 
							ListOptions: db.ListOptions{
 | 
				
			||||||
 | 
								Page:     page,
 | 
				
			||||||
 | 
								PageSize: 100,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Sort:   ctx.Req.URL.Query().Get("sort"),
 | 
				
			||||||
 | 
							Filter: ctx.Req.URL.Query().Get("q"),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if rCtx.IsRepo {
 | 
				
			||||||
 | 
							opts.RepoID = rCtx.RepoID
 | 
				
			||||||
 | 
							opts.WithAvailable = true
 | 
				
			||||||
 | 
						} else if rCtx.IsOrg {
 | 
				
			||||||
 | 
							opts.OwnerID = rCtx.OwnerID
 | 
				
			||||||
 | 
							opts.WithAvailable = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actions_shared.RunnersList(ctx, opts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.HTML(http.StatusOK, rCtx.RunnersTemplate)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RunnersEdit renders runner edit page for repository level
 | 
				
			||||||
 | 
					func RunnersEdit(ctx *context.Context) {
 | 
				
			||||||
 | 
						ctx.Data["PageIsSharedSettingsRunners"] = true
 | 
				
			||||||
 | 
						ctx.Data["Title"] = ctx.Tr("actions.runners.edit_runner")
 | 
				
			||||||
 | 
						rCtx, err := getRunnersCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getRunnersCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						page := ctx.FormInt("page")
 | 
				
			||||||
 | 
						if page <= 1 {
 | 
				
			||||||
 | 
							page = 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						actions_shared.RunnerDetails(ctx, page,
 | 
				
			||||||
 | 
							ctx.ParamsInt64(":runnerid"), rCtx.OwnerID, rCtx.RepoID,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						ctx.HTML(http.StatusOK, rCtx.RunnerEditTemplate)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RunnersEditPost(ctx *context.Context) {
 | 
				
			||||||
 | 
						rCtx, err := getRunnersCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getRunnersCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actions_shared.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"),
 | 
				
			||||||
 | 
							rCtx.OwnerID, rCtx.RepoID,
 | 
				
			||||||
 | 
							rCtx.RedirectLink+url.PathEscape(ctx.Params(":runnerid")))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ResetRunnerRegistrationToken(ctx *context.Context) {
 | 
				
			||||||
 | 
						rCtx, err := getRunnersCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getRunnersCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actions_shared.RunnerResetRegistrationToken(ctx, rCtx.OwnerID, rCtx.RepoID, rCtx.RedirectLink)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RunnerDeletePost response for deleting runner
 | 
				
			||||||
 | 
					func RunnerDeletePost(ctx *context.Context) {
 | 
				
			||||||
 | 
						rCtx, err := getRunnersCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getRunnersCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						actions_shared.RunnerDeletePost(ctx, ctx.ParamsInt64(":runnerid"), rCtx.RedirectLink, rCtx.RedirectLink+url.PathEscape(ctx.Params(":runnerid")))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func RedirectToDefaultSetting(ctx *context.Context) {
 | 
				
			||||||
 | 
						ctx.Redirect(ctx.Repo.RepoLink + "/settings/actions/runners")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										115
									
								
								routers/web/repo/setting/secrets.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								routers/web/repo/setting/secrets.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/base"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
						shared "code.gitea.io/gitea/routers/web/shared/secrets"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// TODO: Separate secrets from runners when layout is ready
 | 
				
			||||||
 | 
						tplRepoSecrets base.TplName = "repo/settings/actions"
 | 
				
			||||||
 | 
						tplOrgSecrets  base.TplName = "org/settings/actions"
 | 
				
			||||||
 | 
						tplUserSecrets base.TplName = "user/settings/actions"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type secretsCtx struct {
 | 
				
			||||||
 | 
						OwnerID         int64
 | 
				
			||||||
 | 
						RepoID          int64
 | 
				
			||||||
 | 
						IsRepo          bool
 | 
				
			||||||
 | 
						IsOrg           bool
 | 
				
			||||||
 | 
						IsUser          bool
 | 
				
			||||||
 | 
						SecretsTemplate base.TplName
 | 
				
			||||||
 | 
						RedirectLink    string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getSecretsCtx(ctx *context.Context) (*secretsCtx, error) {
 | 
				
			||||||
 | 
						if ctx.Data["PageIsRepoSettings"] == true {
 | 
				
			||||||
 | 
							return &secretsCtx{
 | 
				
			||||||
 | 
								OwnerID:         0,
 | 
				
			||||||
 | 
								RepoID:          ctx.Repo.Repository.ID,
 | 
				
			||||||
 | 
								IsRepo:          true,
 | 
				
			||||||
 | 
								SecretsTemplate: tplRepoSecrets,
 | 
				
			||||||
 | 
								RedirectLink:    ctx.Repo.RepoLink + "/settings/actions/secrets",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.Data["PageIsOrgSettings"] == true {
 | 
				
			||||||
 | 
							return &secretsCtx{
 | 
				
			||||||
 | 
								OwnerID:         ctx.ContextUser.ID,
 | 
				
			||||||
 | 
								RepoID:          0,
 | 
				
			||||||
 | 
								IsOrg:           true,
 | 
				
			||||||
 | 
								SecretsTemplate: tplOrgSecrets,
 | 
				
			||||||
 | 
								RedirectLink:    ctx.Org.OrgLink + "/settings/actions/secrets",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.Data["PageIsUserSettings"] == true {
 | 
				
			||||||
 | 
							return &secretsCtx{
 | 
				
			||||||
 | 
								OwnerID:         ctx.Doer.ID,
 | 
				
			||||||
 | 
								RepoID:          0,
 | 
				
			||||||
 | 
								IsUser:          true,
 | 
				
			||||||
 | 
								SecretsTemplate: tplUserSecrets,
 | 
				
			||||||
 | 
								RedirectLink:    setting.AppSubURL + "/user/settings/actions/secrets",
 | 
				
			||||||
 | 
							}, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil, errors.New("unable to set Secrets context")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Secrets(ctx *context.Context) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = ctx.Tr("actions.actions")
 | 
				
			||||||
 | 
						ctx.Data["PageType"] = "secrets"
 | 
				
			||||||
 | 
						ctx.Data["PageIsSharedSettingsSecrets"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sCtx, err := getSecretsCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getSecretsCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if sCtx.IsRepo {
 | 
				
			||||||
 | 
							ctx.Data["DisableSSH"] = setting.SSH.Disabled
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						shared.SetSecretsContext(ctx, sCtx.OwnerID, sCtx.RepoID)
 | 
				
			||||||
 | 
						if ctx.Written() {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ctx.HTML(http.StatusOK, sCtx.SecretsTemplate)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SecretsPost(ctx *context.Context) {
 | 
				
			||||||
 | 
						sCtx, err := getSecretsCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getSecretsCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						shared.PerformSecretsPost(
 | 
				
			||||||
 | 
							ctx,
 | 
				
			||||||
 | 
							sCtx.OwnerID,
 | 
				
			||||||
 | 
							sCtx.RepoID,
 | 
				
			||||||
 | 
							sCtx.RedirectLink,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SecretsDelete(ctx *context.Context) {
 | 
				
			||||||
 | 
						sCtx, err := getSecretsCtx(ctx)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							ctx.ServerError("getSecretsCtx", err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						shared.PerformSecretsDelete(
 | 
				
			||||||
 | 
							ctx,
 | 
				
			||||||
 | 
							sCtx.OwnerID,
 | 
				
			||||||
 | 
							sCtx.RepoID,
 | 
				
			||||||
 | 
							sCtx.RedirectLink,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,48 +0,0 @@
 | 
				
			|||||||
// Copyright 2022 The Gitea Authors. All rights reserved.
 | 
					 | 
				
			||||||
// SPDX-License-Identifier: MIT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package repo
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
					 | 
				
			||||||
	shared "code.gitea.io/gitea/routers/web/shared/secrets"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	tplSecrets base.TplName = "repo/settings/secrets"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Secrets(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("secrets.secrets")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsSecrets"] = true
 | 
					 | 
				
			||||||
	ctx.Data["DisableSSH"] = setting.SSH.Disabled
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	shared.SetSecretsContext(ctx, 0, ctx.Repo.Repository.ID)
 | 
					 | 
				
			||||||
	if ctx.Written() {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplSecrets)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func SecretsPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsPost(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func DeleteSecret(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsDelete(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		ctx.Repo.Repository.ID,
 | 
					 | 
				
			||||||
		ctx.Repo.RepoLink+"/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -67,7 +67,7 @@ type ownerRepoCtx struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// getOwnerRepoCtx determines whether this is a repo, owner, or admin (both default and system) context.
 | 
					// getOwnerRepoCtx determines whether this is a repo, owner, or admin (both default and system) context.
 | 
				
			||||||
func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
 | 
					func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
 | 
				
			||||||
	if is, ok := ctx.Data["IsRepositoryWebhook"]; ok && is.(bool) {
 | 
						if ctx.Data["PageIsRepoSettings"] == true {
 | 
				
			||||||
		return &ownerRepoCtx{
 | 
							return &ownerRepoCtx{
 | 
				
			||||||
			RepoID:      ctx.Repo.Repository.ID,
 | 
								RepoID:      ctx.Repo.Repository.ID,
 | 
				
			||||||
			Link:        path.Join(ctx.Repo.RepoLink, "settings/hooks"),
 | 
								Link:        path.Join(ctx.Repo.RepoLink, "settings/hooks"),
 | 
				
			||||||
@@ -76,7 +76,7 @@ func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
 | 
				
			|||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if is, ok := ctx.Data["IsOrganizationWebhook"]; ok && is.(bool) {
 | 
						if ctx.Data["PageIsOrgSettings"] == true {
 | 
				
			||||||
		return &ownerRepoCtx{
 | 
							return &ownerRepoCtx{
 | 
				
			||||||
			OwnerID:     ctx.ContextUser.ID,
 | 
								OwnerID:     ctx.ContextUser.ID,
 | 
				
			||||||
			Link:        path.Join(ctx.Org.OrgLink, "settings/hooks"),
 | 
								Link:        path.Join(ctx.Org.OrgLink, "settings/hooks"),
 | 
				
			||||||
@@ -85,7 +85,7 @@ func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
 | 
				
			|||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if is, ok := ctx.Data["IsUserWebhook"]; ok && is.(bool) {
 | 
						if ctx.Data["PageIsUserSettings"] == true {
 | 
				
			||||||
		return &ownerRepoCtx{
 | 
							return &ownerRepoCtx{
 | 
				
			||||||
			OwnerID:     ctx.Doer.ID,
 | 
								OwnerID:     ctx.Doer.ID,
 | 
				
			||||||
			Link:        path.Join(setting.AppSubURL, "/user/settings/hooks"),
 | 
								Link:        path.Join(setting.AppSubURL, "/user/settings/hooks"),
 | 
				
			||||||
@@ -94,7 +94,7 @@ func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
 | 
				
			|||||||
		}, nil
 | 
							}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.Doer.IsAdmin {
 | 
						if ctx.Data["PageIsAdmin"] == true {
 | 
				
			||||||
		return &ownerRepoCtx{
 | 
							return &ownerRepoCtx{
 | 
				
			||||||
			IsAdmin:         true,
 | 
								IsAdmin:         true,
 | 
				
			||||||
			IsSystemWebhook: ctx.Params(":configType") == "system-hooks",
 | 
								IsSystemWebhook: ctx.Params(":configType") == "system-hooks",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	actions_model "code.gitea.io/gitea/models/actions"
 | 
						actions_model "code.gitea.io/gitea/models/actions"
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/util"
 | 
						"code.gitea.io/gitea/modules/util"
 | 
				
			||||||
@@ -18,8 +17,8 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/services/forms"
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RunnersList render common runners list page
 | 
					// RunnersList prepares data for runners list
 | 
				
			||||||
func RunnersList(ctx *context.Context, tplName base.TplName, opts actions_model.FindRunnerOptions) {
 | 
					func RunnersList(ctx *context.Context, opts actions_model.FindRunnerOptions) {
 | 
				
			||||||
	count, err := actions_model.CountRunners(ctx, opts)
 | 
						count, err := actions_model.CountRunners(ctx, opts)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("CountRunners", err)
 | 
							ctx.ServerError("CountRunners", err)
 | 
				
			||||||
@@ -58,13 +57,12 @@ func RunnersList(ctx *context.Context, tplName base.TplName, opts actions_model.
 | 
				
			|||||||
	ctx.Data["RunnerRepoID"] = opts.RepoID
 | 
						ctx.Data["RunnerRepoID"] = opts.RepoID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | 
						pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplName)
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RunnerDetails render runner details page
 | 
					// RunnerDetails prepares data for runners edit page
 | 
				
			||||||
func RunnerDetails(ctx *context.Context, tplName base.TplName, page int, runnerID, ownerID, repoID int64) {
 | 
					func RunnerDetails(ctx *context.Context, page int, runnerID, ownerID, repoID int64) {
 | 
				
			||||||
	runner, err := actions_model.GetRunnerByID(ctx, runnerID)
 | 
						runner, err := actions_model.GetRunnerByID(ctx, runnerID)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.ServerError("GetRunnerByID", err)
 | 
							ctx.ServerError("GetRunnerByID", err)
 | 
				
			||||||
@@ -111,8 +109,6 @@ func RunnerDetails(ctx *context.Context, tplName base.TplName, page int, runnerI
 | 
				
			|||||||
	ctx.Data["Tasks"] = tasks
 | 
						ctx.Data["Tasks"] = tasks
 | 
				
			||||||
	pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | 
						pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
 | 
				
			||||||
	ctx.Data["Page"] = pager
 | 
						ctx.Data["Page"] = pager
 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplName)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RunnerDetailsEditPost response for edit runner details
 | 
					// RunnerDetailsEditPost response for edit runner details
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,44 +4,10 @@
 | 
				
			|||||||
package setting
 | 
					package setting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/base"
 | 
					 | 
				
			||||||
	"code.gitea.io/gitea/modules/context"
 | 
						"code.gitea.io/gitea/modules/context"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
	shared "code.gitea.io/gitea/routers/web/shared/secrets"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					func RedirectToDefaultSetting(ctx *context.Context) {
 | 
				
			||||||
	tplSettingsSecrets base.TplName = "user/settings/secrets"
 | 
						ctx.Redirect(setting.AppSubURL + "/user/settings/actions/secrets")
 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Secrets(ctx *context.Context) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("secrets.secrets")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsSecrets"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	shared.SetSecretsContext(ctx, ctx.Doer.ID, 0)
 | 
					 | 
				
			||||||
	if ctx.Written() {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.HTML(http.StatusOK, tplSettingsSecrets)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func SecretsPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsPost(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		ctx.Doer.ID,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		setting.AppSubURL+"/user/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func SecretsDelete(ctx *context.Context) {
 | 
					 | 
				
			||||||
	shared.PerformSecretsDelete(
 | 
					 | 
				
			||||||
		ctx,
 | 
					 | 
				
			||||||
		ctx.Doer.ID,
 | 
					 | 
				
			||||||
		0,
 | 
					 | 
				
			||||||
		setting.AppSubURL+"/user/settings/secrets",
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,8 +30,10 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/routers/web/healthcheck"
 | 
						"code.gitea.io/gitea/routers/web/healthcheck"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/misc"
 | 
						"code.gitea.io/gitea/routers/web/misc"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/org"
 | 
						"code.gitea.io/gitea/routers/web/org"
 | 
				
			||||||
 | 
						org_setting "code.gitea.io/gitea/routers/web/org/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/repo"
 | 
						"code.gitea.io/gitea/routers/web/repo"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/repo/actions"
 | 
						"code.gitea.io/gitea/routers/web/repo/actions"
 | 
				
			||||||
 | 
						repo_setting "code.gitea.io/gitea/routers/web/repo/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/user"
 | 
						"code.gitea.io/gitea/routers/web/user"
 | 
				
			||||||
	user_setting "code.gitea.io/gitea/routers/web/user/setting"
 | 
						user_setting "code.gitea.io/gitea/routers/web/user/setting"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/web/user/setting/security"
 | 
						"code.gitea.io/gitea/routers/web/user/setting/security"
 | 
				
			||||||
@@ -93,6 +95,14 @@ func buildAuthGroup() *auth_service.Group {
 | 
				
			|||||||
	return group
 | 
						return group
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ctxDataSet(args ...any) func(ctx *context.Context) {
 | 
				
			||||||
 | 
						return func(ctx *context.Context) {
 | 
				
			||||||
 | 
							for i := 0; i < len(args); i += 2 {
 | 
				
			||||||
 | 
								ctx.Data[args[i].(string)] = args[i+1]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Routes returns all web routes
 | 
					// Routes returns all web routes
 | 
				
			||||||
func Routes(ctx gocontext.Context) *web.Route {
 | 
					func Routes(ctx gocontext.Context) *web.Route {
 | 
				
			||||||
	routes := web.NewRoute()
 | 
						routes := web.NewRoute()
 | 
				
			||||||
@@ -282,6 +292,24 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
		m.Post("/packagist/{id}", web.Bind(forms.NewPackagistHookForm{}), repo.PackagistHooksEditPost)
 | 
							m.Post("/packagist/{id}", web.Bind(forms.NewPackagistHookForm{}), repo.PackagistHooksEditPost)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						addSettingsSecretsRoutes := func() {
 | 
				
			||||||
 | 
							m.Group("/secrets", func() {
 | 
				
			||||||
 | 
								m.Get("", repo_setting.Secrets)
 | 
				
			||||||
 | 
								m.Post("", web.Bind(forms.AddSecretForm{}), repo_setting.SecretsPost)
 | 
				
			||||||
 | 
								m.Post("/delete", repo_setting.SecretsDelete)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						addSettingsRunnersRoutes := func() {
 | 
				
			||||||
 | 
							m.Group("/runners", func() {
 | 
				
			||||||
 | 
								m.Get("", repo_setting.Runners)
 | 
				
			||||||
 | 
								m.Combo("/{runnerid}").Get(repo_setting.RunnersEdit).
 | 
				
			||||||
 | 
									Post(web.Bind(forms.EditRunnerForm{}), repo_setting.RunnersEditPost)
 | 
				
			||||||
 | 
								m.Post("/{runnerid}/delete", repo_setting.RunnerDeletePost)
 | 
				
			||||||
 | 
								m.Get("/reset_registration_token", repo_setting.ResetRunnerRegistrationToken)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// FIXME: not all routes need go through same middleware.
 | 
						// FIXME: not all routes need go through same middleware.
 | 
				
			||||||
	// Especially some AJAX requests, we can reduce middleware number to improve performance.
 | 
						// Especially some AJAX requests, we can reduce middleware number to improve performance.
 | 
				
			||||||
	// Routers.
 | 
						// Routers.
 | 
				
			||||||
@@ -441,11 +469,12 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
			})
 | 
								})
 | 
				
			||||||
			m.Post("/chef/regenerate_keypair", user_setting.RegenerateChefKeyPair)
 | 
								m.Post("/chef/regenerate_keypair", user_setting.RegenerateChefKeyPair)
 | 
				
			||||||
		}, packagesEnabled)
 | 
							}, packagesEnabled)
 | 
				
			||||||
		m.Group("/secrets", func() {
 | 
					
 | 
				
			||||||
			m.Get("", user_setting.Secrets)
 | 
							m.Group("/actions", func() {
 | 
				
			||||||
			m.Post("", web.Bind(forms.AddSecretForm{}), user_setting.SecretsPost)
 | 
								m.Get("", user_setting.RedirectToDefaultSetting)
 | 
				
			||||||
			m.Post("/delete", user_setting.SecretsDelete)
 | 
								addSettingsSecretsRoutes()
 | 
				
			||||||
		})
 | 
							}, actions.MustEnableActions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Get("/organization", user_setting.Organization)
 | 
							m.Get("/organization", user_setting.Organization)
 | 
				
			||||||
		m.Get("/repos", user_setting.Repos)
 | 
							m.Get("/repos", user_setting.Repos)
 | 
				
			||||||
		m.Post("/repos/unadopted", user_setting.AdoptOrDeleteRepository)
 | 
							m.Post("/repos/unadopted", user_setting.AdoptOrDeleteRepository)
 | 
				
			||||||
@@ -459,14 +488,8 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
				m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
									m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
			addWebhookEditRoutes()
 | 
								addWebhookEditRoutes()
 | 
				
			||||||
		}, webhooksEnabled, func(ctx *context.Context) {
 | 
							}, webhooksEnabled)
 | 
				
			||||||
			ctx.Data["IsUserWebhook"] = true
 | 
						}, reqSignIn, ctxDataSet("PageIsUserSettings", true, "AllThemes", setting.UI.Themes, "EnablePackages", setting.Packages.Enabled))
 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	}, reqSignIn, func(ctx *context.Context) {
 | 
					 | 
				
			||||||
		ctx.Data["PageIsUserSettings"] = true
 | 
					 | 
				
			||||||
		ctx.Data["AllThemes"] = setting.UI.Themes
 | 
					 | 
				
			||||||
		ctx.Data["EnablePackages"] = setting.Packages.Enabled
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Group("/user", func() {
 | 
						m.Group("/user", func() {
 | 
				
			||||||
		// r.Get("/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds)
 | 
							// r.Get("/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds)
 | 
				
			||||||
@@ -591,16 +614,11 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Group("/runners", func() {
 | 
							m.Group("/actions", func() {
 | 
				
			||||||
			m.Get("", admin.Runners)
 | 
								m.Get("", admin.RedirectToDefaultSetting)
 | 
				
			||||||
			m.Get("/reset_registration_token", admin.ResetRunnerRegistrationToken)
 | 
								addSettingsRunnersRoutes()
 | 
				
			||||||
			m.Combo("/{runnerid}").Get(admin.EditRunner).Post(web.Bind(forms.EditRunnerForm{}), admin.EditRunnerPost)
 | 
							})
 | 
				
			||||||
			m.Post("/{runnerid}/delete", admin.DeleteRunnerPost)
 | 
						}, adminReq, ctxDataSet("EnableOAuth2", setting.OAuth2.Enable, "EnablePackages", setting.Packages.Enabled))
 | 
				
			||||||
		}, actions.MustEnableActions)
 | 
					 | 
				
			||||||
	}, func(ctx *context.Context) {
 | 
					 | 
				
			||||||
		ctx.Data["EnableOAuth2"] = setting.OAuth2.Enable
 | 
					 | 
				
			||||||
		ctx.Data["EnablePackages"] = setting.Packages.Enabled
 | 
					 | 
				
			||||||
	}, adminReq)
 | 
					 | 
				
			||||||
	// ***** END: Admin *****
 | 
						// ***** END: Admin *****
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Group("", func() {
 | 
						m.Group("", func() {
 | 
				
			||||||
@@ -724,9 +742,7 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
						m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
											m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
					addWebhookEditRoutes()
 | 
										addWebhookEditRoutes()
 | 
				
			||||||
				}, webhooksEnabled, func(ctx *context.Context) {
 | 
									}, webhooksEnabled)
 | 
				
			||||||
					ctx.Data["IsOrganizationWebhook"] = true
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
				m.Group("/labels", func() {
 | 
									m.Group("/labels", func() {
 | 
				
			||||||
					m.Get("", org.RetrieveLabels, org.Labels)
 | 
										m.Get("", org.RetrieveLabels, org.Labels)
 | 
				
			||||||
@@ -736,20 +752,12 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
					m.Post("/initialize", web.Bind(forms.InitializeLabelsForm{}), org.InitializeLabels)
 | 
										m.Post("/initialize", web.Bind(forms.InitializeLabelsForm{}), org.InitializeLabels)
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				m.Group("/runners", func() {
 | 
									m.Group("/actions", func() {
 | 
				
			||||||
					m.Get("", org.Runners)
 | 
										m.Get("", org_setting.RedirectToDefaultSetting)
 | 
				
			||||||
					m.Combo("/{runnerid}").Get(org.RunnersEdit).
 | 
										addSettingsRunnersRoutes()
 | 
				
			||||||
						Post(web.Bind(forms.EditRunnerForm{}), org.RunnersEditPost)
 | 
										addSettingsSecretsRoutes()
 | 
				
			||||||
					m.Post("/{runnerid}/delete", org.RunnerDeletePost)
 | 
					 | 
				
			||||||
					m.Get("/reset_registration_token", org.ResetRunnerRegistrationToken)
 | 
					 | 
				
			||||||
				}, actions.MustEnableActions)
 | 
									}, actions.MustEnableActions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				m.Group("/secrets", func() {
 | 
					 | 
				
			||||||
					m.Get("", org.Secrets)
 | 
					 | 
				
			||||||
					m.Post("", web.Bind(forms.AddSecretForm{}), org.SecretsPost)
 | 
					 | 
				
			||||||
					m.Post("/delete", org.SecretsDelete)
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				m.RouteMethods("/delete", "GET,POST", org.SettingsDelete)
 | 
									m.RouteMethods("/delete", "GET,POST", org.SettingsDelete)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				m.Group("/packages", func() {
 | 
									m.Group("/packages", func() {
 | 
				
			||||||
@@ -770,10 +778,7 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
						m.Post("/rebuild", org.RebuildCargoIndex)
 | 
											m.Post("/rebuild", org.RebuildCargoIndex)
 | 
				
			||||||
					})
 | 
										})
 | 
				
			||||||
				}, packagesEnabled)
 | 
									}, packagesEnabled)
 | 
				
			||||||
			}, func(ctx *context.Context) {
 | 
								}, ctxDataSet("EnableOAuth2", setting.OAuth2.Enable, "EnablePackages", setting.Packages.Enabled, "PageIsOrgSettings", true))
 | 
				
			||||||
				ctx.Data["EnableOAuth2"] = setting.OAuth2.Enable
 | 
					 | 
				
			||||||
				ctx.Data["EnablePackages"] = setting.Packages.Enabled
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
		}, context.OrgAssignment(true, true))
 | 
							}, context.OrgAssignment(true, true))
 | 
				
			||||||
	}, reqSignIn)
 | 
						}, reqSignIn)
 | 
				
			||||||
	// ***** END: Organization *****
 | 
						// ***** END: Organization *****
 | 
				
			||||||
@@ -907,9 +912,7 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
					m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
										m.Post("/replay/{uuid}", repo.ReplayWebhook)
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
				addWebhookEditRoutes()
 | 
									addWebhookEditRoutes()
 | 
				
			||||||
			}, webhooksEnabled, func(ctx *context.Context) {
 | 
								}, webhooksEnabled)
 | 
				
			||||||
				ctx.Data["IsRepositoryWebhook"] = true
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			m.Group("/keys", func() {
 | 
								m.Group("/keys", func() {
 | 
				
			||||||
				m.Combo("").Get(repo.DeployKeys).
 | 
									m.Combo("").Get(repo.DeployKeys).
 | 
				
			||||||
@@ -917,12 +920,6 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
				m.Post("/delete", repo.DeleteDeployKey)
 | 
									m.Post("/delete", repo.DeleteDeployKey)
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			m.Group("/secrets", func() {
 | 
					 | 
				
			||||||
				m.Get("", repo.Secrets)
 | 
					 | 
				
			||||||
				m.Post("", web.Bind(forms.AddSecretForm{}), repo.SecretsPost)
 | 
					 | 
				
			||||||
				m.Post("/delete", repo.DeleteSecret)
 | 
					 | 
				
			||||||
			})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			m.Group("/lfs", func() {
 | 
								m.Group("/lfs", func() {
 | 
				
			||||||
				m.Get("/", repo.LFSFiles)
 | 
									m.Get("/", repo.LFSFiles)
 | 
				
			||||||
				m.Get("/show/{oid}", repo.LFSFileGet)
 | 
									m.Get("/show/{oid}", repo.LFSFileGet)
 | 
				
			||||||
@@ -936,18 +933,12 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
					m.Post("/{lid}/unlock", repo.LFSUnlock)
 | 
										m.Post("/{lid}/unlock", repo.LFSUnlock)
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
 | 
								m.Group("/actions", func() {
 | 
				
			||||||
			m.Group("/runners", func() {
 | 
									m.Get("", repo_setting.RedirectToDefaultSetting)
 | 
				
			||||||
				m.Get("", repo.Runners)
 | 
									addSettingsRunnersRoutes()
 | 
				
			||||||
				m.Combo("/{runnerid}").Get(repo.RunnersEdit).
 | 
									addSettingsSecretsRoutes()
 | 
				
			||||||
					Post(web.Bind(forms.EditRunnerForm{}), repo.RunnersEditPost)
 | 
					 | 
				
			||||||
				m.Post("/{runnerid}/delete", repo.RunnerDeletePost)
 | 
					 | 
				
			||||||
				m.Get("/reset_registration_token", repo.ResetRunnerRegistrationToken)
 | 
					 | 
				
			||||||
			}, actions.MustEnableActions)
 | 
								}, actions.MustEnableActions)
 | 
				
			||||||
		}, func(ctx *context.Context) {
 | 
							}, ctxDataSet("PageIsRepoSettings", true, "LFSStartServer", setting.LFS.StartServer))
 | 
				
			||||||
			ctx.Data["PageIsSettings"] = true
 | 
					 | 
				
			||||||
			ctx.Data["LFSStartServer"] = setting.LFS.StartServer
 | 
					 | 
				
			||||||
		})
 | 
					 | 
				
			||||||
	}, reqSignIn, context.RepoAssignment, context.UnitTypes(), reqRepoAdmin, context.RepoRef())
 | 
						}, reqSignIn, context.RepoAssignment, context.UnitTypes(), reqRepoAdmin, context.RepoRef())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Post("/{username}/{reponame}/action/{action}", reqSignIn, context.RepoAssignment, context.UnitTypes(), repo.Action)
 | 
						m.Post("/{username}/{reponame}/action/{action}", reqSignIn, context.RepoAssignment, context.UnitTypes(), repo.Action)
 | 
				
			||||||
@@ -1098,9 +1089,8 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
			m.Get("", repo.TagsList)
 | 
								m.Get("", repo.TagsList)
 | 
				
			||||||
			m.Get(".rss", feedEnabled, repo.TagsListFeedRSS)
 | 
								m.Get(".rss", feedEnabled, repo.TagsListFeedRSS)
 | 
				
			||||||
			m.Get(".atom", feedEnabled, repo.TagsListFeedAtom)
 | 
								m.Get(".atom", feedEnabled, repo.TagsListFeedAtom)
 | 
				
			||||||
		}, func(ctx *context.Context) {
 | 
							}, ctxDataSet("EnableFeed", setting.Other.EnableFeed),
 | 
				
			||||||
			ctx.Data["EnableFeed"] = setting.Other.EnableFeed
 | 
								repo.MustBeNotEmpty, reqRepoCodeReader, context.RepoRefByType(context.RepoRefTag, true))
 | 
				
			||||||
		}, repo.MustBeNotEmpty, reqRepoCodeReader, context.RepoRefByType(context.RepoRefTag, true))
 | 
					 | 
				
			||||||
		m.Post("/tags/delete", repo.DeleteTag, reqSignIn,
 | 
							m.Post("/tags/delete", repo.DeleteTag, reqSignIn,
 | 
				
			||||||
			repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoCodeWriter, context.RepoRef())
 | 
								repo.MustBeNotEmpty, context.RepoMustNotBeArchived(), reqRepoCodeWriter, context.RepoRef())
 | 
				
			||||||
	}, reqSignIn, context.RepoAssignment, context.UnitTypes())
 | 
						}, reqSignIn, context.RepoAssignment, context.UnitTypes())
 | 
				
			||||||
@@ -1113,9 +1103,8 @@ func registerRoutes(m *web.Route) {
 | 
				
			|||||||
			m.Get("/latest", repo.LatestRelease)
 | 
								m.Get("/latest", repo.LatestRelease)
 | 
				
			||||||
			m.Get(".rss", feedEnabled, repo.ReleasesFeedRSS)
 | 
								m.Get(".rss", feedEnabled, repo.ReleasesFeedRSS)
 | 
				
			||||||
			m.Get(".atom", feedEnabled, repo.ReleasesFeedAtom)
 | 
								m.Get(".atom", feedEnabled, repo.ReleasesFeedAtom)
 | 
				
			||||||
		}, func(ctx *context.Context) {
 | 
							}, ctxDataSet("EnableFeed", setting.Other.EnableFeed),
 | 
				
			||||||
			ctx.Data["EnableFeed"] = setting.Other.EnableFeed
 | 
								repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag, true))
 | 
				
			||||||
		}, repo.MustBeNotEmpty, reqRepoReleaseReader, context.RepoRefByType(context.RepoRefTag, true))
 | 
					 | 
				
			||||||
		m.Get("/releases/attachments/{uuid}", repo.GetAttachment, repo.MustBeNotEmpty, reqRepoReleaseReader)
 | 
							m.Get("/releases/attachments/{uuid}", repo.GetAttachment, repo.MustBeNotEmpty, reqRepoReleaseReader)
 | 
				
			||||||
		m.Group("/releases", func() {
 | 
							m.Group("/releases", func() {
 | 
				
			||||||
			m.Get("/new", repo.NewRelease)
 | 
								m.Get("/new", repo.NewRelease)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,7 +236,6 @@ func VerifyAuthWithOptionsAPI(options *VerifyOptions) func(ctx *context.APIConte
 | 
				
			|||||||
				})
 | 
									})
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ctx.Data["PageIsAdmin"] = true
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin runners")}}
 | 
					{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin actions")}}
 | 
				
			||||||
	<div class="admin-setting-content">
 | 
						<div class="admin-setting-content">
 | 
				
			||||||
 | 
						{{if eq .PageType "runners"}}
 | 
				
			||||||
		{{template "shared/actions/runner_list" .}}
 | 
							{{template "shared/actions/runner_list" .}}
 | 
				
			||||||
 | 
						{{end}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
{{template "admin/layout_footer" .}}
 | 
					{{template "admin/layout_footer" .}}
 | 
				
			||||||
@@ -35,9 +35,14 @@
 | 
				
			|||||||
			</a>
 | 
								</a>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{if .EnableActions}}
 | 
							{{if .EnableActions}}
 | 
				
			||||||
		<a class="{{if .PageIsAdminRunners}}active {{end}}item" href="{{AppSubUrl}}/admin/runners">
 | 
							<div class="item">
 | 
				
			||||||
			{{.locale.Tr "actions.runners"}}
 | 
								{{.locale.Tr "actions.actions"}}
 | 
				
			||||||
		</a>
 | 
								<div class="menu">
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsRunners}}active {{end}}item" href="{{AppSubUrl}}/admin/actions/runners">
 | 
				
			||||||
 | 
										{{.locale.Tr "actions.runners"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		<a class="{{if .PageIsAdminConfig}}active {{end}}item" href="{{AppSubUrl}}/admin/config">
 | 
							<a class="{{if .PageIsAdminConfig}}active {{end}}item" href="{{AppSubUrl}}/admin/config">
 | 
				
			||||||
			{{.locale.Tr "admin.config"}}
 | 
								{{.locale.Tr "admin.config"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,9 @@
 | 
				
			|||||||
{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings runners")}}
 | 
					{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings actions")}}
 | 
				
			||||||
	<div class="org-setting-content">
 | 
						<div class="org-setting-content">
 | 
				
			||||||
 | 
						{{if eq .PageType "runners"}}
 | 
				
			||||||
		{{template "shared/actions/runner_list" .}}
 | 
							{{template "shared/actions/runner_list" .}}
 | 
				
			||||||
 | 
						{{else if eq .PageType "secrets"}}
 | 
				
			||||||
 | 
							{{template "shared/secrets/add_list" .}}
 | 
				
			||||||
 | 
						{{end}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
{{template "org/settings/layout_footer" .}}
 | 
					{{template "org/settings/layout_footer" .}}
 | 
				
			||||||
@@ -12,9 +12,6 @@
 | 
				
			|||||||
		<a class="{{if .PageIsOrgSettingsLabels}}active {{end}}item" href="{{.OrgLink}}/settings/labels">
 | 
							<a class="{{if .PageIsOrgSettingsLabels}}active {{end}}item" href="{{.OrgLink}}/settings/labels">
 | 
				
			||||||
			{{.locale.Tr "repo.labels"}}
 | 
								{{.locale.Tr "repo.labels"}}
 | 
				
			||||||
		</a>
 | 
							</a>
 | 
				
			||||||
		<a class="{{if .PageIsOrgSettingsSecrets}}active {{end}}item" href="{{.OrgLink}}/settings/secrets">
 | 
					 | 
				
			||||||
			{{.locale.Tr "secrets.secrets"}}
 | 
					 | 
				
			||||||
		</a>
 | 
					 | 
				
			||||||
		{{if .EnableOAuth2}}
 | 
							{{if .EnableOAuth2}}
 | 
				
			||||||
		<a class="{{if .PageIsSettingsApplications}}active {{end}}item" href="{{.OrgLink}}/settings/applications">
 | 
							<a class="{{if .PageIsSettingsApplications}}active {{end}}item" href="{{.OrgLink}}/settings/applications">
 | 
				
			||||||
			{{.locale.Tr "settings.applications"}}
 | 
								{{.locale.Tr "settings.applications"}}
 | 
				
			||||||
@@ -26,9 +23,17 @@
 | 
				
			|||||||
		</a>
 | 
							</a>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{if .EnableActions}}
 | 
							{{if .EnableActions}}
 | 
				
			||||||
		<a class="{{if .PageIsOrgSettingsRunners}}active {{end}}item" href="{{.OrgLink}}/settings/runners">
 | 
							<div class="item">
 | 
				
			||||||
			{{.locale.Tr "actions.runners"}}
 | 
								{{.locale.Tr "actions.actions"}}
 | 
				
			||||||
		</a>
 | 
								<div class="menu">
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsRunners}}active {{end}}item" href="{{.OrgLink}}/settings/actions/runners">
 | 
				
			||||||
 | 
										{{.locale.Tr "actions.runners"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsSecrets}}active {{end}}item" href="{{.OrgLink}}/settings/actions/secrets">
 | 
				
			||||||
 | 
										{{.locale.Tr "secrets.secrets"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		<a class="{{if .PageIsSettingsDelete}}active {{end}}item" href="{{.OrgLink}}/settings/delete">
 | 
							<a class="{{if .PageIsSettingsDelete}}active {{end}}item" href="{{.OrgLink}}/settings/delete">
 | 
				
			||||||
			{{.locale.Tr "org.settings.delete"}}
 | 
								{{.locale.Tr "org.settings.delete"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings secrets")}}
 | 
					 | 
				
			||||||
			<div class="org-setting-content">
 | 
					 | 
				
			||||||
				{{template "shared/secrets/add_list" .}}
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
{{template "org/settings/layout_footer" .}}
 | 
					 | 
				
			||||||
@@ -237,7 +237,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				{{if .Permission.IsAdmin}}
 | 
									{{if .Permission.IsAdmin}}
 | 
				
			||||||
					<div class="right menu">
 | 
										<div class="right menu">
 | 
				
			||||||
						<a class="{{if .PageIsSettings}}active {{end}}item" href="{{.RepoLink}}/settings">
 | 
											<a class="{{if .PageIsRepoSettings}}active {{end}}item" href="{{.RepoLink}}/settings">
 | 
				
			||||||
							{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
 | 
												{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
 | 
				
			||||||
						</a>
 | 
											</a>
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
@@ -246,7 +246,7 @@
 | 
				
			|||||||
		{{else if .Permission.IsAdmin}}
 | 
							{{else if .Permission.IsAdmin}}
 | 
				
			||||||
			<div class="ui tabular stackable menu navbar">
 | 
								<div class="ui tabular stackable menu navbar">
 | 
				
			||||||
				<div class="right menu">
 | 
									<div class="right menu">
 | 
				
			||||||
					<a class="{{if .PageIsSettings}}active {{end}}item" href="{{.RepoLink}}/settings">
 | 
										<a class="{{if .PageIsRepoSettings}}active {{end}}item" href="{{.RepoLink}}/settings">
 | 
				
			||||||
						{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
 | 
											{{svg "octicon-tools"}} {{.locale.Tr "repo.settings"}}
 | 
				
			||||||
					</a>
 | 
										</a>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								templates/repo/settings/actions.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								templates/repo/settings/actions.tmpl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings actions")}}
 | 
				
			||||||
 | 
						<div class="repo-setting-content">
 | 
				
			||||||
 | 
							{{if eq .PageType "runners"}}
 | 
				
			||||||
 | 
								{{template "shared/actions/runner_list" .}}
 | 
				
			||||||
 | 
							{{else if eq .PageType "secrets"}}
 | 
				
			||||||
 | 
								{{template "shared/secrets/add_list" .}}
 | 
				
			||||||
 | 
							{{end}}
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					{{template "repo/settings/layout_footer" .}}
 | 
				
			||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
				<li {{if .PageIsSettingsGitHooks}}class="current"{{end}}><a href="{{.RepoLink}}/settings/hooks/git">{{.locale.Tr "repo.settings.githooks"}}</a></li>
 | 
									<li {{if .PageIsSettingsGitHooks}}class="current"{{end}}><a href="{{.RepoLink}}/settings/hooks/git">{{.locale.Tr "repo.settings.githooks"}}</a></li>
 | 
				
			||||||
			{{end}}
 | 
								{{end}}
 | 
				
			||||||
			<li {{if .PageIsSettingsKeys}}class="current"{{end}}><a href="{{.RepoLink}}/settings/keys">{{.locale.Tr "repo.settings.deploy_keys"}}</a></li>
 | 
								<li {{if .PageIsSettingsKeys}}class="current"{{end}}><a href="{{.RepoLink}}/settings/keys">{{.locale.Tr "repo.settings.deploy_keys"}}</a></li>
 | 
				
			||||||
			<li {{if .PageIsSettingsSecrets}}class="current"{{end}}><a href="{{.RepoLink}}/settings/secrets">{{.locale.Tr "secrets.secrets"}}</a></li>
 | 
								<li {{if .PageIsSharedSettingsSecrets}}class="current"{{end}}><a href="{{.RepoLink}}/settings/secrets">{{.locale.Tr "secrets.secrets"}}</a></li>
 | 
				
			||||||
		</ul>
 | 
							</ul>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,18 +28,23 @@
 | 
				
			|||||||
		<a class="{{if .PageIsSettingsKeys}}active {{end}}item" href="{{.RepoLink}}/settings/keys">
 | 
							<a class="{{if .PageIsSettingsKeys}}active {{end}}item" href="{{.RepoLink}}/settings/keys">
 | 
				
			||||||
			{{.locale.Tr "repo.settings.deploy_keys"}}
 | 
								{{.locale.Tr "repo.settings.deploy_keys"}}
 | 
				
			||||||
		</a>
 | 
							</a>
 | 
				
			||||||
		<a class="{{if .PageIsSettingsSecrets}}active {{end}}item" href="{{.RepoLink}}/settings/secrets">
 | 
					 | 
				
			||||||
			{{.locale.Tr "secrets.secrets"}}
 | 
					 | 
				
			||||||
		</a>
 | 
					 | 
				
			||||||
		{{if .LFSStartServer}}
 | 
							{{if .LFSStartServer}}
 | 
				
			||||||
			<a class="{{if .PageIsSettingsLFS}}active {{end}}item" href="{{.RepoLink}}/settings/lfs">
 | 
								<a class="{{if .PageIsSettingsLFS}}active {{end}}item" href="{{.RepoLink}}/settings/lfs">
 | 
				
			||||||
				{{.locale.Tr "repo.settings.lfs"}}
 | 
									{{.locale.Tr "repo.settings.lfs"}}
 | 
				
			||||||
			</a>
 | 
								</a>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
		{{if and .EnableActions (not .UnitActionsGlobalDisabled) (.Permission.CanRead $.UnitTypeActions)}}
 | 
							{{if and .EnableActions (not .UnitActionsGlobalDisabled) (.Permission.CanRead $.UnitTypeActions)}}
 | 
				
			||||||
			<a class="{{if .PageIsSettingsRunners}}active {{end}}item" href="{{.RepoLink}}/settings/runners">
 | 
							<div class="item">
 | 
				
			||||||
				{{.locale.Tr "actions.runners"}}
 | 
								{{.locale.Tr "actions.actions"}}
 | 
				
			||||||
			</a>
 | 
								<div class="menu">
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsRunners}}active {{end}}item" href="{{.RepoLink}}/settings/actions/runners">
 | 
				
			||||||
 | 
										{{.locale.Tr "actions.runners"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsSecrets}}active {{end}}item" href="{{.RepoLink}}/settings/actions/secrets">
 | 
				
			||||||
 | 
										{{.locale.Tr "secrets.secrets"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
		{{end}}
 | 
							{{end}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings runners")}}
 | 
					 | 
				
			||||||
	<div class="repo-setting-content">
 | 
					 | 
				
			||||||
		{{template "shared/actions/runner_list" .}}
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
{{template "repo/settings/layout_footer" .}}
 | 
					 | 
				
			||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
<h4 class="ui top attached header">
 | 
					<h4 class="ui top attached header">
 | 
				
			||||||
	{{.locale.Tr "secrets.secrets"}}
 | 
						{{.locale.Tr "secrets.management"}}
 | 
				
			||||||
	<div class="ui right">
 | 
						<div class="ui right">
 | 
				
			||||||
		<button class="ui primary tiny show-panel button" data-panel="#add-secret-panel">{{.locale.Tr "secrets.creation"}}</button>
 | 
							<button class="ui primary tiny show-panel button" data-panel="#add-secret-panel">{{.locale.Tr "secrets.creation"}}</button>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings secrets")}}
 | 
					{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings actions")}}
 | 
				
			||||||
	<div class="user-setting-content">
 | 
						<div class="user-setting-content">
 | 
				
			||||||
 | 
						{{if eq .PageType "secrets"}}
 | 
				
			||||||
		{{template "shared/secrets/add_list" .}}
 | 
							{{template "shared/secrets/add_list" .}}
 | 
				
			||||||
 | 
						{{end}}
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{template "user/settings/layout_footer" .}}
 | 
					{{template "user/settings/layout_footer" .}}
 | 
				
			||||||
@@ -19,9 +19,16 @@
 | 
				
			|||||||
		<a class="{{if .PageIsSettingsKeys}}active {{end}}item" href="{{AppSubUrl}}/user/settings/keys">
 | 
							<a class="{{if .PageIsSettingsKeys}}active {{end}}item" href="{{AppSubUrl}}/user/settings/keys">
 | 
				
			||||||
			{{.locale.Tr "settings.ssh_gpg_keys"}}
 | 
								{{.locale.Tr "settings.ssh_gpg_keys"}}
 | 
				
			||||||
		</a>
 | 
							</a>
 | 
				
			||||||
		<a class="{{if .PageIsSettingsSecrets}}active {{end}}item" href="{{AppSubUrl}}/user/settings/secrets">
 | 
							{{if .EnableActions}}
 | 
				
			||||||
			{{.locale.Tr "secrets.secrets"}}
 | 
							<div class="item">
 | 
				
			||||||
		</a>
 | 
								{{.locale.Tr "actions.actions"}}
 | 
				
			||||||
 | 
								<div class="menu">
 | 
				
			||||||
 | 
									<a class="{{if .PageIsSharedSettingsSecrets}}active {{end}}item" href="{{AppSubUrl}}/user/settings/actions/secrets">
 | 
				
			||||||
 | 
										{{.locale.Tr "secrets.secrets"}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							{{end}}
 | 
				
			||||||
		{{if .EnablePackages}}
 | 
							{{if .EnablePackages}}
 | 
				
			||||||
		<a class="{{if .PageIsSettingsPackages}}active {{end}}item" href="{{AppSubUrl}}/user/settings/packages">
 | 
							<a class="{{if .PageIsSettingsPackages}}active {{end}}item" href="{{AppSubUrl}}/user/settings/packages">
 | 
				
			||||||
			{{.locale.Tr "packages.title"}}
 | 
								{{.locale.Tr "packages.title"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -830,6 +830,21 @@ a.label,
 | 
				
			|||||||
  color: var(--color-text-light-3);
 | 
					  color: var(--color-text-light-3);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* sub menu of vertical menu */
 | 
				
			||||||
 | 
					.ui.vertical.menu .item .menu .item {
 | 
				
			||||||
 | 
					  color: var(--color-text-light-2);
 | 
				
			||||||
 | 
					  text-indent: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ui.vertical.menu .item .menu .item:hover,
 | 
				
			||||||
 | 
					.ui.vertical.menu .item .menu a.item:hover {
 | 
				
			||||||
 | 
					  color: var(--color-text-light-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ui.vertical.menu .item .menu .active.item {
 | 
				
			||||||
 | 
					  color: var(--color-text);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* slightly more contrast for filters on issue list */
 | 
					/* slightly more contrast for filters on issue list */
 | 
				
			||||||
.ui.ui.menu .dropdown.item.disabled {
 | 
					.ui.ui.menu .dropdown.item.disabled {
 | 
				
			||||||
  color: var(--color-text-light-2);
 | 
					  color: var(--color-text-light-2);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2444,7 +2444,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.settings.webhooks .list > .item:not(:first-child),
 | 
					.settings.webhooks .list > .item:not(:first-child),
 | 
				
			||||||
.settings.githooks .list > .item:not(:first-child),
 | 
					.settings.githooks .list > .item:not(:first-child),
 | 
				
			||||||
.settings.runners .list > .item:not(:first-child) {
 | 
					.settings.actions .list > .item:not(:first-child) {
 | 
				
			||||||
  padding: 0.25rem 1rem;
 | 
					  padding: 0.25rem 1rem;
 | 
				
			||||||
  margin: 12px -1rem -1rem;
 | 
					  margin: 12px -1rem -1rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user