github.com/jcarley/cli@v0.0.0-20180201210820-966d90434c30/commands/keys/list.go (about)

     1  package keys
     2  
     3  import (
     4  	"crypto/sha256"
     5  	"encoding/base64"
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/Sirupsen/logrus"
    10  	"github.com/daticahealth/cli/commands/deploykeys"
    11  	"github.com/daticahealth/cli/models"
    12  	"github.com/olekukonko/tablewriter"
    13  )
    14  
    15  func CmdList(ik IKeys, id deploykeys.IDeployKeys) error {
    16  	keys, err := ik.List()
    17  	if err != nil {
    18  		return err
    19  	}
    20  
    21  	if keys == nil || len(*keys) == 0 {
    22  		logrus.Println("No keys found")
    23  		return nil
    24  	}
    25  
    26  	invalidKeys := map[string]string{}
    27  
    28  	data := [][]string{{"NAME", "FINGERPRINT"}}
    29  	for _, key := range *keys {
    30  		s, err := id.ParsePublicKey([]byte(key.Key))
    31  		if err != nil {
    32  			invalidKeys[key.Name] = err.Error()
    33  			continue
    34  		}
    35  		h := sha256.New()
    36  		h.Write(s.Marshal())
    37  		fingerprint := base64.StdEncoding.EncodeToString(h.Sum(nil))
    38  		data = append(data, []string{key.Name, fmt.Sprintf("SHA256:%s", strings.TrimRight(fingerprint, "="))})
    39  	}
    40  
    41  	table := tablewriter.NewWriter(logrus.StandardLogger().Out)
    42  	table.SetBorder(false)
    43  	table.SetRowLine(false)
    44  	table.SetCenterSeparator("")
    45  	table.SetColumnSeparator("")
    46  	table.SetRowSeparator("")
    47  	table.AppendBulk(data)
    48  	table.Render()
    49  
    50  	if len(invalidKeys) > 0 {
    51  		logrus.Println("\nInvalid Keys:")
    52  		for keyName, reason := range invalidKeys {
    53  			logrus.Printf("%s: %s", keyName, reason)
    54  		}
    55  	}
    56  	return nil
    57  }
    58  
    59  func (k *SKeys) List() (*[]models.UserKey, error) {
    60  	headers := k.Settings.HTTPManager.GetHeaders(k.Settings.SessionToken, k.Settings.Version, k.Settings.Pod, k.Settings.UsersID)
    61  	resp, status, err := k.Settings.HTTPManager.Get(nil, fmt.Sprintf("%s%s/keys", k.Settings.AuthHost, k.Settings.AuthHostVersion), headers)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	keys := []models.UserKey{}
    67  	err = k.Settings.HTTPManager.ConvertResp(resp, status, &keys)
    68  	return &keys, err
    69  }