aboutsummaryrefslogtreecommitdiff
path: root/models/publickey.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/publickey.go')
-rw-r--r--models/publickey.go20
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]