Merge pull request #818 from fzerorubigd/master
add a function to rewrite all public keys on admin request
This commit is contained in:
commit
cd6376f093
4 changed files with 38 additions and 17 deletions
|
@ -66,7 +66,7 @@ app_url_helper = This affects HTTP/HTTPS clone URL and somewhere in e-mail.
|
||||||
email_title = E-mail Service Settings (Optional)
|
email_title = E-mail Service Settings (Optional)
|
||||||
smtp_host = SMTP Host
|
smtp_host = SMTP Host
|
||||||
mailer_user = Sender E-mail
|
mailer_user = Sender E-mail
|
||||||
mailer_password = Sender Password
|
mailer_password = Sender Password
|
||||||
notify_title = Notification Settings(Optional)
|
notify_title = Notification Settings(Optional)
|
||||||
register_confirm = Enable Register Confirmation
|
register_confirm = Enable Register Confirmation
|
||||||
mail_notify = Enable Mail Notification
|
mail_notify = Enable Mail Notification
|
||||||
|
@ -514,6 +514,8 @@ dashboard.delete_repo_archives = Delete all repositories archives
|
||||||
dashboard.delete_repo_archives_success = All repositories archives have been deleted successfully.
|
dashboard.delete_repo_archives_success = All repositories archives have been deleted successfully.
|
||||||
dashboard.git_gc_repos = Do garbage collection on repositories
|
dashboard.git_gc_repos = Do garbage collection on repositories
|
||||||
dashboard.git_gc_repos_success = All repositories have done garbage collection successfully.
|
dashboard.git_gc_repos_success = All repositories have done garbage collection successfully.
|
||||||
|
dashboard.resync_all_sshkeys = Do resync .ssh/autorized_key file
|
||||||
|
dashboard.resync_all_sshkeys_success = All keys are synced again.
|
||||||
dashboard.server_uptime = Server Uptime
|
dashboard.server_uptime = Server Uptime
|
||||||
dashboard.current_goroutine = Current Goroutines
|
dashboard.current_goroutine = Current Goroutines
|
||||||
dashboard.current_memory_usage = Current Memory Usage
|
dashboard.current_memory_usage = Current Memory Usage
|
||||||
|
@ -714,16 +716,3 @@ months = %d months %s
|
||||||
years = %d years %s
|
years = %d years %s
|
||||||
raw_seconds = seconds
|
raw_seconds = seconds
|
||||||
raw_minutes = minutes
|
raw_minutes = minutes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@ func CheckPublicKeyString(content string) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// saveAuthorizedKeyFile writes SSH key content to authorized_keys file.
|
// saveAuthorizedKeyFile writes SSH key content to authorized_keys file.
|
||||||
func saveAuthorizedKeyFile(key *PublicKey) error {
|
func saveAuthorizedKeyFile(keys ...*PublicKey) error {
|
||||||
sshOpLocker.Lock()
|
sshOpLocker.Lock()
|
||||||
defer sshOpLocker.Unlock()
|
defer sshOpLocker.Unlock()
|
||||||
|
|
||||||
|
@ -269,8 +269,13 @@ func saveAuthorizedKeyFile(key *PublicKey) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = f.WriteString(key.GetAuthorizedString())
|
for _, key := range keys {
|
||||||
return err
|
_, err = f.WriteString(key.GetAuthorizedString())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddPublicKey adds new public key to database and authorized_keys file.
|
// 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)
|
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...)
|
||||||
|
}
|
||||||
|
|
|
@ -118,6 +118,7 @@ const (
|
||||||
CLEAN_INACTIVATE_USER
|
CLEAN_INACTIVATE_USER
|
||||||
CLEAN_REPO_ARCHIVES
|
CLEAN_REPO_ARCHIVES
|
||||||
GIT_GC_REPOS
|
GIT_GC_REPOS
|
||||||
|
SYNC_SSH_AUTHORIZED_KEY
|
||||||
)
|
)
|
||||||
|
|
||||||
func Dashboard(ctx *middleware.Context) {
|
func Dashboard(ctx *middleware.Context) {
|
||||||
|
@ -144,6 +145,9 @@ func Dashboard(ctx *middleware.Context) {
|
||||||
case GIT_GC_REPOS:
|
case GIT_GC_REPOS:
|
||||||
success = ctx.Tr("admin.dashboard.git_gc_repos_success")
|
success = ctx.Tr("admin.dashboard.git_gc_repos_success")
|
||||||
err = models.GitGcRepos()
|
err = models.GitGcRepos()
|
||||||
|
case SYNC_SSH_AUTHORIZED_KEY:
|
||||||
|
success = ctx.Tr("admin.dashboard.resync_all_sshkeys_success")
|
||||||
|
err = models.RewriteAllPublicKeys()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -48,6 +48,11 @@
|
||||||
<td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
|
<td>{{.i18n.Tr "admin.dashboard.git_gc_repos"}}</td>
|
||||||
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=4">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
|
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=4">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{{.i18n.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
|
||||||
|
<td><i class="fa fa-caret-square-o-right"></i> <a href="{{AppSubUrl}}/admin?op=5">{{.i18n.Tr "admin.dashboard.operation_run"}}</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in a new issue