github-auth 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac13ba0c9755deb71801dffec21aba397f70d81f
4
- data.tar.gz: b2fdba9a799045734f7673ee78bd91f00b8e1682
3
+ metadata.gz: bc5ca2cbe7d8acf279d3b54a335e34432cbce149
4
+ data.tar.gz: 24ecd142974160d3205ff3da30c823a179fe69d3
5
5
  SHA512:
6
- metadata.gz: 781c7170d3eee79cb1ceb64fb8a216c09ba23c37c679c26fd0bdb1052c6fa2a3bfb86ff70401a710e123bfb24b3f6c977410a73089300351a4576189e3e6fa8e
7
- data.tar.gz: 2cdc629713e926a4ffb4681188c0401df9de7749d582284021451f100f9a2adcbb7fccb537f2da0bbf4a83facdadb0678acd30b0ab90e67af308c835eb669d37
6
+ metadata.gz: fa37238d36f4d2dc35ee8b51e9b09f34edea0012f00fa5dfe3bf0ac1d934d302d6ace5377f486b9c5ab692c48bf5432463fc6a9b661c71e0315cd60dfc4e26bf
7
+ data.tar.gz: a650e4290cfd5a0d53cc86896af98909dce3f4bdb5c1019f3331fadbce4e98b1d525ec34045863318f5cc33bff3f9e2fe514167f5c172f7a2e34efc62f13f703
data/.gitignore CHANGED
@@ -4,7 +4,6 @@
4
4
  .bundle
5
5
  .config
6
6
  .yardoc
7
- Gemfile.lock
8
7
  InstalledFiles
9
8
  _yardoc
