mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Merge pull request #818 from fzerorubigd/master
add a function to rewrite all public keys on admin request
This commit is contained in:
		| @@ -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) | ||||
| smtp_host = SMTP Host | ||||
| mailer_user = Sender E-mail | ||||
| mailer_password = Sender Password  | ||||
| mailer_password = Sender Password | ||||
| notify_title = Notification Settings(Optional) | ||||
| register_confirm = Enable Register Confirmation | ||||
| 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.git_gc_repos = Do garbage collection on repositories | ||||
| 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.current_goroutine = Current Goroutines | ||||
| dashboard.current_memory_usage = Current Memory Usage | ||||
| @@ -714,16 +716,3 @@ months = %d months %s | ||||
| years = %d years %s | ||||
| raw_seconds = seconds | ||||
| raw_minutes = minutes | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -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...) | ||||
| } | ||||
|   | ||||
| @@ -118,6 +118,7 @@ const ( | ||||
| 	CLEAN_INACTIVATE_USER | ||||
| 	CLEAN_REPO_ARCHIVES | ||||
| 	GIT_GC_REPOS | ||||
| 	SYNC_SSH_AUTHORIZED_KEY | ||||
| ) | ||||
|  | ||||
| func Dashboard(ctx *middleware.Context) { | ||||
| @@ -144,6 +145,9 @@ func Dashboard(ctx *middleware.Context) { | ||||
| 		case GIT_GC_REPOS: | ||||
| 			success = ctx.Tr("admin.dashboard.git_gc_repos_success") | ||||
| 			err = models.GitGcRepos() | ||||
| 		case SYNC_SSH_AUTHORIZED_KEY: | ||||
| 			success = ctx.Tr("admin.dashboard.resync_all_sshkeys_success") | ||||
| 			err = models.RewriteAllPublicKeys() | ||||
| 		} | ||||
|  | ||||
| 		if err != nil { | ||||
|   | ||||
| @@ -48,6 +48,11 @@ | ||||
|                                                 <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> | ||||
|                                             </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> | ||||
|                                     </table> | ||||
|                                 </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user