master_api_key 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/app/controllers/master_api_key/api_keys_controller.rb +54 -0
  5. data/app/controllers/master_api_key/application_controller.rb +11 -0
  6. data/app/models/master_api_key/api_key.rb +16 -0
  7. data/config/master_api_key.gemversion +1 -0
  8. data/config/routes.rb +5 -0
  9. data/db/migrate/20160329212147_create_master_api_key_api_keys.rb +9 -0
  10. data/db/migrate/20160330160153_add_group_column.rb +5 -0
  11. data/db/migrate/20160407194542_require_group_attribute.rb +5 -0
  12. data/db/migrate/20160411152807_create_master_key.rb +11 -0
  13. data/db/seeds.rb +10 -0
  14. data/lib/master_api_key.rb +4 -0
  15. data/lib/master_api_key/api_gatekeeper.rb +56 -0
  16. data/lib/master_api_key/engine.rb +14 -0
  17. data/lib/master_api_key/version.rb +9 -0
  18. data/spec/controllers/master_api_key/api_keys_controller_spec.rb +130 -0
  19. data/spec/dummy/Rakefile +6 -0
  20. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  21. data/spec/dummy/app/controllers/empty_group_controller.rb +7 -0
  22. data/spec/dummy/app/controllers/nil_group_controller.rb +7 -0
  23. data/spec/dummy/bin/bundle +3 -0
  24. data/spec/dummy/bin/rails +4 -0
  25. data/spec/dummy/bin/rake +4 -0
  26. data/spec/dummy/bin/setup +29 -0
  27. data/spec/dummy/config.ru +4 -0
  28. data/spec/dummy/config/application.rb +29 -0
  29. data/spec/dummy/config/boot.rb +4 -0
  30. data/spec/dummy/config/database.yml +23 -0
  31. data/spec/dummy/config/environment.rb +6 -0
  32. data/spec/dummy/config/environments/development.rb +41 -0
  33. data/spec/dummy/config/environments/production.rb +79 -0
  34. data/spec/dummy/config/environments/test.rb +42 -0
  35. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  36. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/spec/dummy/config/initializers/inflections.rb +16 -0
  38. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  39. data/spec/dummy/config/initializers/session_store.rb +3 -0
  40. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/spec/dummy/config/locales/en.yml +23 -0
  42. data/spec/dummy/config/routes.rb +6 -0
  43. data/spec/dummy/config/secrets.yml +22 -0
  44. data/spec/dummy/db/schema.rb +23 -0
  45. data/spec/dummy/db/seeds.rb +8 -0
  46. data/spec/dummy/log/development.log +17 -0
  47. data/spec/dummy/log/test.log +14668 -0
  48. data/spec/master_api_key/api_gatekeeper_spec.rb +94 -0
  49. data/spec/rails_helper.rb +57 -0
  50. data/spec/requests/master_api_key/integration_spec.rb +17 -0
  51. data/spec/requests/master_api_key/master_api_key_api_keys_spec.rb +98 -0
  52. data/spec/spec_helper.rb +92 -0
  53. metadata +258 -0
  54. metadata.gz.sig +1 -0
