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

     1  // Copyright 2022 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/secrets"
    14  	shared_user "code.gitea.io/gitea/routers/web/shared/user"
    15  )
    16  
    17  const (
    18  	// TODO: Separate secrets from runners when layout is ready
    19  	tplRepoSecrets base.TplName = "repo/settings/actions"
    20  	tplOrgSecrets  base.TplName = "org/settings/actions"
    21  	tplUserSecrets base.TplName = "user/settings/actions"
    22  )
    23  
    24  type secretsCtx struct {
    25  	OwnerID         int64
    26  	RepoID          int64
    27  	IsRepo          bool
    28  	IsOrg           bool
    29  	IsUser          bool
    30  	SecretsTemplate base.TplName
    31  	RedirectLink    string
    32  }
    33  
    34  func getSecretsCtx(ctx *context.Context) (*secretsCtx, error) {
    35  	if ctx.Data["PageIsRepoSettings"] == true {
    36  		return &secretsCtx{
    37  			OwnerID:         0,
    38  			RepoID:          ctx.Repo.Repository.ID,
    39  			IsRepo:          true,
    40  			SecretsTemplate: tplRepoSecrets,
    41  			RedirectLink:    ctx.Repo.RepoLink + "/settings/actions/secrets",
    42  		}, nil
    43  	}
    44  
    45  	if ctx.Data["PageIsOrgSettings"] == true {
    46  		err := shared_user.LoadHeaderCount(ctx)
    47  		if err != nil {
    48  			ctx.ServerError("LoadHeaderCount", err)
    49  			return nil, nil
    50  		}
    51  		return &secretsCtx{
    52  			OwnerID:         ctx.ContextUser.ID,
    53  			RepoID:          0,
    54  			IsOrg:           true,
    55  			SecretsTemplate: tplOrgSecrets,
    56  			RedirectLink:    ctx.Org.OrgLink + "/settings/actions/secrets",
    57  		}, nil
    58  	}
    59  
    60  	if ctx.Data["PageIsUserSettings"] == true {
    61  		return &secretsCtx{
    62  			OwnerID:         ctx.Doer.ID,
    63  			RepoID:          0,
    64  			IsUser:          true,
    65  			SecretsTemplate: tplUserSecrets,
    66  			RedirectLink:    setting.AppSubURL + "/user/settings/actions/secrets",
    67  		}, nil
    68  	}
    69  
    70  	return nil, errors.New("unable to set Secrets context")
    71  }
    72  
    73  func Secrets(ctx *context.Context) {
    74  	ctx.Data["Title"] = ctx.Tr("actions.actions")
    75  	ctx.Data["PageType"] = "secrets"
    76  	ctx.Data["PageIsSharedSettingsSecrets"] = true
    77  
    78  	sCtx, err := getSecretsCtx(ctx)
    79  	if err != nil {
    80  		ctx.ServerError("getSecretsCtx", err)
    81  		return
    82  	}
    83  
    84  	if sCtx.IsRepo {
    85  		ctx.Data["DisableSSH"] = setting.SSH.Disabled
    86  	}
    87  
    88  	shared.SetSecretsContext(ctx, sCtx.OwnerID, sCtx.RepoID)
    89  	if ctx.Written() {
    90  		return
    91  	}
    92  	ctx.HTML(http.StatusOK, sCtx.SecretsTemplate)
    93  }
    94  
    95  func SecretsPost(ctx *context.Context) {
    96  	sCtx, err := getSecretsCtx(ctx)
    97  	if err != nil {
    98  		ctx.ServerError("getSecretsCtx", err)
    99  		return
   100  	}
   101  
   102  	if ctx.HasError() {
   103  		ctx.JSONError(ctx.GetErrMsg())
   104  		return
   105  	}
   106  
   107  	shared.PerformSecretsPost(
   108  		ctx,
   109  		sCtx.OwnerID,
   110  		sCtx.RepoID,
   111  		sCtx.RedirectLink,
   112  	)
   113  }
   114  
   115  func SecretsDelete(ctx *context.Context) {
   116  	sCtx, err := getSecretsCtx(ctx)
   117  	if err != nil {
   118  		ctx.ServerError("getSecretsCtx", err)
   119  		return
   120  	}
   121  	shared.PerformSecretsDelete(
   122  		ctx,
   123  		sCtx.OwnerID,
   124  		sCtx.RepoID,
   125  		sCtx.RedirectLink,
   126  	)
   127  }