mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +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) | 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> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user