| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright 2015 The Gogs Authors. All rights reserved.
- // Copyright 2017 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package git
-
- import (
- "fmt"
- "os"
- "strings"
-
- "code.gitea.io/gitea/modules/git/gitcmd"
- "code.gitea.io/gitea/modules/process"
- )
-
- // LoadPublicKeyContent will load the key from gpg
- func (gpgSettings *GPGSettings) LoadPublicKeyContent() error {
- if gpgSettings.Format == SigningKeyFormatSSH {
- content, err := os.ReadFile(gpgSettings.KeyID)
- if err != nil {
- return fmt.Errorf("unable to read SSH public key file: %s, %w", gpgSettings.KeyID, err)
- }
- gpgSettings.PublicKeyContent = string(content)
- return nil
- }
- content, stderr, err := process.GetManager().Exec(
- "gpg -a --export",
- "gpg", "-a", "--export", gpgSettings.KeyID)
- if err != nil {
- return fmt.Errorf("unable to get default signing key: %s, %s, %w", gpgSettings.KeyID, stderr, err)
- }
- gpgSettings.PublicKeyContent = content
- return nil
- }
-
- // GetDefaultPublicGPGKey will return and cache the default public GPG settings for this repository
- func (repo *Repository) GetDefaultPublicGPGKey(forceUpdate bool) (*GPGSettings, error) {
- if repo.gpgSettings != nil && !forceUpdate {
- return repo.gpgSettings, nil
- }
-
- gpgSettings := &GPGSettings{
- Sign: true,
- }
-
- value, _, _ := gitcmd.NewCommand("config", "--get", "commit.gpgsign").RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path})
- sign, valid := ParseBool(strings.TrimSpace(value))
- if !sign || !valid {
- gpgSettings.Sign = false
- repo.gpgSettings = gpgSettings
- return gpgSettings, nil
- }
-
- signingKey, _, _ := gitcmd.NewCommand("config", "--get", "user.signingkey").RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path})
- gpgSettings.KeyID = strings.TrimSpace(signingKey)
-
- format, _, _ := gitcmd.NewCommand("config", "--default", SigningKeyFormatOpenPGP, "--get", "gpg.format").RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path})
- gpgSettings.Format = strings.TrimSpace(format)
-
- defaultEmail, _, _ := gitcmd.NewCommand("config", "--get", "user.email").RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path})
- gpgSettings.Email = strings.TrimSpace(defaultEmail)
-
- defaultName, _, _ := gitcmd.NewCommand("config", "--get", "user.name").RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path})
- gpgSettings.Name = strings.TrimSpace(defaultName)
-
- if err := gpgSettings.LoadPublicKeyContent(); err != nil {
- return nil, err
- }
- repo.gpgSettings = gpgSettings
- return repo.gpgSettings, nil
- }
|