summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-06-28 17:54:15 +0000
committerDouwe Maan <douwe@gitlab.com>2017-06-28 17:54:15 +0000
commit4539a066ecd2c5a16cab66f9e85f8f0ab747fc5f (patch)
tree299888d74240d7a714267c14f448dd2187af6392
parent7e41e378ab71b326f28d62195faeca5c54aafdb8 (diff)
parentfb4260ce3340bde750f0426c1e539d06b0445fe2 (diff)
downloadgitlab-shell-4539a066ecd2c5a16cab66f9e85f8f0ab747fc5f.tar.gz
Merge branch 'add-list-key-ids' into 'master'v5.1.0
Add list-key-ids command See merge request !140
-rw-r--r--CHANGELOG3
-rw-r--r--VERSION2
-rw-r--r--lib/gitlab_keys.rb13
-rw-r--r--spec/gitlab_keys_spec.rb47
4 files changed, 62 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG
index f9d9ae9..539e727 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+v5.1.0
+ - Add `gitlab-keys list-key-ids` subcommand for iterating over key IDs to find keys that should be deleted
+
v5.0.6
- Remove old `project` parameter, use `gl_repository` instead
- Use v4 of the GitLab REST API
diff --git a/VERSION b/VERSION
index c20c645..831446c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5.0.6
+5.1.0
diff --git a/lib/gitlab_keys.rb b/lib/gitlab_keys.rb
index 46189ae..975ee3e 100644
--- a/lib/gitlab_keys.rb
+++ b/lib/gitlab_keys.rb
@@ -39,6 +39,8 @@ class GitlabKeys
rm_key
when 'list-keys';
list_keys
+ when 'list-key-ids';
+ list_key_ids
when 'clear';
clear
when 'check-permissions';
@@ -75,6 +77,17 @@ class GitlabKeys
keys
end
+ def list_key_ids
+ $logger.info 'Listing all key IDs'
+ open_auth_file('r') do |f|
+ f.each_line do |line|
+ matchd = line.match(/key-(\d+)/)
+ next unless matchd
+ puts matchd[1]
+ end
+ end
+ end
+
def batch_add_keys
lock(300) do # Allow 300 seconds (5 minutes) for batch_add_keys
open_auth_file('a') do |file|
diff --git a/spec/gitlab_keys_spec.rb b/spec/gitlab_keys_spec.rb
index c1c3854..b9f2f87 100644
--- a/spec/gitlab_keys_spec.rb
+++ b/spec/gitlab_keys_spec.rb
@@ -80,6 +80,23 @@ describe GitlabKeys do
end
end
+ describe :list_key_ids do
+ let(:gitlab_keys) { build_gitlab_keys('list-key-ids') }
+ before do
+ create_authorized_keys_fixture(
+ existing_content:
+ "key-1\tssh-dsa AAA\nkey-2\tssh-rsa BBB\nkey-3\tssh-rsa CCC\nkey-9000\tssh-rsa DDD\n"
+ )
+ end
+
+ it 'outputs the key IDs, separated by newlines' do
+ output = capture_stdout do
+ gitlab_keys.send(:list_key_ids)
+ end
+ output.should match "1\n2\n3\n9000"
+ end
+ end
+
describe :batch_add_keys do
let(:gitlab_keys) { build_gitlab_keys('batch-add-keys') }
let(:fake_stdin) { StringIO.new("key-12\tssh-dsa ASDFASGADG\nkey-123\tssh-rsa GFDGDFSGSDFG\n", 'r') }
@@ -160,6 +177,23 @@ describe GitlabKeys do
gitlab_keys.send(:rm_key).should be_true
end
end
+
+ context 'without key content' do
+ let(:gitlab_keys) { build_gitlab_keys('rm-key', 'key-741') }
+
+ it "removes the right line by key ID" do
+ create_authorized_keys_fixture
+ other_line = "command=\"#{ROOT_PATH}/bin/gitlab-shell key-742\",options ssh-rsa AAAAB3NzaDAxx2E"
+ delete_line = "command=\"#{ROOT_PATH}/bin/gitlab-shell key-741\",options ssh-rsa AAAAB3NzaDAxx2E"
+ open(tmp_authorized_keys_path, 'a') do |auth_file|
+ auth_file.puts delete_line
+ auth_file.puts other_line
+ end
+ gitlab_keys.send :rm_key
+ erased_line = delete_line.gsub(/./, '#')
+ File.read(tmp_authorized_keys_path).should == "existing content\n#{erased_line}\n#{other_line}\n"
+ end
+ end
end
describe :clear do
@@ -288,9 +322,9 @@ describe GitlabKeys do
end
end
- def create_authorized_keys_fixture
+ def create_authorized_keys_fixture(existing_content: 'existing content')
FileUtils.mkdir_p(File.dirname(tmp_authorized_keys_path))
- open(tmp_authorized_keys_path, 'w') { |file| file.puts('existing content') }
+ open(tmp_authorized_keys_path, 'w') { |file| file.puts(existing_content) }
gitlab_keys.stub(auth_file: tmp_authorized_keys_path)
end
@@ -301,4 +335,13 @@ describe GitlabKeys do
def tmp_lock_file_path
tmp_authorized_keys_path + '.lock'
end
+
+ def capture_stdout(&blk)
+ old = $stdout
+ $stdout = fake = StringIO.new
+ blk.call
+ fake.string
+ ensure
+ $stdout = old
+ end
end