code.gitea.io/gitea@v1.21.7/routers/web/repo/setting/variables.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package setting
     5  
     6  import (
     7  	"errors"
     8  	"net/http"
     9  
    10  	"code.gitea.io/gitea/modules/base"
    11  	"code.gitea.io/gitea/modules/context"
    12  	"code.gitea.io/gitea/modules/setting"
    13  	shared "code.gitea.io/gitea/routers/web/shared/actions"
    14  	shared_user "code.gitea.io/gitea/routers/web/shared/user"
    15  )
    16  
    17  const (
    18  	tplRepoVariables base.TplName = "repo/settings/actions"
    19  	tplOrgVariables  base.TplName = "org/settings/actions"
    20  	tplUserVariables base.TplName = "user/settings/actions"
    21  )
    22  
    23  type variablesCtx struct {
    24  	OwnerID           int64
    25  	RepoID            int64
    26  	IsRepo            bool
    27  	IsOrg             bool
    28  	IsUser            bool
    29  	VariablesTemplate base.TplName
    30  	RedirectLink      string
    31  }
    32  
    33  func getVariablesCtx(ctx *context.Context) (*variablesCtx, error) {
    34  	if ctx.Data["PageIsRepoSettings"] == true {
    35  		return &variablesCtx{
    36  			RepoID:            ctx.Repo.Repository.ID,
    37  			IsRepo:            true,
    38  			VariablesTemplate: tplRepoVariables,
    39  			RedirectLink:      ctx.Repo.RepoLink + "/settings/actions/variables",
    40  		}, nil
    41  	}
    42  
    43  	if ctx.Data["PageIsOrgSettings"] == true {
    44  		err := shared_user.LoadHeaderCount(ctx)
    45  		if err != nil {
    46  			ctx.ServerError("LoadHeaderCount", err)
    47  			return nil, nil
    48  		}
    49  		return &variablesCtx{
    50  			OwnerID:           ctx.ContextUser.ID,
    51  			IsOrg:             true,
    52  			VariablesTemplate: tplOrgVariables,
    53  			RedirectLink:      ctx.Org.OrgLink + "/settings/actions/variables",
    54  		}, nil
    55  	}
    56  
    57  	if ctx.Data["PageIsUserSettings"] == true {
    58  		return &variablesCtx{
    59  			OwnerID:           ctx.Doer.ID,
    60  			IsUser:            true,
    61  			VariablesTemplate: tplUserVariables,
    62  			RedirectLink:      setting.AppSubURL + "/user/settings/actions/variables",
    63  		}, nil
    64  	}
    65  
    66  	return nil, errors.New("unable to set Variables context")
    67  }
    68  
    69  func Variables(ctx *context.Context) {
    70  	ctx.Data["Title"] = ctx.Tr("actions.variables")
    71  	ctx.Data["PageType"] = "variables"
    72  	ctx.Data["PageIsSharedSettingsVariables"] = true
    73  
    74  	vCtx, err := getVariablesCtx(ctx)
    75  	if err != nil {
    76  		ctx.ServerError("getVariablesCtx", err)
    77  		return
    78  	}
    79  
    80  	shared.SetVariablesContext(ctx, vCtx.OwnerID, vCtx.RepoID)
    81  	if ctx.Written() {
    82  		return
    83  	}
    84  
    85  	ctx.HTML(http.StatusOK, vCtx.VariablesTemplate)
    86  }
    87  
    88  func VariableCreate(ctx *context.Context) {
    89  	vCtx, err := getVariablesCtx(ctx)
    90  	if err != nil {
    91  		ctx.ServerError("getVariablesCtx", err)
    92  		return
    93  	}
    94  
    95  	if ctx.HasError() { // form binding validation error
    96  		ctx.JSONError(ctx.GetErrMsg())
    97  		return
    98  	}
    99  
   100  	shared.CreateVariable(ctx, vCtx.OwnerID, vCtx.RepoID, vCtx.RedirectLink)
   101  }
   102  
   103  func VariableUpdate(ctx *context.Context) {
   104  	vCtx, err := getVariablesCtx(ctx)
   105  	if err != nil {
   106  		ctx.ServerError("getVariablesCtx", err)
   107  		return
   108  	}
   109  
   110  	if ctx.HasError() { // form binding validation error
   111  		ctx.JSONError(ctx.GetErrMsg())
   112  		return
   113  	}
   114  
   115  	shared.UpdateVariable(ctx, vCtx.RedirectLink)
   116  }
   117  
   118  func VariableDelete(ctx *context.Context) {
   119  	vCtx, err := getVariablesCtx(ctx)
   120  	if err != nil {
   121  		ctx.ServerError("getVariablesCtx", err)
   122  		return
   123  	}
   124  	shared.DeleteVariable(ctx, vCtx.RedirectLink)
   125  }