summaryrefslogtreecommitdiffstats
path: root/routers/web/shared/actions/variables.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/web/shared/actions/variables.go')
-rw-r--r--routers/web/shared/actions/variables.go67
1 files changed, 7 insertions, 60 deletions
diff --git a/routers/web/shared/actions/variables.go b/routers/web/shared/actions/variables.go
index 0f705399c9..79c03e4e8c 100644
--- a/routers/web/shared/actions/variables.go
+++ b/routers/web/shared/actions/variables.go
@@ -4,17 +4,13 @@
package actions
import (
- "errors"
- "regexp"
- "strings"
-
actions_model "code.gitea.io/gitea/models/actions"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/web"
+ actions_service "code.gitea.io/gitea/services/actions"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/forms"
- secret_service "code.gitea.io/gitea/services/secrets"
)
func SetVariablesContext(ctx *context.Context, ownerID, repoID int64) {
@@ -29,41 +25,16 @@ func SetVariablesContext(ctx *context.Context, ownerID, repoID int64) {
ctx.Data["Variables"] = variables
}
-// some regular expression of `variables` and `secrets`
-// reference to:
-// https://docs.github.com/en/actions/learn-github-actions/variables#naming-conventions-for-configuration-variables
-// https://docs.github.com/en/actions/security-guides/encrypted-secrets#naming-your-secrets
-var (
- forbiddenEnvNameCIRx = regexp.MustCompile("(?i)^CI")
-)
-
-func envNameCIRegexMatch(name string) error {
- if forbiddenEnvNameCIRx.MatchString(name) {
- log.Error("Env Name cannot be ci")
- return errors.New("env name cannot be ci")
- }
- return nil
-}
-
func CreateVariable(ctx *context.Context, ownerID, repoID int64, redirectURL string) {
form := web.GetForm(ctx).(*forms.EditVariableForm)
- if err := secret_service.ValidateName(form.Name); err != nil {
- ctx.JSONError(err.Error())
- return
- }
-
- if err := envNameCIRegexMatch(form.Name); err != nil {
- ctx.JSONError(err.Error())
- return
- }
-
- v, err := actions_model.InsertVariable(ctx, ownerID, repoID, form.Name, ReserveLineBreakForTextarea(form.Data))
+ v, err := actions_service.CreateVariable(ctx, ownerID, repoID, form.Name, form.Data)
if err != nil {
- log.Error("InsertVariable error: %v", err)
+ log.Error("CreateVariable: %v", err)
ctx.JSONError(ctx.Tr("actions.variables.creation.failed"))
return
}
+
ctx.Flash.Success(ctx.Tr("actions.variables.creation.success", v.Name))
ctx.JSONRedirect(redirectURL)
}
@@ -72,23 +43,8 @@ func UpdateVariable(ctx *context.Context, redirectURL string) {
id := ctx.ParamsInt64(":variable_id")
form := web.GetForm(ctx).(*forms.EditVariableForm)
- if err := secret_service.ValidateName(form.Name); err != nil {
- ctx.JSONError(err.Error())
- return
- }
-
- if err := envNameCIRegexMatch(form.Name); err != nil {
- ctx.JSONError(err.Error())
- return
- }
-
- ok, err := actions_model.UpdateVariable(ctx, &actions_model.ActionVariable{
- ID: id,
- Name: strings.ToUpper(form.Name),
- Data: ReserveLineBreakForTextarea(form.Data),
- })
- if err != nil || !ok {
- log.Error("UpdateVariable error: %v", err)
+ if ok, err := actions_service.UpdateVariable(ctx, id, form.Name, form.Data); err != nil || !ok {
+ log.Error("UpdateVariable: %v", err)
ctx.JSONError(ctx.Tr("actions.variables.update.failed"))
return
}
@@ -99,7 +55,7 @@ func UpdateVariable(ctx *context.Context, redirectURL string) {
func DeleteVariable(ctx *context.Context, redirectURL string) {
id := ctx.ParamsInt64(":variable_id")
- if _, err := db.DeleteByBean(ctx, &actions_model.ActionVariable{ID: id}); err != nil {
+ if err := actions_service.DeleteVariableByID(ctx, id); err != nil {
log.Error("Delete variable [%d] failed: %v", id, err)
ctx.JSONError(ctx.Tr("actions.variables.deletion.failed"))
return
@@ -107,12 +63,3 @@ func DeleteVariable(ctx *context.Context, redirectURL string) {
ctx.Flash.Success(ctx.Tr("actions.variables.deletion.success"))
ctx.JSONRedirect(redirectURL)
}
-
-func ReserveLineBreakForTextarea(input string) string {
- // Since the content is from a form which is a textarea, the line endings are \r\n.
- // It's a standard behavior of HTML.
- // But we want to store them as \n like what GitHub does.
- // And users are unlikely to really need to keep the \r.
- // Other than this, we should respect the original content, even leading or trailing spaces.
- return strings.ReplaceAll(input, "\r\n", "\n")
-}