10
9
  coverage
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ##v2.0.0
4
+ *2013-10-22*
5
+
6
+ [\[22 commits\]](https://github.com/chrishunt/github-auth/compare/v1.2.0...v2.0.0)
7
+
8
+ *note:* Option syntax has changed in this release as a result of switching to
9
+ `OptionParser`. See the [`README`](https://github.com/chrishunt/github-auth/blob/master/README.md)
10
+ for usage instructions.
11
+
12
+ - [Add `--list` command](https://github.com/chrishunt/github-auth/pull/14)
13
+ - [Use `OptionParser` for parsing CLI options](https://github.com/chrishunt/github-auth/pull/16)
14
+
3
15
  ##v1.2.0
4
16
  *2013-08-20*
5
17
 
data/Gemfile.lock ADDED
@@ -0,0 +1,72 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ github-auth (2.0.0)
5
+ httparty (~> 0.11.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ cane (2.6.0)
11
+ parallel
12
+ cane-hashcheck (1.2.0)
13
+ cane
14
+ colorize (0.5.8)
15
+ coveralls (0.6.7)
16
+ colorize
17
+ multi_json (~> 1.3)
18
+ rest-client
19
+ simplecov (>= 0.7)
20
+ thor
21
+ daemons (1.1.9)
22
+ diff-lcs (1.2.4)
23
+ eventmachine (1.0.3)
24
+ httparty (0.11.0)
25
+ multi_json (~> 1.0)
26
+ multi_xml (>= 0.5.2)
27
+ mime-types (1.24)
28
+ multi_json (1.7.9)
29
+ multi_xml (0.5.5)
30
+ parallel (0.9.0)
31
+ rack (1.5.2)
32
+ rack-protection (1.5.0)
33
+ rack
34
+ rake (10.1.0)
35
+ rest-client (1.6.7)
36
+ mime-types (>= 1.16)
37
+ rspec (2.14.1)
38
+ rspec-core (~> 2.14.0)
39
+ rspec-expectations (~> 2.14.0)
40
+ rspec-mocks (~> 2.14.0)
41
+ rspec-core (2.14.5)
42
+ rspec-expectations (2.14.2)
43
+ diff-lcs (>= 1.1.3, < 2.0)
44
+ rspec-mocks (2.14.3)
45
+ simplecov (0.7.1)
46
+ multi_json (~> 1.0)
47
+ simplecov-html (~> 0.7.1)
48
+ simplecov-html (0.7.1)
49
+ sinatra (1.4.3)
50
+ rack (~> 1.4)
51
+ rack-protection (~> 1.4)
52
+ tilt (~> 1.3, >= 1.3.4)
53
+ thin (1.5.1)
54
+ daemons (>= 1.0.9)
55
+ eventmachine (>= 0.12.6)
56
+ rack (>= 1.0.0)
57
+ thor (0.18.1)
58
+ tilt (1.4.1)
59
+
60
+ PLATFORMS
61
+ ruby
62
+
63
+ DEPENDENCIES
64
+ bundler (~> 1.3)
65
+ cane (~> 2.6.0)
66
+ cane-hashcheck (~> 1.2.0)
67
+ coveralls (~> 0.6.7)
68
+ github-auth!
69
+ rake (~> 10.1.0)
70
+ rspec (~> 2.14)
71
+ sinatra (~> 1.4.3)
72
+ thin (~> 1.5.1)
data/README.md CHANGED
@@ -23,28 +23,37 @@ After you've [installed](#installation) `gh-auth`, you can give me ssh access
23
23
  with:
24
24
 
25
25
  ```bash
26
- $ gh-auth add chrishunt
26
+ $ gh-auth --add chrishunt
27
27
  Adding 2 key(s) to '/Users/chris/.ssh/authorized_keys'
28
28
  ```
29
29
 
30
30
  That was easy! When we're done working, you can revoke my access with:
31
31
 
32
32
  ```bash
33
- $ gh-auth remove chrishunt
33
+ $ gh-auth --remove chrishunt
34
34
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
35
35
  ```
36
36
 
37
37
  You can add and remove any number of users at the same time.
38
38
 
39
39
  ```bash
40
- $ gh-auth add chrishunt zachmargolis
40
+ $ gh-auth --add chrishunt,zachmargolis
41
41
  Adding 4 key(s) to '/Users/chris/.ssh/authorized_keys'
42
42
 
43
- $ gh-auth remove chrishunt
43
+ $ gh-auth --list
44
+ Added users: chrishunt, zachmargolis
45
+
46
+ $ gh-auth --remove chrishunt
44
47
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
45
48
 
46
- $ gh-auth remove zachmargolis
49
+ $ gh-auth --list
50
+ Added users: zachmargolis
51
+
52
+ $ gh-auth --remove zachmargolis
47
53
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
54
+
55
+ $ gh-auth --list
56
+ Added users:
48
57
  ```
49
58
 
50
59
  ## Sections
@@ -72,7 +81,13 @@ Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
72
81
  `gh-auth` can be used from the command line after the gem has been installed.
73
82
 
74
83
  ```bash
75
- usage: gh-auth [--version] [add|remove] <username>
84
+ usage: gh-auth [--version] [--list] [--add|--remove] <username>
85
+
86
+ options:
87
+ --add doug,sally Add GitHub users
88
+ --remove doug,sally Remove GitHub users
89
+ --list List all GitHub users added
90
+ --version Show version
76
91
  ```
77
92
 
78
93
  ### In Your Project
@@ -84,14 +99,10 @@ too.
84
99
  require 'github/auth'
85
100
 
86
101
  # Add keys for GitHub user 'chrishunt'
87
- Github::Auth::CLI.new(%w(
88
- add chrishunt
89
- )).execute
102
+ Github::Auth::CLI.new.execute %w(--add chrishunt)
90
103
 
91
104
  # Remove keys for GitHub user 'chrishunt'
92
- Github::Auth::CLI.new(%w(
93
- remove chrishunt
94
- )).execute
105
+ Github::Auth::CLI.new.execute %w(--remove chrishunt)
95
106
  ```
96
107
 
97
108
  ## Installation
@@ -102,7 +113,13 @@ Install the `github-auth` gem:
102
113
  $ gem install github-auth
103
114
 
104
115
  $ gh-auth
105
- usage: gh-auth [--version] [add|remove] <username>
116
+ usage: gh-auth [--version] [--list] [--add|--remove] <username>
117
+
118
+ options:
119
+ --add doug,sally Add GitHub users
120
+ --remove doug,sally Remove GitHub users
121
+ --list List all GitHub users added
122
+ --version Show version
106
123
  ```
107
124
 
108
125
  ### SSH Public Key Authentication (Mac OS X)
@@ -130,7 +147,7 @@ First, authorize yourself for ssh. (Make sure to replace 'chrishunt' with
130
147
  *your* GitHub username)
131
148
 
132
149
  ```bash
133
- $ gh-auth add chrishunt
150
+ $ gh-auth --add chrishunt
134
151
  Adding 2 key(s) to '/Users/chris/.ssh/authorized_keys'
135
152
  ```
136
153
 
@@ -146,7 +163,7 @@ $ ssh -o PreferredAuthentications=publickey localhost
146
163
  Next, remove your public keys from the keys file:
147
164
 
148
165
  ```bash
149
- $ gh-auth remove chrishunt
166
+ $ gh-auth --remove chrishunt
150
167
  Removing 2 key(s) from '/Users/chris/.ssh/authorized_keys'
151
168
  ```
152
169
 
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ desc 'Check code quality'
12
12
  Cane::RakeTask.new(:quality) do |task|
13
13
  task.abc_max = 9
14
14
  task.use Cane::HashCheck
15
+ task.abc_exclude = %w(Auth::Options#initialize)
15
16
  end
16
17
 
17
18
  task default: :spec
data/bin/gh-auth CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'github/auth'
4
4
 
5
- Github::Auth::CLI.new(ARGV).execute
5
+ Github::Auth::CLI.new.execute(ARGV)
data/lib/github/auth.rb CHANGED
@@ -2,4 +2,5 @@ require 'github/auth/version'
2
2
  require 'github/auth/key'
3
3
  require 'github/auth/keys_client'
4
4
  require 'github/auth/keys_file'
5
+ require 'github/auth/options'
5
6
  require 'github/auth/cli'
@@ -1,23 +1,11 @@
1
1
  module Github::Auth
2
2
  # Command Line Interface for parsing and executing commands
3
3
  class CLI
4
- attr_reader :command, :usernames
4
+ attr_reader :options
5
5
 
6
- COMMANDS = %w(add remove)
7
-
8
- def initialize(argv)
9
- @command = argv.shift
10
- @usernames = argv
11
- end
12
-
13
- def execute
14
- if COMMANDS.include?(command) && !usernames.empty?
15
- send command
16
- elsif command == '--version'
17
- print_version
18
- else
19
- print_usage
20
- end
6
+ def execute(args)
7
+ @options = Options.new.parse(args)
8
+ send options.command
21
9
  end
22
10
 
23
11
  private
@@ -32,34 +20,30 @@ module Github::Auth
32
20
  "Removing #{keys.count} key(s) from '#{keys_file.path}'"
33
21
  end
34
22
 
35
- def on_keys_file(action, message)
36
- puts message
37
- rescue_keys_file_errors { keys_file.send action, keys }
23
+ def list
24
+ puts "Added users: #{keys_file.github_users.join(', ')}"
38
25
  end
39
26
 
40
- def rescue_keys_file_errors
41
- yield
42
- rescue KeysFile::PermissionDeniedError
43
- print_permission_denied
44
- rescue KeysFile::FileDoesNotExistError
45
- print_file_does_not_exist
27
+ def version
28
+ puts Github::Auth::VERSION
46
29
  end
47
30
 
48
- def print_usage
49
- puts "usage: gh-auth [--version] [#{COMMANDS.join '|'}] <username>"
31
+ def usage
32
+ puts options.usage
50
33
  end
51
34
 
52
- def print_version
53
- puts "gh-auth version #{Github::Auth::VERSION}"
35
+ def on_keys_file(action, message)
36
+ puts message
37
+ rescue_keys_file_errors { keys_file.send action, keys }
54
38
  end
55
39
 
56
- def print_permission_denied
40
+ def rescue_keys_file_errors
41
+ yield
42
+ rescue KeysFile::PermissionDeniedError
57
43
  puts 'Permission denied!'
58
44
  puts
59
45
  puts "Make sure you have write permissions for '#{keys_file.path}'"
60
- end
61
-
62
- def print_file_does_not_exist
46
+ rescue KeysFile::FileDoesNotExistError
63
47
  puts "Keys file does not exist!"
64
48
  puts
65
49
  puts "Create one now and try again:"
@@ -67,18 +51,8 @@ module Github::Auth
67
51
  puts " $ touch #{keys_file.path}"
68
52
  end
69
53
 
70
- def print_github_user_does_not_exist(username)
71
- puts "Github user '#{username}' does not exist"
72
- end
73
-
74
- def print_github_unavailable
75
- puts "Github appears to be unavailable :("
76
- puts
77
- puts "https://status.github.com"
78
- end
79
-
80
54
  def keys
81
- @keys ||= usernames.map { |username| keys_for username }.flatten.compact
55
+ @keys ||= options.usernames.map { |user| keys_for user }.flatten.compact
82
56
  end
83
57
 
84
58
  def keys_for(username)
@@ -87,9 +61,11 @@ module Github::Auth
87
61
  username: username
88
62
  ).keys
89
63
  rescue Github::Auth::KeysClient::GithubUserDoesNotExistError
90
- print_github_user_does_not_exist username
64
+ puts "Github user '#{username}' does not exist"
91
65
  rescue Github::Auth::KeysClient::GithubUnavailableError
92
- print_github_unavailable
66
+ puts "Github appears to be unavailable :("
67
+ puts
68
+ puts "https://status.github.com"
93
69
  end
94
70
 
95
71
  def keys_file
@@ -31,6 +31,12 @@ module Github::Auth
31
31
  write_keys_file { |keys_file| keys_file.write new_content }
32
32
  end
33
33
 
34
+ def github_users
35
+ # http://rubular.com/r/zXCkewmm0i
36
+ regex = %r{github\.com/(\S+)}
37
+ keys_file_content.scan(regex).flatten.uniq.sort
38
+ end
39
+
34
40
  private
35
41
 
36
42
  def append_keys_file(&block)
@@ -0,0 +1,64 @@
1
+ require 'optparse'
2
+
3
+ module Github::Auth
4
+ # Parses command line options
5
+ class Options
6
+ attr_reader :parser
7
+
8
+ def initialize
9
+ @parser = OptionParser.new do |opts|
10
+ opts.banner = [
11
+ 'usage: gh-auth',
12
+ '[--version]',
13
+ '[--list]',
14
+ '[--add|--remove]',
15
+ '<username>'
16
+ ].join(' ')
17
+
18
+ opts.separator "\noptions:"
19
+
20
+ opts.on(
21
+ '--add doug,sally', Array, 'Add GitHub users'
22
+ ) do |usernames|
23
+ raise OptionParser::MissingArgument if usernames.empty?
24
+ @command = 'add'
25
+ @usernames = usernames
26
+ end
27
+
28
+ opts.on(
29
+ '--remove doug,sally', Array, 'Remove GitHub users'
30
+ ) do |usernames|
31
+ raise OptionParser::MissingArgument if usernames.empty?
32
+ @command = 'remove'
33
+ @usernames = usernames
34
+ end
35
+
36
+ opts.on('--list', 'List all GitHub users added') do
37
+ @command = 'list'
38
+ end
39
+
40
+ opts.on('--version', 'Show version') do
41
+ @command = 'version'
42
+ end
43
+ end
44
+ end
45
+
46
+ def command
47
+ @command ||= 'usage'
48
+ end
49
+
50
+ def usernames
51
+ @usernames ||= []
52
+ end
53
+
54
+ def usage
55
+ parser.help
56
+ end
57
+
58
+ def parse(args)
59
+ parser.parse(args)
60
+ ensure
61
+ return self
62
+ end
63
+ end
64
+ end
@@ -1,5 +1,5 @@
1
1
  module Github
2
2
  module Auth
3
- VERSION = "1.2.0"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'support/capture_stdout'
2
3
  require 'support/mock_github_server'
3
4
  require 'github/auth'
4
5
 
@@ -10,8 +11,8 @@ describe Github::Auth::CLI do
10
11
 
11
12
  after { keys_file.unlink }
12
13
 
13
- def cli(argv)
14
- described_class.new(argv).tap do |cli|
14
+ def cli
15
+ described_class.new.tap do |cli|
15
16
  cli.stub(
16
17
  github_hostname: hostname,
17
18
  keys_file_path: keys_file.path
@@ -20,17 +21,43 @@ describe Github::Auth::CLI do
20
21
  end
21
22
 
22
23
  it 'adds and removes keys from the keys file' do
23
- cli(%w(add chrishunt)).execute
24
+ cli.execute %w(--add chrishunt)
24
25
 
25
26
  keys_file.read.tap do |keys_file_content|
26
27
  keys.each { |key| expect(keys_file_content).to include key.to_s }
27
28
  end
28
29
 
29
- cli(%w(remove chrishunt)).execute
30
+ cli.execute %w(--remove chrishunt)
30
31
 
31
32
  expect(keys_file.read).to be_empty
32
33
 
33
34
  keys_file.unlink
34
35
  end
36
+
37
+ it 'lists users from the keys file' do
38
+ cli.execute %w(--add chrishunt)
39
+
40
+ output = capture_stdout do
41
+ cli.execute %w(--list)
42
+ end
43
+
44
+ expect(output).to include('chrishunt')
45
+ end
46
+
47
+ it 'prints version information' do
48
+ output = capture_stdout do
49
+ cli.execute %w(--version)
50
+ end
51
+
52
+ expect(output).to include Github::Auth::VERSION
53
+ end
54
+
55
+ it 'prints usage for invalid arguments' do
56
+ [[], %w(invalid), %w(--add)].each do |invalid_arguments|
57
+ expect(
58
+ capture_stdout { cli.execute invalid_arguments }
59
+ ).to include 'usage: gh-auth'
60
+ end
61
+ end
35
62
  end
36
63
  end
@@ -0,0 +1,11 @@
1
+ require 'stringio'
2
+
3
+ def capture_stdout
4
+ captured_output = StringIO.new
5
+ real_stdout = $stdout
6
+ $stdout = captured_output
7
+ yield
8
+ captured_output.string
9
+ ensure
10
+ $stdout = real_stdout
11
+ end
@@ -197,4 +197,22 @@ describe Github::Auth::KeysFile do
197
197
  end
198
198
  end
199
199
  end
200
+
201
+ describe '#github_users' do
202
+ let(:keys) {[
203
+ Github::Auth::Key.new('jay', 'abc123'),
204
+ Github::Auth::Key.new('chris', 'def456'),
205
+ Github::Auth::Key.new('chris', 'ghi789'),
206
+ ]}
207
+
208
+ before do
209
+ keys_file.write keys.join("\n")
210
+ keys_file.write "\n"
211
+ keys_file.rewind
212
+ end
213
+
214
+ it 'returns a uniq, ordered list of github users' do
215
+ expect(subject.github_users).to eq(%w(chris jay))
216
+ end
217
+ end
200
218
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Hunt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -149,6 +149,7 @@ files:
149
149
  - CHANGELOG.md
150
150
  - CONTRIBUTING.md
151
151
  - Gemfile
152
+ - Gemfile.lock
152
153
  - LICENSE.txt
153
154
  - README.md
154
155
  - Rakefile
@@ -160,13 +161,14 @@ files:
160
161
  - lib/github/auth/key.rb
161
162
  - lib/github/auth/keys_client.rb
162
163
  - lib/github/auth/keys_file.rb
164
+ - lib/github/auth/options.rb
163
165
  - lib/github/auth/version.rb
164
166
  - spec/acceptance/github/auth/cli_spec.rb
165
167
  - spec/acceptance/github/auth/keys_client_spec.rb
166
168
  - spec/acceptance/github/auth/keys_file_spec.rb
167
169
  - spec/spec_helper.rb
170
+ - spec/support/capture_stdout.rb
168
171
  - spec/support/mock_github_server.rb
169
- - spec/unit/github/auth/cli_spec.rb
170
172
  - spec/unit/github/auth/keys_client_spec.rb
171
173
  - spec/unit/github/auth/keys_file_spec.rb
172
174
  homepage: https://github.com/chrishunt/github-auth
@@ -198,7 +200,7 @@ test_files:
198
200
  - spec/acceptance/github/auth/keys_client_spec.rb
199
201
  - spec/acceptance/github/auth/keys_file_spec.rb
200
202
  - spec/spec_helper.rb
203
+ - spec/support/capture_stdout.rb
201
204
  - spec/support/mock_github_server.rb
202
- - spec/unit/github/auth/cli_spec.rb
203
205
  - spec/unit/github/auth/keys_client_spec.rb
204
206
  - spec/unit/github/auth/keys_file_spec.rb
@@ -1,51 +0,0 @@
1
- require 'spec_helper'
2
- require 'github/auth/cli'
3
-
4
- describe Github::Auth::CLI do
5
- let(:argv) { [] }
6
-
7
- subject { described_class.new argv }
8
-
9
- describe '#execute' do
10
- shared_examples_for 'a method that prints usage' do
11
- it 'prints the usage' do
12
- subject.should_receive(:print_usage)
13
- subject.execute
14
- end
15
- end
16
-
17
- context 'when missing a command' do
18
- let(:argv) { [] }
19
- it_should_behave_like 'a method that prints usage'
20
- end
21
-
22
- context 'with an invalid command' do
23
- let(:argv) { ['invalid'] }
24
- it_should_behave_like 'a method that prints usage'
25
- end
26
-
27
- context 'when no usernames are provide' do
28
- let(:argv) { ['add'] }
29
- it_should_behave_like 'a method that prints usage'
30
- end
31
-
32
- context 'with a valid action and usernames' do
33
- let(:action) { 'add' }
34
- let(:argv) { [action, 'chrishunt'] }
35
-
36
- it 'calls the method matching the action name' do
37
- subject.should_receive(action)
38
- subject.execute
39
- end
40
- end
41
-
42
- context 'with the --version command' do
43
- let(:argv) { ['--version'] }
44
-
45
- it 'prints version information' do
46
- subject.should_receive(:print_version)
47
- subject.execute
48
- end
49
- end
50
- end
51
- end