github.com/apptainer/singularity@v3.1.1+incompatible/cmd/internal/cli/verify.go (about)

     1  // Copyright (c) 2017-2019, Sylabs Inc. All rights reserved.
     2  // This software is licensed under a 3-clause BSD license. Please consult the
     3  // LICENSE.md file distributed with the sources of this project regarding your
     4  // rights to use or distribute this software.
     5  
     6  package cli
     7  
     8  import (
     9  	"fmt"
    10  	"os"
    11  
    12  	"github.com/spf13/cobra"
    13  	"github.com/sylabs/singularity/docs"
    14  	"github.com/sylabs/singularity/internal/pkg/sylog"
    15  	"github.com/sylabs/singularity/pkg/signing"
    16  )
    17  
    18  var (
    19  	sifGroupID uint32 // -g groupid specification
    20  	sifDescID  uint32 // -i id specification
    21  )
    22  
    23  func init() {
    24  	VerifyCmd.Flags().SetInterspersed(false)
    25  
    26  	VerifyCmd.Flags().StringVarP(&keyServerURL, "url", "u", defaultKeyServer, "key server URL")
    27  	VerifyCmd.Flags().SetAnnotation("url", "envkey", []string{"URL"})
    28  	VerifyCmd.Flags().Uint32VarP(&sifGroupID, "groupid", "g", 0, "group ID to be verified")
    29  	VerifyCmd.Flags().Uint32VarP(&sifDescID, "id", "i", 0, "descriptor ID to be verified")
    30  	SingularityCmd.AddCommand(VerifyCmd)
    31  }
    32  
    33  // VerifyCmd singularity verify
    34  var VerifyCmd = &cobra.Command{
    35  	DisableFlagsInUseLine: true,
    36  	Args:                  cobra.ExactArgs(1),
    37  	PreRun:                sylabsToken,
    38  
    39  	Run: func(cmd *cobra.Command, args []string) {
    40  		// args[0] contains image path
    41  		fmt.Printf("Verifying image: %s\n", args[0])
    42  		if err := doVerifyCmd(args[0], keyServerURL); err != nil {
    43  			sylog.Errorf("verification failed: %s", err)
    44  			os.Exit(2)
    45  		}
    46  	},
    47  
    48  	Use:     docs.VerifyUse,
    49  	Short:   docs.VerifyShort,
    50  	Long:    docs.VerifyLong,
    51  	Example: docs.VerifyExample,
    52  }
    53  
    54  func doVerifyCmd(cpath, url string) error {
    55  	if sifGroupID != 0 && sifDescID != 0 {
    56  		return fmt.Errorf("only one of -i or -g may be set")
    57  	}
    58  
    59  	var isGroup bool
    60  	var id uint32
    61  	if sifGroupID != 0 {
    62  		isGroup = true
    63  		id = sifGroupID
    64  	} else {
    65  		id = sifDescID
    66  	}
    67  
    68  	return signing.Verify(cpath, url, id, isGroup, authToken, false)
    69  }