1
0
Fork 0
forked from forgejo/forgejo

Merge pull request #818 from fzerorubigd/master

add a function to rewrite all public keys on admin request
This commit is contained in:
无闻 2015-02-01 16:56:34 -05:00
commit cd6376f093
4 changed files with 38 additions and 17 deletions

View file

@ -244,7 +244,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()
@ -269,8 +269,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.
@ -422,3 +427,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...)
}