auth_keys 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8edd9a103e6e5bb513144118af64d53de557542d
4
+ data.tar.gz: 4a76a710567ca12a84ca90391ed6d9dca945a4a4
5
+ SHA512:
6
+ metadata.gz: 0162cdda638ce7c6b5cfca22b3b8fd76a53ab446b15ded93bd6cc2124537b5bc0c0915027675a16718afbc1a4987902bc7fa62539354f208bad2d37a62d7d72a
7
+ data.tar.gz: fbc46d6e84b18df7d52f4c85c424d77dab89560a0ab750607f3f581775241f8650e370f40846cfffe984b410aa00a97bd108bc78da0f7b5b6df58ef55d2b5a2e
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --format documentation --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in authorized_keys.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 tatums
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,74 @@
1
+ # AuthKeys
2
+
3
+ Pull public ssh keys from a github team and write them to an authorized_keys file. This is good for granting access to a server.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```
10
+ gem 'authorized_keys'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install authorized_keys
20
+
21
+
22
+ ## Usage
23
+
24
+ ```ruby
25
+ AuthKeys.configure do |c|
26
+ c.org_name = "AwesomeOrg"
27
+ c.auth_token="asdfasdf12341234123412341234";
28
+ c.team_ids = [123456, 123457];
29
+ c.file_path = "/home/ubuntu/.ssh/authorized_keys"
30
+ end
31
+ ```
32
+
33
+ Assuming your config is valid. The go method will write all keys to the file specified in the config
34
+
35
+ ```ruby
36
+ AuthKeys.go
37
+ => "success™"
38
+ ```
39
+
40
+ ## Examples
41
+ ```ruby
42
+ pry(main)> require "./lib/authorized_keys"
43
+ => true
44
+ ```
45
+
46
+
47
+
48
+ ### AuthKeys::Org
49
+ ```ruby
50
+ AuthKeys::Org.details
51
+ AuthKeys::Org.teams
52
+ ```
53
+
54
+ ### AuthKeys::Team
55
+ ```ruby
56
+ AuthKeys::Team.new(id: 687081).details
57
+ AuthKeys::Team.new(id: 687081).members
58
+ AuthKeys::Team.new(id: 687081).keys
59
+ ```
60
+
61
+ ### AuthKeys::Member
62
+ ```ruby
63
+ AuthKeys::Member.new(id: 72979).details
64
+ AuthKeys::Member.new(id: 72979).keys
65
+ ```
66
+
67
+
68
+ ## Contributing
69
+
70
+ 1. Fork it ( https://github.com/[my-github-username]/authorized_keys/fork )
71
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
72
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
73
+ 4. Push to the branch (`git push origin my-new-feature`)
74
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'auth_keys/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "auth_keys"
8
+ spec.version = AuthKeys::VERSION
9
+ spec.authors = ["tatums"]
10
+ spec.email = ["tatum@ashlandstudios.com"]
11
+ spec.summary = %q{Give a github team access to the server.}
12
+ spec.description = %q{A gem to help you grant ssh access to a server. Writes ssh keys to the authorized_keys file.}
13
+ spec.homepage = "https://github.com/tatums/authorized_keys"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+ spec.add_runtime_dependency 'virtus', '~> 1.0', '>= 1.0.3'
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.7"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rspec", "~> 3.0"
25
+ spec.add_development_dependency "pry", "~> 0.10"
26
+ spec.add_development_dependency "webmock", "~> 1.20"
27
+ end
@@ -0,0 +1,54 @@
1
+ require "net/http"
2
+ require "uri"
3
+ require "json"
4
+ require "virtus"
5
+ require_relative "auth_keys/version"
6
+ require_relative "auth_keys/utility/request"
7
+ require_relative "auth_keys/utility/config"
8
+ require_relative "auth_keys/utility/main"
9
+ require_relative "auth_keys/github/org"
10
+ require_relative "auth_keys/github/team"
11
+ require_relative "auth_keys/github/member"
12
+
13
+ module AuthKeys
14
+
15
+ def self.go
16
+ return "invalid_config" if invalid_config
17
+ if keys.empty?
18
+ "No keys to write. Make sure your config is setup correctly"
19
+ else
20
+ puts "Writing keys to file: #{AuthKeys.config.file_path}" if AuthKeys.config.verbose
21
+ File.open(AuthKeys.config.file_path, 'w') do |file|
22
+ keys.each { |key| file.puts key}
23
+ end
24
+ if File.chmod(0644, AuthKeys.config.file_path) == 1
25
+ "success™"
26
+ else
27
+ "failure"
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+ # Returns an array of strings.
34
+ # Each line will be written to the authorized_keys file.
35
+ #
36
+ # For example
37
+ # [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq6H5sIqrU17t7a89gokyybToDwr67U7t590IdV1WaMDEHnc+X7dEETYnh4jpHI5IiZ/b+H1L4Zl2b6MbifVqzBgu3Ua2ZzWsDYlFIkGagN5ZcHvWIlVev0r7hzRi5wWRjz/VbeI7BHtkGQ08lQ9uMU40yguojrfrtDEgh1xQoQ41FJoswFAfwzzUG1cqUTmptZthsw6NeSHMvs4rbxASuBveE45du3FFE5U0XyZje3nr/Ahp+tSWnBYJxkjZcfUPQ+YTTk8QPFH4HDVE+H7FOLW5exp+g1lLLpm1NUDIngr8jM7aZzfDuCbtp5WYGZ6HAEbS6pEuJQVASnD5CMwpf cabm"]
38
+ def self.keys
39
+ @keys ||= AuthKeys.config.team_ids.map do |id|
40
+ team = Team.new(id: id)
41
+ puts "Team: #{team.details["name"]}" if AuthKeys.config.verbose
42
+ team.keys
43
+ end.flatten.uniq
44
+ end
45
+
46
+ def self.invalid_config
47
+ [
48
+ AuthKeys.config.org_name.nil?,
49
+ AuthKeys.config.auth_token.nil?,
50
+ AuthKeys.config.team_ids.empty?,
51
+ AuthKeys.config.file_path.nil?
52
+ ].include?(true)
53
+ end
54
+ end
@@ -0,0 +1,16 @@
1
+ module AuthKeys
2
+ class Member
3
+ include Virtus.model
4
+ attribute :id, Integer
5
+ attribute :login, String
6
+
7
+ def details
8
+ Request.get "https://api.github.com/user/#{id}"
9
+ end
10
+
11
+ def keys
12
+ Request.get "https://api.github.com/user/#{id}/keys"
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module AuthKeys
2
+ class Org
3
+ include Virtus.model
4
+ attribute :id, Integer
5
+ attribute :name, String
6
+
7
+ def self.details
8
+ Request.get("https://api.github.com/orgs/#{AuthKeys.config.org_name}")
9
+ end
10
+
11
+ def self.teams
12
+ data = Request.get("https://api.github.com/orgs/#{AuthKeys.config.org_name}/teams")
13
+ data.map do |attr|
14
+ Team.new(attr)
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ module AuthKeys
2
+ class Team
3
+ include Virtus.model
4
+ attribute :id, Integer
5
+ attribute :name, String
6
+
7
+ def self.all
8
+ Request.get("https://api.github.com/orgs/#{AuthKeys.config.org_name}/teams").map do |attr|
9
+ self.new(attr)
10
+ end
11
+ end
12
+
13
+ def details
14
+ Request.get "https://api.github.com/teams/#{id}"
15
+ end
16
+
17
+ def members
18
+ @members ||= begin
19
+ Request.get("https://api.github.com/teams/#{id}/members").map do |attr|
20
+ Member.new(attr)
21
+ end
22
+ end
23
+ end
24
+
25
+ def keys
26
+ members.map do |m|
27
+ puts "Key found for #{m.login}" if AuthKeys.config.verbose
28
+ m.keys.map { |k| "#{k["key"]} #{m.login}" }
29
+ end.flatten
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ module AuthKeys
2
+ class Config
3
+ attr_accessor :org_name, :auth_token, :team_ids, :file_path, :verbose
4
+
5
+ def initialize
6
+ @team_ids = []
7
+ @verbose = false
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module AuthKeys
2
+ class << self
3
+ attr_writer :configuration
4
+ end
5
+
6
+ def self.config
7
+ @config ||= Config.new
8
+ end
9
+
10
+ def self.configure
11
+ yield(config)
12
+ end
13
+
14
+ end
@@ -0,0 +1,13 @@
1
+ module AuthKeys
2
+ class Request
3
+ def self.get(string)
4
+ uri = URI.parse(string)
5
+ http = Net::HTTP.new(uri.host, uri.port)
6
+ http.use_ssl = true
7
+ request = Net::HTTP::Get.new(uri.request_uri)
8
+ request.add_field("Authorization", "token #{AuthKeys.config.auth_token}")
9
+ response = http.request(request)
10
+ JSON.parse(response.body)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module AuthKeys
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,110 @@
1
+ require "spec_helper.rb"
2
+
3
+ describe AuthKeys do
4
+
5
+ it "returns a team_ids array" do
6
+ expect(AuthKeys.config.team_ids).to eq([])
7
+ end
8
+
9
+ it "can be configured" do
10
+ AuthKeys.configure { |c|
11
+ c.team_ids = [1]
12
+ c.auth_token = "123"
13
+ c.file_path = "/home/ubuntu/.ssh/authorized_keys"
14
+ }
15
+ expect(AuthKeys.config.team_ids).to eq([1])
16
+ expect(AuthKeys.config.auth_token).to eq("123")
17
+ expect(AuthKeys.config.file_path).to eq(
18
+ "/home/ubuntu/.ssh/authorized_keys"
19
+ )
20
+ end
21
+
22
+ describe "#go" do
23
+ context "without a config" do
24
+ it do
25
+ expect(AuthKeys.go).to eq("invalid_config")
26
+ end
27
+ end
28
+
29
+
30
+ context "with a config " do
31
+ before do
32
+ AuthKeys.configure { |c| c.org_name = "blah"; c.team_ids = [1];
33
+ c.auth_token = "123"; c.file_path = "/home/ubuntu/.ssh/authorized_keys" }
34
+ end
35
+
36
+ it do
37
+ body = [
38
+ {"login"=>"tatums",
39
+ "id"=>72979,
40
+ "avatar_url"=>"https://avatars.githubusercontent.com/u/72979?v=3",
41
+ "gravatar_id"=>"",
42
+ "url"=>"https://api.github.com/users/tatums",
43
+ "html_url"=>"https://github.com/tatums",
44
+ "followers_url"=>"https://api.github.com/users/tatums/followers",
45
+ "following_url"=>"https://api.github.com/users/tatums/following{/other_user}",
46
+ "gists_url"=>"https://api.github.com/users/tatums/gists{/gist_id}",
47
+ "starred_url"=>"https://api.github.com/users/tatums/starred{/owner}{/repo}",
48
+ "subscriptions_url"=>"https://api.github.com/users/tatums/subscriptions",
49
+ "organizations_url"=>"https://api.github.com/users/tatums/orgs",
50
+ "repos_url"=>"https://api.github.com/users/tatums/repos",
51
+ "events_url"=>"https://api.github.com/users/tatums/events{/privacy}",
52
+ "received_events_url"=>"https://api.github.com/users/tatums/received_events",
53
+ "type"=>"User",
54
+ "site_admin"=>false}
55
+ ].to_json
56
+ stub_request(:get, "https://api.github.com/teams/1/members").to_return(:status => 200, :body =>body, :headers => {})
57
+
58
+ body = [{"id"=>3309134,
59
+ "key"=>
60
+ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzY3zHSKRMG7HwbR1AvHIQ1/NtvGoaoLRyvgU5NPjFSWNNSuJ+GMTp/42JzOWnE+GcpO/w5a61IzC6WX1npjlHiqu8MJqNTRmejNqZIpbMbnD7a5A1M+Pk6Qx/zHjeXiPNlxv1TO9X8s/kxyMt+BvQAk/tB8yd3ckSYMuXZCIrYkS8oDVLzffdx5CwkgQXet3u+GYgga9GkNuKTZahUshrXz87en3zFK0yHOE0Wz7zp6Puu1f1TxUQh0r6TihCo0U+wp2cFNfV2yoLh5717QcxUPpp28+drQYIfAdwI1K8nTWA3/DFsSoUu+2rwdF1zzg2ZpHpCCziIp44tICCYjJP"}
61
+ ].to_json
62
+ stub_request(:get, "https://api.github.com/user/72979/keys").to_return(:status => 200, :body =>body, :headers => {})
63
+ expect(File).to receive(:open)
64
+ expect(File).to receive(:chmod).and_return 1
65
+ expect(AuthKeys.go).to eq("success™")
66
+ end
67
+
68
+ it do
69
+ body = [
70
+ {"login"=>"tatums",
71
+ "id"=>72979,
72
+ "avatar_url"=>"https://avatars.githubusercontent.com/u/72979?v=3",
73
+ "gravatar_id"=>"",
74
+ "url"=>"https://api.github.com/users/tatums",
75
+ "html_url"=>"https://github.com/tatums",
76
+ "followers_url"=>"https://api.github.com/users/tatums/followers",
77
+ "following_url"=>"https://api.github.com/users/tatums/following{/other_user}",
78
+ "gists_url"=>"https://api.github.com/users/tatums/gists{/gist_id}",
79
+ "starred_url"=>"https://api.github.com/users/tatums/starred{/owner}{/repo}",
80
+ "subscriptions_url"=>"https://api.github.com/users/tatums/subscriptions",
81
+ "organizations_url"=>"https://api.github.com/users/tatums/orgs",
82
+ "repos_url"=>"https://api.github.com/users/tatums/repos",
83
+ "events_url"=>"https://api.github.com/users/tatums/events{/privacy}",
84
+ "received_events_url"=>"https://api.github.com/users/tatums/received_events",
85
+ "type"=>"User",
86
+ "site_admin"=>false}
87
+ ].to_json
88
+ stub_request(:get, "https://api.github.com/teams/1/members").to_return(:status => 200, :body =>body, :headers => {})
89
+
90
+ body = [{"id"=>3309134,
91
+ "key"=>
92
+ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzY3zHSKRMG7HwbR1AvHIQ1/NtvGoaoLRyvgU5NPjFSWNNSuJ+GMTp/42JzOWnE+GcpO/w5a61IzC6WX1npjlHiqu8MJqNTRmejNqZIpbMbnD7a5A1M+Pk6Qx/zHjeXiPNlxv1TO9X8s/kxyMt+BvQAk/tB8yd3ckSYMuXZCIrYkS8oDVLzffdx5CwkgQXet3u+GYgga9GkNuKTZahUshrXz87en3zFK0yHOE0Wz7zp6Puu1f1TxUQh0r6TihCo0U+wp2cFNfV2yoLh5717QcxUPpp28+drQYIfAdwI1K8nTWA3/DFsSoUu+2rwdF1zzg2ZpHpCCziIp44tICCYjJP"}
93
+ ].to_json
94
+ stub_request(:get, "https://api.github.com/user/72979/keys").to_return(:status => 200, :body =>body, :headers => {})
95
+ AuthKeys.configure { |c|
96
+ c.org_name = "blah"
97
+ c.team_ids = [1]
98
+ c.auth_token = "123"
99
+ c.file_path = "/home/ubuntu/.ssh/authorized_keys"
100
+ }
101
+ expect(File).to receive(:open)
102
+ expect(File).to receive(:chmod).and_return 0
103
+ expect(AuthKeys.go).to eq("failure")
104
+ end
105
+ end
106
+
107
+
108
+ end
109
+
110
+ end
@@ -0,0 +1,92 @@
1
+ require "auth_keys"
2
+ require 'webmock/rspec'
3
+
4
+ # This file was generated by the `rspec --init` command. Conventionally, all
5
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
6
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
7
+ # file to always be loaded, without a need to explicitly require it in any files.
8
+ #
9
+ # Given that it is always loaded, you are encouraged to keep this file as
10
+ # light-weight as possible. Requiring heavyweight dependencies from this file
11
+ # will add to the boot time of your test suite on EVERY test run, even for an
12
+ # individual file that may not need all of that loaded. Instead, consider making
13
+ # a separate helper file that requires the additional dependencies and performs
14
+ # the additional setup, and require it from the spec files that actually need it.
15
+ #
16
+ # The `.rspec` file also contains a few flags that are not defaults but that
17
+ # users commonly want.
18
+ #
19
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
20
+ RSpec.configure do |config|
21
+ # rspec-expectations config goes here. You can use an alternate
22
+ # assertion/expectation library such as wrong or the stdlib/minitest
23
+ # assertions if you prefer.
24
+ config.expect_with :rspec do |expectations|
25
+ # This option will default to `true` in RSpec 4. It makes the `description`
26
+ # and `failure_message` of custom matchers include text for helper methods
27
+ # defined using `chain`, e.g.:
28
+ # be_bigger_than(2).and_smaller_than(4).description
29
+ # # => "be bigger than 2 and smaller than 4"
30
+ # ...rather than:
31
+ # # => "be bigger than 2"
32
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
33
+ end
34
+
35
+ # rspec-mocks config goes here. You can use an alternate test double
36
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
37
+ config.mock_with :rspec do |mocks|
38
+ # Prevents you from mocking or stubbing a method that does not exist on
39
+ # a real object. This is generally recommended, and will default to
40
+ # `true` in RSpec 4.
41
+ mocks.verify_partial_doubles = true
42
+ end
43
+
44
+ # The settings below are suggested to provide a good initial experience
45
+ # with RSpec, but feel free to customize to your heart's content.
46
+ =begin
47
+ # These two settings work together to allow you to limit a spec run
48
+ # to individual examples or groups you care about by tagging them with
49
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
50
+ # get run.
51
+ config.filter_run :focus
52
+ config.run_all_when_everything_filtered = true
53
+
54
+ # Limits the available syntax to the non-monkey patched syntax that is recommended.
55
+ # For more details, see:
56
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
57
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
58
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
59
+ config.disable_monkey_patching!
60
+
61
+ # This setting enables warnings. It's recommended, but in some cases may
62
+ # be too noisy due to issues in dependencies.
63
+ config.warnings = true
64
+
65
+ # Many RSpec users commonly either run the entire suite or an individual
66
+ # file, and it's useful to allow more verbose output when running an
67
+ # individual spec file.
68
+ if config.files_to_run.one?
69
+ # Use the documentation formatter for detailed output,
70
+ # unless a formatter has already been configured
71
+ # (e.g. via a command-line flag).
72
+ config.default_formatter = 'doc'
73
+ end
74
+
75
+ # Print the 10 slowest examples and example groups at the
76
+ # end of the spec run, to help surface which specs are running
77
+ # particularly slow.
78
+ config.profile_examples = 10
79
+
80
+ # Run specs in random order to surface order dependencies. If you find an
81
+ # order dependency and want to debug it, you can fix the order by providing
82
+ # the seed, which is printed after each run.
83
+ # --seed 1234
84
+ config.order = :random
85
+
86
+ # Seed global randomization in this process using the `--seed` CLI option.
87
+ # Setting this allows you to use `--seed` to deterministically reproduce
88
+ # test failures related to randomization by passing the same `--seed` value
89
+ # as the one that triggered the failure.
90
+ Kernel.srand config.seed
91
+ =end
92
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: auth_keys
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - tatums
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: virtus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.7'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.7'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '10.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: pry
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.10'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.10'
89
+ - !ruby/object:Gem::Dependency
90
+ name: webmock
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.20'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.20'
103
+ description: A gem to help you grant ssh access to a server. Writes ssh keys to the
104
+ authorized_keys file.
105
+ email:
106
+ - tatum@ashlandstudios.com
107
+ executables: []
108
+ extensions: []
109
+ extra_rdoc_files: []
110
+ files:
111
+ - ".gitignore"
112
+ - ".rspec"
113
+ - Gemfile
114
+ - LICENSE.txt
115
+ - README.md
116
+ - Rakefile
117
+ - auth_keys.gemspec
118
+ - lib/auth_keys.rb
119
+ - lib/auth_keys/github/member.rb
120
+ - lib/auth_keys/github/org.rb
121
+ - lib/auth_keys/github/team.rb
122
+ - lib/auth_keys/utility/config.rb
123
+ - lib/auth_keys/utility/main.rb
124
+ - lib/auth_keys/utility/request.rb
125
+ - lib/auth_keys/version.rb
126
+ - spec/auth_keys_spec.rb
127
+ - spec/spec_helper.rb
128
+ homepage: https://github.com/tatums/authorized_keys
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.4.5
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Give a github team access to the server.
152
+ test_files:
153
+ - spec/auth_keys_spec.rb
154
+ - spec/spec_helper.rb