56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
| package images
 | |
| 
 | |
| import (
 | |
| 	"os"
 | |
| 
 | |
| 	"github.com/containers/podman/v2/cmd/podman/registry"
 | |
| 	"github.com/containers/podman/v2/pkg/domain/entities"
 | |
| 	"github.com/pkg/errors"
 | |
| 	"github.com/spf13/cobra"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	signDescription = "Create a signature file that can be used later to verify the image."
 | |
| 	signCommand     = &cobra.Command{
 | |
| 		Use:   "sign [flags] IMAGE [IMAGE...]",
 | |
| 		Short: "Sign an image",
 | |
| 		Long:  signDescription,
 | |
| 		RunE:  sign,
 | |
| 		Args:  cobra.MinimumNArgs(1),
 | |
| 		Example: `podman image sign --sign-by mykey imageID
 | |
|   podman image sign --sign-by mykey --directory ./mykeydir imageID`,
 | |
| 	}
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	signOptions entities.SignOptions
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	registry.Commands = append(registry.Commands, registry.CliCommand{
 | |
| 		Mode:    []entities.EngineMode{entities.ABIMode},
 | |
| 		Command: signCommand,
 | |
| 		Parent:  imageCmd,
 | |
| 	})
 | |
| 	flags := signCommand.Flags()
 | |
| 	flags.StringVarP(&signOptions.Directory, "directory", "d", "", "Define an alternate directory to store signatures")
 | |
| 	flags.StringVar(&signOptions.SignBy, "sign-by", "", "Name of the signing key")
 | |
| 	flags.StringVar(&signOptions.CertDir, "cert-dir", "", "`Pathname` of a directory containing TLS certificates and keys")
 | |
| }
 | |
| 
 | |
| func sign(cmd *cobra.Command, args []string) error {
 | |
| 	if signOptions.SignBy == "" {
 | |
| 		return errors.Errorf("please provide an identity")
 | |
| 	}
 | |
| 
 | |
| 	var sigStoreDir string
 | |
| 	if len(signOptions.Directory) > 0 {
 | |
| 		sigStoreDir = signOptions.Directory
 | |
| 		if _, err := os.Stat(sigStoreDir); err != nil {
 | |
| 			return errors.Wrapf(err, "invalid directory %s", sigStoreDir)
 | |
| 		}
 | |
| 	}
 | |
| 	_, err := registry.ImageEngine().Sign(registry.Context(), args, signOptions)
 | |
| 	return err
 | |
| }
 |