@@ -0,0 +1,94 @@
1
+ require 'rails_helper'
2
+ require 'master_api_key/api_gatekeeper'
3
+
4
+ RSpec.describe ApplicationController, :type => :controller do
5
+ context 'with fully configured controller' do
6
+ controller do
7
+ belongs_to_api_group(:allowed_group)
8
+
9
+ def index
10
+ authorize_action do
11
+ head(:ok)
12
+ end
13
+ end
14
+ end
15
+
16
+ before(:each) do
17
+ end
18
+
19
+ context 'Without API TOKEN' do
20
+ it "should return 401 (:unauthorized) if 'X-API-TOKEN' isn't available" do
21
+ expect(controller).to receive(:on_authentication_failure)
22
+
23
+ controller.index
24
+ end
25
+
26
+ it 'should render a response as unauthorized by default' do
27
+ expect(controller).to receive(:head).with(:unauthorized)
28
+
29
+ controller.index
30
+ end
31
+ end
32
+
33
+ context 'With API Token' do
34
+ before(:each) do
35
+ @api_key = MasterApiKey::ApiKey.create!(:group => 'allowed_group')
36
+ controller.request.headers['X-API-TOKEN'] = @api_key.api_token
37
+ end
38
+
39
+ it "should return 401 (:unauthorized) if the token can't be authenticated" do
40
+ controller.request.headers['X-API-TOKEN'] = @api_key.api_token + '_missing'
41
+
42
+ expect(controller).to receive(:on_authentication_failure)
43
+
44
+ controller.index
45
+ end
46
+
47
+ it "should return 403 (:forbidden) if the api token isn't authorized to access the group" do
48
+ restricted_api_key = MasterApiKey::ApiKey.create!(:group => 'not_allowed_group')
49
+ controller.request.headers['X-API-TOKEN'] = restricted_api_key.api_token
50
+
51
+ expect(controller).to receive(:on_forbidden_request).and_call_original
52
+ expect(controller).to receive(:head).with(:forbidden)
53
+
54
+ controller.index
55
+ end
56
+
57
+ it 'should return 200 if the token is authenticated and authorized to access the controller' do
58
+ expect(controller).to receive(:head).with(:ok)
59
+
60
+ controller.index
61
+ end
62
+
63
+ it 'should return 200 even if the group is defined with a different character case' do
64
+ upper_case_api_key = MasterApiKey::ApiKey.create!(:group => 'ALLOWED_GROUP')
65
+ controller.request.headers['X-API-TOKEN'] = upper_case_api_key.api_token
66
+ expect(controller).to receive(:head).with(:ok)
67
+
68
+ controller.index
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'with a controller without a group configured' do
74
+ controller do
75
+
76
+ def index
77
+ authorize_action do
78
+ head(:ok)
79
+ end
80
+ end
81
+ end
82
+
83
+ before(:each) do
84
+ @api_key = MasterApiKey::ApiKey.create!(:group => 'allowed_group')
85
+ controller.request.headers['X-API-TOKEN'] = @api_key.api_token
86
+ end
87
+
88
+ it 'should throw exception because the controller is not in a group but is using api authentication' do
89
+ expect{
90
+ controller.index
91
+ }.to raise_error(ArgumentError)
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,57 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV['RAILS_ENV'] ||= 'test'
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ # Prevent database truncation if the environment is production
5
+ abort('The Rails environment is running in production mode!') if Rails.env.production?
6
+ require 'spec_helper'
7
+ require 'rspec/rails'
8
+ # Add additional requires below this line. Rails is not loaded until this point!
9
+
10
+ # Requires supporting ruby files with custom matchers and macros, etc, in
11
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
12
+ # run as spec files by default. This means that files in spec/support that end
13
+ # in _spec.rb will both be required and run as specs, causing the specs to be
14
+ # run twice. It is recommended that you do not name files matching this glob to
15
+ # end with _spec.rb. You can configure this pattern with the --pattern
16
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
17
+ #
18
+ # The following line is provided for convenience purposes. It has the downside
19
+ # of increasing the boot-up time by auto-requiring all files in the support
20
+ # directory. Alternatively, in the individual `*_spec.rb` files, manually
21
+ # require only the support files necessary.
22
+ #
23
+ # Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
24
+
25
+ # Checks for pending migration and applies them before tests are run.
26
+ # If you are not using ActiveRecord, you can remove this line.
27
+ ActiveRecord::Migration.maintain_test_schema!
28
+
29
+ RSpec.configure do |config|
30
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
31
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
32
+
33
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
34
+ # examples within a transaction, remove the following line or assign false
35
+ # instead of true.
36
+ config.use_transactional_fixtures = true
37
+
38
+ # RSpec Rails can automatically mix in different behaviours to your tests
39
+ # based on their file location, for example enabling you to call `get` and
40
+ # `post` in specs under `spec/controllers`.
41
+ #
42
+ # You can disable this behaviour by removing the line below, and instead
43
+ # explicitly tag your specs with their type, e.g.:
44
+ #
45
+ # RSpec.describe UsersController, :type => :controller do
46
+ # # ...
47
+ # end
48
+ #
49
+ # The different available types are documented in the features, such as in
50
+ # https://relishapp.com/rspec/rspec-rails/docs
51
+ config.infer_spec_type_from_file_location!
52
+
53
+ # Filter lines from Rails gems in backtraces.
54
+ config.filter_rails_from_backtrace!
55
+ # arbitrary gems may also be filtered via:
56
+ # config.filter_gems_from_backtrace("gem name")
57
+ end
@@ -0,0 +1,17 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe 'Integration', type: :request do
4
+ describe 'error cases' do
5
+ it 'should raise error with nil group configuration' do
6
+ expect {
7
+ get '/nil_group'
8
+ }.to raise_error(ArgumentError)
9
+ end
10
+
11
+ it 'should raise error with empty group configuration' do
12
+ expect {
13
+ get '/empty_group'
14
+ }.to raise_error(ArgumentError)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,98 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe 'ApiKeys', type: :request do
4
+ describe 'POST /master_api_key/api_keys' do
5
+ before(:each) do
6
+ master_key = MasterApiKey::ApiKey.create!(:group => :master_key)
7
+ @headers = {
8
+ 'X-API-TOKEN' => master_key.api_token
9
+ }
10
+ end
11
+
12
+ it 'should return 200 with properly formatted request' do
13
+ post '/master_api_key/api_keys', {:group => 'group_1'}, @headers
14
+ json_object = JSON.parse response.body
15
+
16
+ expect(response).to have_http_status(200)
17
+ expect(response.content_type).to eq 'application/json'
18
+
19
+ hash_verifier = {'group' => 'group_1'}
20
+ expect(json_object).to include 'apiKey'
21
+ expect(json_object['apiKey']).to include hash_verifier
22
+ expect(json_object['apiKey']).to include 'id', 'api_token'
23
+ expect(json_object['apiKey']['id']).to be_an(Integer)
24
+ expect(json_object['apiKey']['api_token']).to be_a(String)
25
+ end
26
+
27
+ it 'should return 400 with nil group' do
28
+ post '/master_api_key/api_keys', {:group => nil}, @headers
29
+ expect(response).to have_http_status(400)
30
+ end
31
+
32
+ it 'should return 400 if group param is missing' do
33
+ post '/master_api_key/api_keys', {}, @headers
34
+ expect(response).to have_http_status(400)
35
+ end
36
+ end
37
+
38
+ describe 'DELETE /master_api_key/api_keys/#id' do
39
+ before(:each) do
40
+ master_key = MasterApiKey::ApiKey.create!(:group => :master_key)
41
+ @headers = {
42
+ 'X-API-TOKEN' => master_key.api_token
43
+ }
44
+ end
45
+
46
+ it 'should return 200 with properly formatted request' do
47
+ post '/master_api_key/api_keys', {:group => 'group_1'}, @headers
48
+ expect(response).to have_http_status(200)
49
+
50
+ json_object = JSON.parse response.body
51
+
52
+ id = json_object['apiKey']['id']
53
+
54
+ delete "/master_api_key/api_keys/#{id}", {}, @headers
55
+ expect(response).to have_http_status(200)
56
+ end
57
+
58
+ it 'should return 200 when there is nothing to remove' do
59
+ delete '/master_api_key/api_keys/100', {}, @headers
60
+ expect(response).to have_http_status(200)
61
+ end
62
+ end
63
+
64
+ describe 'DELETE /master_api_key/api_keys' do
65
+ before(:each) do
66
+ master_key = MasterApiKey::ApiKey.create!(:group => :master_key)
67
+ @headers = {
68
+ 'X-API-TOKEN' => master_key.api_token
69
+ }
70
+ end
71
+
72
+ it 'should return 200 with properly formatted request' do
73
+ post '/master_api_key/api_keys', {:group => 'group_1'}, @headers
74
+ expect(response).to have_http_status(200)
75
+
76
+ json_object = JSON.parse response.body
77
+ api_token = json_object['apiKey']['api_token']
78
+
79
+ delete '/master_api_key/api_keys', {:api_token => api_token}, @headers
80
+ expect(response).to have_http_status(200)
81
+ end
82
+
83
+ it 'should return 200 when there is nothing to remove' do
84
+ delete '/master_api_key/api_keys' , {:api_token => 'nothing_to_see_here'}, @headers
85
+ expect(response).to have_http_status(200)
86
+ end
87
+
88
+ it 'should return 400 when the api_token is nil' do
89
+ delete '/master_api_key/api_keys' , {:api_token => nil}, @headers
90
+ expect(response).to have_http_status(400)
91
+ end
92
+
93
+ it 'should return 400 when the api_token param is missing' do
94
+ delete '/master_api_key/api_keys', {}, @headers
95
+ expect(response).to have_http_status(400)
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,92 @@
1
+ # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
4
+ # this file to always be loaded, without a need to explicitly require it in any
5
+ # files.
6
+ #
7
+ # Given that it is always loaded, you are encouraged to keep this file as
8
+ # light-weight as possible. Requiring heavyweight dependencies from this file
9
+ # will add to the boot time of your test suite on EVERY test run, even for an
10
+ # individual file that may not need all of that loaded. Instead, consider making
11
+ # a separate helper file that requires the additional dependencies and performs
12
+ # the additional setup, and require it from the spec files that actually need
13
+ # it.
14
+ #
15
+ # The `.rspec` file also contains a few flags that are not defaults but that
16
+ # users commonly want.
17
+ #
18
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
19
+ RSpec.configure do |config|
20
+ # rspec-expectations config goes here. You can use an alternate
21
+ # assertion/expectation library such as wrong or the stdlib/minitest
22
+ # assertions if you prefer.
23
+ config.expect_with :rspec do |expectations|
24
+ # This option will default to `true` in RSpec 4. It makes the `description`
25
+ # and `failure_message` of custom matchers include text for helper methods
26
+ # defined using `chain`, e.g.:
27
+ # be_bigger_than(2).and_smaller_than(4).description
28
+ # # => "be bigger than 2 and smaller than 4"
29
+ # ...rather than:
30
+ # # => "be bigger than 2"
31
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
32
+ end
33
+
34
+ # rspec-mocks config goes here. You can use an alternate test double
35
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
36
+ config.mock_with :rspec do |mocks|
37
+ # Prevents you from mocking or stubbing a method that does not exist on
38
+ # a real object. This is generally recommended, and will default to
39
+ # `true` in RSpec 4.
40
+ mocks.verify_partial_doubles = true
41
+ end
42
+
43
+ # The settings below are suggested to provide a good initial experience
44
+ # with RSpec, but feel free to customize to your heart's content.
45
+ =begin
46
+ # These two settings work together to allow you to limit a spec run
47
+ # to individual examples or groups you care about by tagging them with
48
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
49
+ # get run.
50
+ config.filter_run :focus
51
+ config.run_all_when_everything_filtered = true
52
+
53
+ # Allows RSpec to persist some state between runs in order to support
54
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
55
+ # you configure your source control system to ignore this file.
56
+ config.example_status_persistence_file_path = "spec/examples.txt"
57
+
58
+ # Limits the available syntax to the non-monkey patched syntax that is
59
+ # recommended. For more details, see:
60
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
61
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
62
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
63
+ config.disable_monkey_patching!
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,258 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: master_api_key
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Flynn Jones
8
+ - Prakash Vadrevu
9
+ - Srikanth Gurram
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain:
13
+ - |
14
+ -----BEGIN CERTIFICATE-----
15
+ MIIFyTCCA7GgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBnTELMAkGA1UEBhMCVVMx
16
+ ETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEYMBYGA1UEChMP
17
+ QW1wbGlmeSBIb2xkaW5nMR0wGwYDVQQDExRBbXBsaWZ5IEhvbGRpbmcgUm9vdDEv
18
+ MC0GCSqGSIb3DQEJARYgYW1wbGlmeS1ob2xkaW5nQGdvb2dsZWdyb3Vwcy5jb20w
19
+ IBcNMTYwNDI1MTcxMTAwWhgPMjExNjA0MjUxNzExMDBaMIGdMQswCQYDVQQGEwJV
20
+ UzERMA8GA1UECBMITmV3IFlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRgwFgYDVQQK
21
+ Ew9BbXBsaWZ5IEhvbGRpbmcxHTAbBgNVBAMTFEFtcGxpZnkgSG9sZGluZyBSb290
22
+ MS8wLQYJKoZIhvcNAQkBFiBhbXBsaWZ5LWhvbGRpbmdAZ29vZ2xlZ3JvdXBzLmNv
23
+ bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALO+El7UIgEmiigiTqHd
24
+ EtEwh8TAI5vAC/QdEOUXL4WUhj7mu9/Rn5ayGUKjoysQUxPf4dRGDeOdqBt2Gv2Q
25
+ PlI9lwJ7hktbyrAjxerF8GI0XKpN8oKcrGtgurt2hkqLDiWwllu9jIFTtzByzQO3
26
+ z3yyMjrMr2OQj4ZTQzwEVhYSjOKOCR3DMn9G93EBCrtahdYZ+XQvXdz6fgstwFwM
27
+ weCUFkOKT4pqUG2Rce/YvC51TO3oFPvSHmptJGdWTGl6zfs0Zp0/dDS542db+NiI
28
+ 4kpAFwz08mJ749YBsJcC9gQSnqucRguC+od8FofluD+WAVBclQRSLrlY/DttKW3p
29
+ k3n3Q76D/YGTMOwGQ72zHpC50XXE4qRZAY2eSj0CIz+3ZPtPWND/Uy2big1PLVk8
30
+ 7cLxRPqPVWhDvp+COwN10rMFDHUnI+wM3pLIqFPgc/irTQlklHtDklnOWk6NXZ+M
31
+ uhMwlK0WUUXUSyyzb8QGw5jgIse6VAZwqpTf4hwqWNCs+iXT7iCQ1BHO9U8YNfWs
32
+ hRi1cp0Ik0pjxUvz2kWczqPwoygRi76MAm35dIJRdH1Na5v6DzQ8Gm9XYh5mgQND
33
+ dynhMb//KHQ5pVbDprib48L583WyeBk25dOxVJ7AXTkPVZTn+oAAUMgSf/xxKwG+
34
+ xdY708rz4EJ2MyPyF4Bu3LdjAgMBAAGjEDAOMAwGA1UdEwQFMAMBAf8wDQYJKoZI
35
+ hvcNAQELBQADggIBAHibCS6SOpcbrjg7FxKs1931adj8DM+ZUV1LjL50nSWaBERM
36
+ 1hseQLhCzlMmqMtQk/boCxKPHQlaJTJd5TgV1ohOT/yN5BMYhKmYey51KpGOWMnj
37
+ HlwKEC1HomTga6hxKbBjIu6sgNbitBFT9JKi2WROxvJrmdRwXU6uh0aYJNuHLiul
38
+ mBGRFiXmJnsP8G5tPsbUBpL6DwlieaH04va5bWwIU0qJiwJzwftDAFw3PmSDnovA
39
+ G9Piktr0mwsNrlPLXHZc7xyATcs76JyuZFNwsZqx67gydGfeHAXF+VvUHTL5oEG/
40
+ P+EghSh0ANDnx7q6fWxjLRir/pVHuAUrQXIfRGJ6sYm1GJi+jdQz1uKwXm14cbgo
41
+ QuTP/jzInymqtEZcrDMOL8i+49QNWeldIk62PesqFb4rCwLyxYqwP3FqpDt2iKkx
42
+ 3LdSx3xtodYm7GlyhlhuCfnFUJHwPgitTU5t1FpnE8gedYWn4EL+/mQ3rGpO+Ci5
43
+ obLpcdzOqdeWcOUM5doNxPsArAvVJmf3N1xQEu814QSTH/JZzdHc7AbQ43jIuDce
44
+ HH4/JTdy/C+4xUIEmUZle9vQd83EexjHP8LjjDidPigUNeiBkmrZpWtnVW+9lU7c
45
+ NuC2BA1+5oTpMVdhqKhbdW5Da/w4gi6bsare4VKzgXusRdRnvGRw4ed9YHaQ
46
+ -----END CERTIFICATE-----
47
+ - |
48
+ -----BEGIN CERTIFICATE-----
49
+ MIIEujCCAqKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCVVMx
50
+ ETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEYMBYGA1UEChMP
51
+ QW1wbGlmeSBIb2xkaW5nMR0wGwYDVQQDExRBbXBsaWZ5IEhvbGRpbmcgUm9vdDEv
52
+ MC0GCSqGSIb3DQEJARYgYW1wbGlmeS1ob2xkaW5nQGdvb2dsZWdyb3Vwcy5jb20w
53
+ HhcNMTYwNDI1MTcxODMwWhcNMTcwNDI1MTcxODMwWjBEMRQwEgYDVQQDDAtmbHlu
54
+ bi5qb25lczEXMBUGCgmSJomT8ixkARkWB291dGxvb2sxEzARBgoJkiaJk/IsZAEZ
55
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGY+zWpcWs7SgE
56
+ xrib8f3vz0xNF6XhQJZT1g2VNX95ZiKSaFCId8sL4GohYM85VnAWM0zfiA4/bXqM
57
+ 22yxUW6onTbWSEyCPQf5A8j+9u69aPfX9Pl0G2qz8l528KbxqHrHhRSj5H+yl4k4
58
+ w1X4sbPPjH+JP1hG5rMaAPf+4jopubSXzI3ZzS08BEtBX8BQbXSctq7YeiL8kxyr
59
+ cdGFXpkyCFHrAUfrBEECKeWNw6Uk9tTDaQo6G0e2mkJzxeiriupGydB1d3vMa3uS
60
+ I/GTOAdFGfv+1beuP8K2q2k14bqDhe3Uhou1uBCMahFV+fTIdPtKiXvARMpulJ6v
61
+ +V7OqjiDAgMBAAGjXTBbMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
62
+ BBSQBnOKxlgDXhDCNoPag+c4+JX1ZTAiBgNVHREEGzAZgRdmbHlubi5qb25lc0Bv
63
+ dXRsb29rLmNvbTANBgkqhkiG9w0BAQUFAAOCAgEAg/yuj/EtZtsUAF1AdUlZCPPU
64
+ zUzsgP2C7u6fjmHt2qdDNeSQNiGeAnlBVrO8kftgM5hikJUBrOVzQuLsfeNFBwTM
65
+ m46+Zte48Ap24rHNmAqG/y9wD3u2/VuS/vUqYyRpFRYrZB/semgM9jtU5RnX3pvU
66
+ /WV74x3PAgJ6UwVNjXqqJHXgIdU+C0gW2fAYwzcpZZ8LeemeAD8z/JxS2YmEJvGQ
67
+ dalYlvk67xrUhnzXhE7LLkwwia9+8HgYv5ScjphcZ4C0nqmEqf3Isjse3Pib2En0
68
+ A29hNzyBD/4db2dNvHMm2NJ0AvtKQP/TRwyZMOCf5VLAILvHAM+Tm+wKkA0OIO74
69
+ O9b1Kb4eS7TBmkc+h9l44LIx6Y7GpDnVq97h5mcvag+Nhu0s78isGjHfPror1FKo
70
+ jb9IMSbD6OWOIZz4z8rHFKjBzJEkyYcjhaCTCqEZEJD9UTeHiewV7wzLHN1ijL1k
71
+ aXt60c1mRoK4E9uxNrI1G1/VUzoPekXZQgJ+ZbwuWf3/Us+7S1/aRwZkmMTgmpq0
72
+ 1oS3mx7IxqXVgpyMbbt9tqiMhJi/uGFyCg7msTRVpjz8JN1nVWHMKj6xfeBgTb3q
73
+ 7xfdQKID/bwhqUq9whTwTX2J61RCxyS+eqIRfWOYAUphZanwFD9c3uNWa+8KAhC2
74
+ oHN/0fktfVzQYUsHnZ4=
75
+ -----END CERTIFICATE-----
76
+ date: 2016-04-14 00:00:00.000000000 Z
77
+ dependencies:
78
+ - !ruby/object:Gem::Dependency
79
+ name: rails
80
+ requirement: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '4.0'
85
+ - - "<"
86
+ - !ruby/object:Gem::Version
87
+ version: '5.0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '4.0'
95
+ - - "<"
96
+ - !ruby/object:Gem::Version
97
+ version: '5.0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '3.4'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '3.4'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec-rails
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '3.4'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '3.4'
126
+ - !ruby/object:Gem::Dependency
127
+ name: activerecord-jdbcmysql-adapter
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.3'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.3'
140
+ description: This gem gives a developer a set of tools to provide authorized access
141
+ their endpoints.
142
+ email:
143
+ - flynn.jones@outlook.com
144
+ - pvadrevu@amplify.com
145
+ - 'sgurram@amplify.com '
146
+ executables: []
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - app/controllers/master_api_key/api_keys_controller.rb
151
+ - app/controllers/master_api_key/application_controller.rb
152
+ - app/models/master_api_key/api_key.rb
153
+ - config/master_api_key.gemversion
154
+ - config/routes.rb
155
+ - db/migrate/20160329212147_create_master_api_key_api_keys.rb
156
+ - db/migrate/20160330160153_add_group_column.rb
157
+ - db/migrate/20160407194542_require_group_attribute.rb
158
+ - db/migrate/20160411152807_create_master_key.rb
159
+ - db/seeds.rb
160
+ - lib/master_api_key.rb
161
+ - lib/master_api_key/api_gatekeeper.rb
162
+ - lib/master_api_key/engine.rb
163
+ - lib/master_api_key/version.rb
164
+ - spec/controllers/master_api_key/api_keys_controller_spec.rb
165
+ - spec/dummy/Rakefile
166
+ - spec/dummy/app/controllers/application_controller.rb
167
+ - spec/dummy/app/controllers/empty_group_controller.rb
168
+ - spec/dummy/app/controllers/nil_group_controller.rb
169
+ - spec/dummy/bin/bundle
170
+ - spec/dummy/bin/rails
171
+ - spec/dummy/bin/rake
172
+ - spec/dummy/bin/setup
173
+ - spec/dummy/config.ru
174
+ - spec/dummy/config/application.rb
175
+ - spec/dummy/config/boot.rb
176
+ - spec/dummy/config/database.yml
177
+ - spec/dummy/config/environment.rb
178
+ - spec/dummy/config/environments/development.rb
179
+ - spec/dummy/config/environments/production.rb
180
+ - spec/dummy/config/environments/test.rb
181
+ - spec/dummy/config/initializers/backtrace_silencers.rb
182
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
183
+ - spec/dummy/config/initializers/inflections.rb
184
+ - spec/dummy/config/initializers/mime_types.rb
185
+ - spec/dummy/config/initializers/session_store.rb
186
+ - spec/dummy/config/initializers/wrap_parameters.rb
187
+ - spec/dummy/config/locales/en.yml
188
+ - spec/dummy/config/routes.rb
189
+ - spec/dummy/config/secrets.yml
190
+ - spec/dummy/db/schema.rb
191
+ - spec/dummy/db/seeds.rb
192
+ - spec/dummy/log/development.log
193
+ - spec/dummy/log/test.log
194
+ - spec/master_api_key/api_gatekeeper_spec.rb
195
+ - spec/rails_helper.rb
196
+ - spec/requests/master_api_key/integration_spec.rb
197
+ - spec/requests/master_api_key/master_api_key_api_keys_spec.rb
198
+ - spec/spec_helper.rb
199
+ homepage: https://github.com/amplify-holding/master_api_key
200
+ licenses:
201
+ - MIT
202
+ metadata: {}
203
+ post_install_message:
204
+ rdoc_options: []
205
+ require_paths:
206
+ - lib
207
+ required_ruby_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ required_rubygems_version: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ requirements: []
218
+ rubyforge_project:
219
+ rubygems_version: 2.4.5.1
220
+ signing_key:
221
+ specification_version: 4
222
+ summary: Secure Access of API with API Keys.
223
+ test_files:
224
+ - spec/controllers/master_api_key/api_keys_controller_spec.rb
225
+ - spec/dummy/app/controllers/application_controller.rb
226
+ - spec/dummy/app/controllers/empty_group_controller.rb
227
+ - spec/dummy/app/controllers/nil_group_controller.rb
228
+ - spec/dummy/bin/bundle
229
+ - spec/dummy/bin/rails
230
+ - spec/dummy/bin/rake
231
+ - spec/dummy/bin/setup
232
+ - spec/dummy/config/application.rb
233
+ - spec/dummy/config/boot.rb
234
+ - spec/dummy/config/database.yml
235
+ - spec/dummy/config/environment.rb
236
+ - spec/dummy/config/environments/development.rb
237
+ - spec/dummy/config/environments/production.rb
238
+ - spec/dummy/config/environments/test.rb
239
+ - spec/dummy/config/initializers/backtrace_silencers.rb
240
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
241
+ - spec/dummy/config/initializers/inflections.rb
242
+ - spec/dummy/config/initializers/mime_types.rb
243
+ - spec/dummy/config/initializers/session_store.rb
244
+ - spec/dummy/config/initializers/wrap_parameters.rb
245
+ - spec/dummy/config/locales/en.yml
246
+ - spec/dummy/config/routes.rb
247
+ - spec/dummy/config/secrets.yml
248
+ - spec/dummy/config.ru
249
+ - spec/dummy/db/schema.rb
250
+ - spec/dummy/db/seeds.rb
251
+ - spec/dummy/log/development.log
252
+ - spec/dummy/log/test.log
253
+ - spec/dummy/Rakefile
254
+ - spec/master_api_key/api_gatekeeper_spec.rb
255
+ - spec/rails_helper.rb
256
+ - spec/requests/master_api_key/integration_spec.rb
257
+ - spec/requests/master_api_key/master_api_key_api_keys_spec.rb
258
+ - spec/spec_helper.rb