From 6643647687aa2ba8a41f8f95d404407ff6106d8c Mon Sep 17 00:00:00 2001 From: fzerorubigd Date: Wed, 31 Dec 2014 21:37:51 +0330 Subject: add afunction to rewrite all public keys on admin request refs #763 --- models/publickey.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'models/publickey.go') diff --git a/models/publickey.go b/models/publickey.go index ba15ca4553..fbba691abc 100644 --- a/models/publickey.go +++ b/models/publickey.go @@ -163,7 +163,7 @@ func CheckPublicKeyString(content string) (bool, error) { } // saveAuthorizedKeyFile writes SSH key content to authorized_keys file. -func saveAuthorizedKeyFile(key *PublicKey) error { +func saveAuthorizedKeyFile(keys ...*PublicKey) error { sshOpLocker.Lock() defer sshOpLocker.Unlock() @@ -188,8 +188,13 @@ func saveAuthorizedKeyFile(key *PublicKey) error { } } - _, err = f.WriteString(key.GetAuthorizedString()) - return err + for _, key := range keys { + _, err = f.WriteString(key.GetAuthorizedString()) + if err != nil { + return err + } + } + return nil } // AddPublicKey adds new public key to database and authorized_keys file. @@ -341,3 +346,21 @@ func DeletePublicKey(key *PublicKey) error { } return os.Rename(tmpPath, fpath) } + +// RewriteAllPublicKeys remove any authorized key and re-write all key from database again +func RewriteAllPublicKeys() error { + keys := make([]*PublicKey, 0, 5) + err := x.Find(&keys) + if err != nil { + return err + } + + fpath := filepath.Join(SshPath, "authorized_keys") + if _, err := os.Stat(fpath); os.IsNotExist(err) { + return saveAuthorizedKeyFile(keys...) + } + if err := os.Remove(fpath); err != nil { + return err + } + return saveAuthorizedKeyFile(keys...) +} -- cgit v1.2.3