diff options
author | fzerorubigd <fzerorubigd@gmail.com> | 2014-12-31 21:37:51 +0330 |
---|---|---|
committer | fzerorubigd <fzerorubigd@gmail.com> | 2015-01-01 02:15:52 +0330 |
commit | 6643647687aa2ba8a41f8f95d404407ff6106d8c (patch) | |
tree | cae1cd7cddd7c5cb94fe5463ba6869a84476e22e /models/publickey.go | |
parent | b6272d180343d8081941eb56f22fed5ffc830a7e (diff) | |
download | gitea-6643647687aa2ba8a41f8f95d404407ff6106d8c.tar.gz gitea-6643647687aa2ba8a41f8f95d404407ff6106d8c.zip |
add afunction to rewrite all public keys on admin request
refs #763
Diffstat (limited to 'models/publickey.go')
-rw-r--r-- | models/publickey.go | 29 |
1 files changed, 26 insertions, 3 deletions
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...) +} |