diff options
Diffstat (limited to 'models/publickey.go')
-rw-r--r-- | models/publickey.go | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/models/publickey.go b/models/publickey.go index 8bb924e8..762d7333 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -33,6 +33,7 @@ const ( var ( ErrKeyAlreadyExist = errors.New("Public key already exist") ErrKeyNotExist = errors.New("Public key does not exist") + ErrKeyUnableVerify = errors.New("Unable to verify public key") ) var sshOpLocker = sync.Mutex{} @@ -108,7 +109,7 @@ var ( // CheckPublicKeyString checks if the given public key string is recognized by SSH. func CheckPublicKeyString(content string) (bool, error) { if strings.ContainsAny(content, "\n\r") { - return false, errors.New("Only a single line with a single key please") + return false, errors.New("only a single line with a single key please") } // write the key to a file⦠@@ -126,7 +127,7 @@ func CheckPublicKeyString(content string) (bool, error) { if err != nil { return false, errors.New("ssh-keygen -l -f: " + stderr) } else if len(stdout) < 2 { - return false, errors.New("ssh-keygen returned not enough output to evaluate the key") + return false, errors.New("ssh-keygen returned not enough output to evaluate the key: " + stdout) } // The ssh-keygen in Windows does not print key type, so no need go further. @@ -134,21 +135,22 @@ func CheckPublicKeyString(content string) (bool, error) { return true, nil } + fmt.Println(stdout) sshKeygenOutput := strings.Split(stdout, " ") if len(sshKeygenOutput) < 4 { - return false, errors.New("Not enough fields returned by ssh-keygen -l -f") + return false, ErrKeyUnableVerify } // Check if key type and key size match. - keySize, err := com.StrTo(sshKeygenOutput[0]).Int() - if err != nil { - return false, errors.New("Cannot get key size of the given key") + keySize := com.StrTo(sshKeygenOutput[0]).MustInt() + if keySize == 0 { + return false, errors.New("cannot get key size of the given key") } keyType := strings.TrimSpace(sshKeygenOutput[len(sshKeygenOutput)-1]) if minimumKeySize := MinimumKeySize[keyType]; minimumKeySize == 0 { - return false, errors.New("Sorry, unrecognized public key type") + return false, errors.New("sorry, unrecognized public key type") } else if keySize < minimumKeySize { - return false, fmt.Errorf("The minimum accepted size of a public key %s is %d", keyType, minimumKeySize) + return false, fmt.Errorf("the minimum accepted size of a public key %s is %d", keyType, minimumKeySize) } return true, nil @@ -204,7 +206,7 @@ func AddPublicKey(key *PublicKey) (err error) { if err != nil { return errors.New("ssh-keygen -l -f: " + stderr) } else if len(stdout) < 2 { - return errors.New("Not enough output for calculating fingerprint") + return errors.New("not enough output for calculating fingerprint: " + stdout) } key.Fingerprint = strings.Split(stdout, " ")[1] |