Skip to content

Commit d20aa86

Browse files
author
root
committed
Add checkbox to regenerate all SSH keys in Gitolite (delete + create)
1 parent bbc8184 commit d20aa86

File tree

6 files changed

+61
-18
lines changed

6 files changed

+61
-18
lines changed

Diff for: app/use_cases/apply_settings.rb

+12-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ class ApplySettings
66

77
attr_reader :resync_projects
88
attr_reader :resync_ssh_keys
9+
attr_reader :regenerate_ssh_keys
910
attr_reader :flush_cache
1011
attr_reader :delete_trash_repo
1112

@@ -14,10 +15,11 @@ def initialize(old_valuehash, valuehash, opts = {})
1415
@old_valuehash = old_valuehash
1516
@valuehash = valuehash
1617

17-
@resync_projects = opts.delete(:resync_projects){ false }
18-
@resync_ssh_keys = opts.delete(:resync_ssh_keys){ false }
19-
@flush_cache = opts.delete(:flush_cache){ false }
20-
@delete_trash_repo = opts.delete(:delete_trash_repo){ [] }
18+
@resync_projects = opts.delete(:resync_projects){ false }
19+
@resync_ssh_keys = opts.delete(:resync_ssh_keys){ false }
20+
@regenerate_ssh_keys = opts.delete(:regenerate_ssh_keys){ false }
21+
@flush_cache = opts.delete(:flush_cache){ false }
22+
@delete_trash_repo = opts.delete(:delete_trash_repo){ [] }
2123
end
2224

2325

@@ -39,6 +41,7 @@ def apply_settings
3941

4042
do_resync_projects
4143
do_resync_ssh_keys
44+
do_regenerate_ssh_keys
4245
do_flush_cache
4346
do_delete_trash_repo
4447
do_enable_readme_creation
@@ -130,6 +133,11 @@ def do_resync_ssh_keys
130133
end
131134

132135

136+
def do_regenerate_ssh_keys
137+
RegenerateSshKeys.new.call if regenerate_ssh_keys
138+
end
139+
140+
133141
def do_flush_cache
134142
## A cache flush has been asked within the interface
135143
GitoliteAccessor.flush_git_cache if flush_cache

Diff for: app/use_cases/regenerate_ssh_keys.rb

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class RegenerateSshKeys
2+
unloadable
3+
4+
attr_reader :bypass_sidekiq
5+
6+
7+
def initialize(opts = {})
8+
@bypass_sidekiq = opts.delete(:bypass_sidekiq){ false }
9+
end
10+
11+
12+
def call
13+
GitolitePublicKey.all.each do |ssh_key|
14+
GitoliteAccessor.destroy_ssh_key(ssh_key, bypass_sidekiq: bypass_sidekiq)
15+
ssh_key.reset_identifiers
16+
GitoliteAccessor.create_ssh_key(ssh_key, bypass_sidekiq: bypass_sidekiq)
17+
end
18+
end
19+
20+
end

Diff for: app/views/settings/redmine_git_hosting/_gitolite_rescue.html.haml

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
= label_tag 'settings[gitolite_resync_all_ssh_keys]', l(:label_resync_all_ssh_keys)
77
= check_box_tag 'settings[gitolite_resync_all_ssh_keys]', 'true', false
88

9+
%p
10+
= label_tag 'settings[gitolite_regenerate_all_ssh_keys]', l(:label_regenerate_all_ssh_keys)
11+
= check_box_tag 'settings[gitolite_regenerate_all_ssh_keys]', 'true', false
12+
913
%p
1014
= label_tag 'settings[gitolite_flush_cache]', l(:label_flush_cache)
1115
= check_box_tag 'settings[gitolite_flush_cache]', 'true', false

Diff for: lib/redmine_git_hosting/config/gitolite_base.rb

+5
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ def gitolite_identifier_prefix
8282
end
8383

8484

85+
def gitolite_identifier_strip_user_id?
86+
RedmineGitHosting::Config.get_setting(:gitolite_identifier_strip_user_id, true)
87+
end
88+
89+
8590
def gitolite_key_subdir
8691
'redmine_git_hosting'
8792
end

Diff for: lib/redmine_git_hosting/patches/setting_patch.rb

+17-13
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ module InstanceMethods
3737

3838
private
3939

40-
@@old_valuehash = ((Setting.plugin_redmine_git_hosting).clone rescue {})
41-
@@resync_projects = false
42-
@@resync_ssh_keys = false
43-
@@flush_cache = false
44-
@@delete_trash_repo = []
40+
@@old_valuehash = ((Setting.plugin_redmine_git_hosting).clone rescue {})
41+
@@resync_projects = false
42+
@@resync_ssh_keys = false
43+
@@regenerate_ssh_keys = false
44+
@@flush_cache = false
45+
@@delete_trash_repo = []
4546

4647

4748
def save_git_hosting_values
@@ -52,6 +53,7 @@ def save_git_hosting_values
5253
## This a force update
5354
@@resync_projects = true if valuehash[:gitolite_resync_all_projects] == 'true'
5455
@@resync_ssh_keys = true if valuehash[:gitolite_resync_all_ssh_keys] == 'true'
56+
@@regenerate_ssh_keys = true if valuehash[:gitolite_regenerate_all_ssh_keys] == 'true'
5557

5658
## Flush Gitolite Cache
5759
@@flush_cache = true if valuehash[:gitolite_flush_cache] == 'true'
@@ -80,20 +82,22 @@ def restore_git_hosting_values
8082

8183
# Build options to pass to RestoreSettings object
8284
opts = {
83-
resync_projects: @@resync_projects,
84-
resync_ssh_keys: @@resync_ssh_keys,
85-
delete_trash_repo: @@delete_trash_repo,
86-
flush_cache: @@flush_cache
85+
resync_projects: @@resync_projects,
86+
resync_ssh_keys: @@resync_ssh_keys,
87+
regenerate_ssh_keys: @@regenerate_ssh_keys,
88+
delete_trash_repo: @@delete_trash_repo,
89+
flush_cache: @@flush_cache
8790
}
8891

8992
# Call RestoreSettings
9093
ApplySettings.new(@@old_valuehash, valuehash, opts).call
9194

9295
# Restore default class settings
93-
@@resync_projects = false
94-
@@resync_ssh_keys = false
95-
@@flush_cache = false
96-
@@delete_trash_repo = []
96+
@@resync_projects = false
97+
@@resync_ssh_keys = false
98+
@@regenerate_ssh_keys = false
99+
@@flush_cache = false
100+
@@delete_trash_repo = []
97101

98102
@@old_valuehash = valuehash.clone
99103
end

Diff for: lib/redmine_git_hosting/patches/user_patch.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ module InstanceMethods
2727
# As login names may change (i.e., user renamed), we use the user id
2828
# with its login name as a prefix for readibility.
2929
def gitolite_identifier
30-
[RedmineGitHosting::Config.gitolite_identifier_prefix, stripped_login, '_', id].join
30+
identifier = [RedmineGitHosting::Config.gitolite_identifier_prefix, stripped_login]
31+
identifier.concat(['_', id]) if !RedmineGitHosting::Config.gitolite_identifier_strip_user_id?
32+
identifier.join
3133
end
3234

3335

0 commit comments

Comments
 (0)