mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.4 KiB
140 lines
3.4 KiB
// Copyright 2023 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/actions" |
|
shared_user "code.gitea.io/gitea/routers/web/shared/user" |
|
) |
|
|
|
const ( |
|
tplRepoVariables base.TplName = "repo/settings/actions" |
|
tplOrgVariables base.TplName = "org/settings/actions" |
|
tplUserVariables base.TplName = "user/settings/actions" |
|
tplAdminVariables base.TplName = "admin/actions" |
|
) |
|
|
|
type variablesCtx struct { |
|
OwnerID int64 |
|
RepoID int64 |
|
IsRepo bool |
|
IsOrg bool |
|
IsUser bool |
|
IsGlobal bool |
|
VariablesTemplate base.TplName |
|
RedirectLink string |
|
} |
|
|
|
func getVariablesCtx(ctx *context.Context) (*variablesCtx, error) { |
|
if ctx.Data["PageIsRepoSettings"] == true { |
|
return &variablesCtx{ |
|
OwnerID: 0, |
|
RepoID: ctx.Repo.Repository.ID, |
|
IsRepo: true, |
|
VariablesTemplate: tplRepoVariables, |
|
RedirectLink: ctx.Repo.RepoLink + "/settings/actions/variables", |
|
}, nil |
|
} |
|
|
|
if ctx.Data["PageIsOrgSettings"] == true { |
|
err := shared_user.LoadHeaderCount(ctx) |
|
if err != nil { |
|
ctx.ServerError("LoadHeaderCount", err) |
|
return nil, nil |
|
} |
|
return &variablesCtx{ |
|
OwnerID: ctx.ContextUser.ID, |
|
RepoID: 0, |
|
IsOrg: true, |
|
VariablesTemplate: tplOrgVariables, |
|
RedirectLink: ctx.Org.OrgLink + "/settings/actions/variables", |
|
}, nil |
|
} |
|
|
|
if ctx.Data["PageIsUserSettings"] == true { |
|
return &variablesCtx{ |
|
OwnerID: ctx.Doer.ID, |
|
RepoID: 0, |
|
IsUser: true, |
|
VariablesTemplate: tplUserVariables, |
|
RedirectLink: setting.AppSubURL + "/user/settings/actions/variables", |
|
}, nil |
|
} |
|
|
|
if ctx.Data["PageIsAdmin"] == true { |
|
return &variablesCtx{ |
|
OwnerID: 0, |
|
RepoID: 0, |
|
IsGlobal: true, |
|
VariablesTemplate: tplAdminVariables, |
|
RedirectLink: setting.AppSubURL + "/admin/actions/variables", |
|
}, nil |
|
} |
|
|
|
return nil, errors.New("unable to set Variables context") |
|
} |
|
|
|
func Variables(ctx *context.Context) { |
|
ctx.Data["Title"] = ctx.Tr("actions.variables") |
|
ctx.Data["PageType"] = "variables" |
|
ctx.Data["PageIsSharedSettingsVariables"] = true |
|
|
|
vCtx, err := getVariablesCtx(ctx) |
|
if err != nil { |
|
ctx.ServerError("getVariablesCtx", err) |
|
return |
|
} |
|
|
|
shared.SetVariablesContext(ctx, vCtx.OwnerID, vCtx.RepoID) |
|
if ctx.Written() { |
|
return |
|
} |
|
|
|
ctx.HTML(http.StatusOK, vCtx.VariablesTemplate) |
|
} |
|
|
|
func VariableCreate(ctx *context.Context) { |
|
vCtx, err := getVariablesCtx(ctx) |
|
if err != nil { |
|
ctx.ServerError("getVariablesCtx", err) |
|
return |
|
} |
|
|
|
if ctx.HasError() { // form binding validation error |
|
ctx.JSONError(ctx.GetErrMsg()) |
|
return |
|
} |
|
|
|
shared.CreateVariable(ctx, vCtx.OwnerID, vCtx.RepoID, vCtx.RedirectLink) |
|
} |
|
|
|
func VariableUpdate(ctx *context.Context) { |
|
vCtx, err := getVariablesCtx(ctx) |
|
if err != nil { |
|
ctx.ServerError("getVariablesCtx", err) |
|
return |
|
} |
|
|
|
if ctx.HasError() { // form binding validation error |
|
ctx.JSONError(ctx.GetErrMsg()) |
|
return |
|
} |
|
|
|
shared.UpdateVariable(ctx, vCtx.RedirectLink) |
|
} |
|
|
|
func VariableDelete(ctx *context.Context) { |
|
vCtx, err := getVariablesCtx(ctx) |
|
if err != nil { |
|
ctx.ServerError("getVariablesCtx", err) |
|
return |
|
} |
|
shared.DeleteVariable(ctx, vCtx.RedirectLink) |
|
}
|
|
|