faye-authentication 1.9.0 → 1.13

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
- SHA1:
3
- metadata.gz: 8a23b39985abaf9a9b77bb686e9dd9b7779c1dbd
4
- data.tar.gz: f6ac3cd6d79171cb0a56e1d7a928397605347035
2
+ SHA256:
3
+ metadata.gz: 7df2f00525686219899b087a97cd26dda4d0beb817de711c7009e0b1f2d73172
4
+ data.tar.gz: 87ed8fcf147384cf3c2a2f43ef32488e0592cac79e00f5360b4dd4b95d40bde6
5
5
  SHA512:
6
- metadata.gz: bfc5f3e28c62c4e374057a0fd00384c32df7d24b6cf30c3377692cdf3616abed95a0721d16b540113e0edfc4b2f057965810789ceed2c2daadc39c917190cb01
7
- data.tar.gz: a35a542c86ec95b394aeccf0a3fb7f5e24fb487def4b4984d4ac283e77b7e73120f7ae35a9461e7185a39a4c1ee5f889ebc685a4156310118bba4a8f67c16357
6
+ metadata.gz: 4b3cd29b0f5384af09976d723a30d2878e172ff15a9c125b109b27ff3592ce684446474799f8e035664cdc9af0458d005143ef05fed3539b31347a3eed627a5a
7
+ data.tar.gz: fba06b490b06c432ea3fdd7bd897c55f75f1ee2e20c7e68f59e8900037a454d007a1665ec251d04fc83387540e152ee459cfae4c1296909fa3b68db697ba07b2
data/.gitignore CHANGED
@@ -2,6 +2,7 @@
2
2
  *.rbc
3
3
  .bundle
4
4
  .config
5
+ .ruby-version
5
6
  .yardoc
6
7
  Gemfile.lock
7
8
  InstalledFiles
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.2
4
- - 1.9.3
3
+ - 2.6.5
4
+ - 2.5.7
5
+ - 2.4.9
@@ -1,5 +1,22 @@
1
+ ## 1.13
2
+ - Fix [CVE-2020-11020](https://github.com/faye/faye/security/advisories/GHSA-qpg4-4w7w-2mq5)
3
+
4
+ ## 1.12
5
+ - No longer retry and fetch a new signature after errors unrelated to `Faye::Authentication` (#15)
6
+ - Internal:
7
+ - Fix rspec and jasmine specs (#14)
8
+ - Replace `phantomjs` with `chromeheadless` for jasmine specs (#14)
9
+ - Updated Travis settings with last ruby versions (#14)
10
+
11
+ ## 1.11.0
12
+ - Optional authentication for `Faye::Authentication::HTTPClient` (#12)
13
+
14
+ ## 1.10.0
15
+ - Remove signature from the server response (#11)
16
+
1
17
  ## 1.8.1
2
18
  - Fix bad parameter passed to Net::HTTP::Post in HTTP Client (thanks @evserykh)
19
+
3
20
  ## 1.8.0
4
21
  - Wait a delay before trying to fetch a signature after an error
5
22
 
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Faye::Authentication [![Build Status](https://travis-ci.org/dimelo/faye-authentication.svg?branch=master)](https://travis-ci.org/dimelo/faye-authentication) [![Code Climate](https://codeclimate.com/github/dimelo/faye-authentication.png)](https://codeclimate.com/github/dimelo/faye-authentication)
1
+ # Faye::Authentication [![Build Status](https://travis-ci.org/jarthod/faye-authentication.svg?branch=master)](https://travis-ci.org/jarthod/faye-authentication)
2
2
 
3
3
  Authentification implementation for faye
4
4
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.0
1
+ 1.13
@@ -8,6 +8,7 @@ function FayeAuthentication(client, endpoint, options) {
8
8
  this._waiting_signatures = [];
9
9
  this._timer = null;
10
10
  this.logger = Faye.logger;
11
+ this.ERROR_LIST = ['Expired signature', 'Required argument not signed', 'Invalid signature']
11
12
  }
12
13
 
13
14
  FayeAuthentication.prototype.endpoint = function() {
@@ -34,14 +35,14 @@ FayeAuthentication.prototype.resolveWaitingSignatures = function() {
34
35
  return (e.channel == params.channel && e.clientId == params.clientId);
35
36
  })[0];
36
37
  if (typeof signature === 'undefined') {
37
- self.logger.error('No signature found in ajax reply for channel ' + params.channel + ' and clientId ' + params.clientId);
38
+ self.logger.error('[Faye] No signature found in ajax reply for channel ' + params.channel + ' and clientId ' + params.clientId);
38
39
  } else if (signature && !signature.signature) {
39
- self.logger.error('Error when fetching signature for channel ' + params.channel + ' and clientId ' + params.clientId + ', error was : "' + signature.error + '"');
40
+ self.logger.error('[Faye] Error when fetching signature for channel ' + params.channel + ' and clientId ' + params.clientId + ', error was : "' + signature.error + '"');
40
41
  }
41
42
  FayeAuthentication.Promise.resolve(self._signatures[params.clientId][params.channel], signature ? signature.signature : null);
42
43
  });
43
44
  }, 'json').fail(function(xhr, textStatus, e) {
44
- self.logger.error('Failure when trying to fetch JWT signature for data "' + JSON.stringify(messages) + '", error was : ' + textStatus);
45
+ self.logger.error('[Faye] Failure when trying to fetch JWT signature for data "' + JSON.stringify(messages) + '", error was : ' + textStatus);
45
46
  $.each(messages, function(key, params) {
46
47
  FayeAuthentication.Promise.resolve(self._signatures[params.clientId][params.channel], null);
47
48
  });
@@ -91,12 +92,12 @@ FayeAuthentication.prototype.outgoing = function(message, callback) {
91
92
 
92
93
  FayeAuthentication.prototype.authentication_required = function(message) {
93
94
  var subscription_or_channel = message.subscription || message.channel;
94
- if (message.channel == '/meta/subscribe' || message.channel.lastIndexOf('/meta/', 0) !== 0) {
95
+ if (message.channel.lastIndexOf('/meta/subscribe') === 0 || message.channel.lastIndexOf('/meta/', 0) !== 0) {
95
96
  if(this._options.whitelist) {
96
97
  try {
97
98
  return (!this._options.whitelist(subscription_or_channel));
98
99
  } catch (e) {
99
- this.logger.error("Error caught when evaluating whitelist function : " + e.message);
100
+ this.logger.error("[Faye] Error caught when evaluating whitelist function : " + e.message);
100
101
  }
101
102
  }
102
103
  return (true);
@@ -106,7 +107,7 @@ FayeAuthentication.prototype.authentication_required = function(message) {
106
107
 
107
108
  FayeAuthentication.prototype.incoming = function(message, callback) {
108
109
  var outbox_message = this._outbox[message.id];
109
- if (outbox_message && message.error) {
110
+ if (outbox_message && message.error && this.ERROR_LIST.indexOf(message.error) != -1) {
110
111
  var channel = outbox_message.message.subscription || outbox_message.message.channel;
111
112
  this._signatures[outbox_message.clientId][channel] = null;
112
113
  outbox_message.message.retried = true;
@@ -6,11 +6,11 @@ require 'faye/authentication/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "faye-authentication"
8
8
  spec.version = Faye::Authentication::VERSION
9
- spec.authors = ["Adrien Siami"]
10
- spec.email = ["adrien.siami@dimelo.com"]
9
+ spec.authors = ["Adrien Siami", "Adrien Rey-Jarthon", "Cyril Le Roy", "Fabien Chaynes"]
10
+ spec.email = ["adrien.siami@gmail.com", "jobs@adrienjarthon.com", "cyril.leroy44@gmail.com", "fabien.chaynes@ringcentral.com"]
11
11
  spec.summary =
12
12
  spec.description = "A faye extension to add authentication mechanisms"
13
- spec.homepage = "https://github.com/dimelo/faye-authentication"
13
+ spec.homepage = "https://github.com/jarthod/faye-authentication"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -21,12 +21,13 @@ Gem::Specification.new do |spec|
21
21
  spec.add_runtime_dependency 'jwt', '>= 1.2'
22
22
  spec.add_runtime_dependency 'faye', '>= 1.0'
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.5"
25
- spec.add_development_dependency "rake", '~> 10.3'
26
- spec.add_development_dependency 'rspec', '~> 3.0'
27
- spec.add_development_dependency 'rspec-eventmachine', '~> 0.2'
28
- spec.add_development_dependency 'jasmine', '~> 2.0'
29
- spec.add_development_dependency 'rack', '~> 1.5'
30
- spec.add_development_dependency 'thin', '~> 1.6'
31
- spec.add_development_dependency 'webmock', '~> 1.18'
24
+ spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rspec'
27
+ spec.add_development_dependency 'rspec-eventmachine'
28
+ spec.add_development_dependency 'jasmine'
29
+ spec.add_development_dependency 'chrome_remote'
30
+ spec.add_development_dependency 'rack'
31
+ spec.add_development_dependency 'thin'
32
+ spec.add_development_dependency 'webmock'
32
33
  end
@@ -41,7 +41,8 @@ module Faye
41
41
 
42
42
  def self.authentication_required?(message, options = {})
43
43
  subscription_or_channel = message['subscription'] || message['channel']
44
- return false unless (message['channel'] == '/meta/subscribe' || (!(message['channel'].start_with?('/meta/'))))
44
+ return false if message['channel'].nil?
45
+ return false unless (message['channel'].start_with?('/meta/subscribe') || (!(message['channel'].start_with?('/meta/'))))
45
46
  whitelist_proc = options[:whitelist]
46
47
  if whitelist_proc
47
48
  begin
@@ -4,16 +4,16 @@ module Faye
4
4
  module Authentication
5
5
  class HTTPClient
6
6
 
7
- def self.publish(url, channel, data, key)
7
+ def self.publish(url, channel, data, key, options = {})
8
8
  uri = URI(url)
9
- req = prepare_request(uri.request_uri, channel, data, key)
9
+ req = prepare_request(uri.request_uri, channel, data, key, options)
10
10
  Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') { |http| http.request(req) }
11
11
  end
12
12
 
13
- def self.prepare_request(uri, channel, data, key)
13
+ def self.prepare_request(uri, channel, data, key, options = {})
14
14
  req = Net::HTTP::Post.new(uri)
15
15
  message = {'channel' => channel, 'clientId' => 'http'}
16
- message['signature'] = Faye::Authentication.sign(message, key)
16
+ message['signature'] = Faye::Authentication.sign(message, key) if Faye::Authentication.authentication_required?(message, options)
17
17
  message['data'] = data
18
18
  req.set_form_data(message: JSON.dump(message))
19
19
  req
@@ -26,6 +26,7 @@ module Faye
26
26
  end
27
27
  debug("Authentication failed: #{message['error']}")
28
28
  end
29
+ message.delete('signature')
29
30
  end
30
31
  callback.call(message)
31
32
  end
@@ -27,8 +27,8 @@ describe('faye-authentication', function() {
27
27
  describe('authentication_required', function() {
28
28
 
29
29
  beforeEach(function() {
30
+ Faye.logger = {error: function() {}};
30
31
  this.auth = new FayeAuthentication(new Faye.Client('http://example.com'));
31
- Faye.logger = null;
32
32
  });
33
33
 
34
34
  function sharedExamplesForSubscribeAndPublish() {
@@ -45,7 +45,6 @@ describe('faye-authentication', function() {
45
45
 
46
46
  it('logs error if the function throws', function() {
47
47
  this.auth._options.whitelist = function(message) { throw new Error("boom"); }
48
- Faye.logger = {error: function() {}};
49
48
  spyOn(Faye.logger, 'error');
50
49
  this.auth.authentication_required(this.message);
51
50
  expect(Faye.logger.error).toHaveBeenCalledWith('[Faye] Error caught when evaluating whitelist function : boom');
@@ -95,6 +94,14 @@ describe('faye-authentication', function() {
95
94
  sharedExamplesForSubscribeAndPublish();
96
95
  });
97
96
 
97
+ describe('subscribe with prefix', function() {
98
+ beforeEach(function() {
99
+ this.message = {'channel': '/meta/subscribe/x', 'subscription': '/foobar'};
100
+ });
101
+
102
+ sharedExamplesForSubscribeAndPublish();
103
+ });
104
+
98
105
  describe('handshake', function() {
99
106
  beforeEach(function() {
100
107
  this.message = {'channel': '/meta/handshake'};
@@ -1,5 +1,6 @@
1
1
  describe('Faye extension', function() {
2
2
  beforeEach(function() {
3
+ Faye.logger = {error: function() {}};
3
4
  this.client = new Faye.Client('http://localhost:9296/faye');
4
5
  jasmine.Ajax.install();
5
6
  });
@@ -10,13 +11,15 @@ describe('Faye extension', function() {
10
11
 
11
12
  describe('Without extension', function() {
12
13
  it('fails to subscribe', function(done) {
13
- this.client.subscribe('/foobar').then(undefined, function() {
14
+ this.client.subscribe('/foobar').then(undefined, function(e) {
15
+ expect(e.message).toBe('Invalid signature')
14
16
  done();
15
17
  });
16
18
  });
17
19
 
18
20
  it('fails to publish', function(done) {
19
- this.client.publish('/foobar', {text: 'whatever'}).then(undefined, function() {
21
+ this.client.publish('/foobar', {text: 'whatever'}).then(undefined, function(e) {
22
+ expect(e.message).toBe('Invalid signature')
20
23
  done();
21
24
  });
22
25
  });
@@ -71,7 +74,6 @@ describe('Faye extension', function() {
71
74
  this.dispatcher = {connectionType: "fake", clientId: '1234', sendMessage: function() {}, selectTransport: function() { }};
72
75
  spyOn(this.dispatcher, 'sendMessage');
73
76
  spyOn(this.dispatcher, 'selectTransport');
74
- Faye.extend(this.dispatcher, Faye.Publisher)
75
77
  });
76
78
 
77
79
  it('should add the signature to subscribe message', function(done) {
@@ -318,5 +320,44 @@ describe('Faye extension', function() {
318
320
 
319
321
  });
320
322
 
323
+ it('does not retry if the error is unrelated to authentication', function(done) {
324
+ other_client = new Faye.Client('http://localhost:9296/faye');
325
+ auth_extension = new FayeAuthentication(other_client, null, { retry_delay: 100 });
326
+ tweak_extension = {
327
+ incoming: function(message, callback) {
328
+ console.log('message',message)
329
+ if (message.error) {
330
+ message.error = 'Not an Authentication error';
331
+ }
332
+ callback(message);
333
+ }
334
+ }
335
+ other_client.addExtension(tweak_extension);
336
+ other_client.addExtension(this.extension);
337
+
338
+ jasmine.Ajax.stubRequest('/faye/auth').andReturn({
339
+ 'responseText': '{"signature": "bad"}'
340
+ });
341
+
342
+ var finished = false;
343
+ other_client.subscribe('/toto').then(undefined, function() {
344
+ finished = true;
345
+ });
346
+
347
+ setTimeout(function() {
348
+
349
+ // Initial 200ms batching delay
350
+
351
+ setTimeout(function() {
352
+ expect(finished).toBe(true);
353
+ }, 200 + 80); // 2nd Batching delay + 80 ms
354
+
355
+ setTimeout(function() {
356
+ expect(finished).toBe(true);
357
+ done();
358
+ }, 200 + 200); // 2nd Batching delay + 200 ms
359
+ }, 200);
360
+ });
361
+
321
362
  });
322
363
  });
@@ -1,13 +1,10 @@
1
1
  #Use this file to set/override Jasmine configuration options
2
2
  #You can remove it if you don't need it.
3
3
  #This file is loaded *after* jasmine.yml is interpreted.
4
- #
5
- #Example: using a different boot file.
6
- #Jasmine.configure do |config|
7
- # config.boot_dir = '/absolute/path/to/boot_dir'
8
- # config.boot_files = lambda { ['/absolute/path/to/boot_dir/file.js'] }
9
- #end
10
- #
4
+
5
+ Jasmine.configure do |config|
6
+ config.runner_browser = :chromeheadless
7
+ end
11
8
 
12
9
  require 'faye'
13
10
  require 'faye/authentication'
@@ -9,11 +9,22 @@ describe Faye::Authentication::HTTPClient do
9
9
  message = {'channel' => '/foo/bar', 'clientId' => 'http'}
10
10
  message['signature'] = Faye::Authentication.sign(message, 'my private key')
11
11
  message['data'] = 'hello'
12
- request = stub_request(:post, "http://www.example.com").with(:body => {:message => JSON.dump(message)}).to_return(:status => 200, :body => "", :headers => {})
12
+ request = stub_request(:post, "http://www.example.com").with(body: {message: JSON.dump(message)}).to_return(status: 200, body: "", headers: {})
13
13
  Faye::Authentication::HTTPClient.publish('http://www.example.com', '/foo/bar', "hello", 'my private key')
14
14
  expect(request).to have_been_made
15
15
  end
16
16
 
17
+ it 'should not add a signature if the channel is whitelisted' do
18
+ message = {'channel' => '/foo/bar', 'clientId' => 'http'}
19
+ message['data'] = 'hello'
20
+ request = stub_request(:post, "http://www.example.com").with(body: {message: JSON.dump(message)}).to_return(status: 200, body: "", headers: {})
21
+ whitelist = lambda do |channel|
22
+ channel.start_with?('/foo/')
23
+ end
24
+ Faye::Authentication::HTTPClient.publish('http://www.example.com', '/foo/bar', "hello", 'my private key', { whitelist: whitelist })
25
+ expect(request).to have_been_made
26
+ end
27
+
17
28
  end
18
29
 
19
30
  end
@@ -33,6 +33,11 @@ describe Faye::Authentication::ServerExtension do
33
33
  context 'with signature' do
34
34
  before { message['signature'] = Faye::Authentication.sign(message.merge({'channel' => channel}), secret) }
35
35
  it_should_behave_like 'signature_has_no_error'
36
+
37
+ it 'removes the signature in the response' do
38
+ subject
39
+ expect(@result).not_to have_key('signature')
40
+ end
36
41
  end
37
42
 
38
43
  context 'without signature' do
@@ -95,6 +95,10 @@ describe Faye::Authentication do
95
95
  it 'returns false if lambda returns true' do
96
96
  expect(Faye::Authentication.authentication_required?(message, {whitelist: lambda { |message| true }})).to be(false)
97
97
  end
98
+
99
+ it 'returns false if channel is nil' do
100
+ expect(Faye::Authentication.authentication_required?('clientId' => clientId, 'text' => 'whatever')).to be(false)
101
+ end
98
102
  end
99
103
 
100
104
  shared_examples 'meta_except_subscribe' do
@@ -128,6 +132,11 @@ describe Faye::Authentication do
128
132
  it_behaves_like 'subscribe_and_publish'
129
133
  end
130
134
 
135
+ context 'subscribe with prefix' do
136
+ let(:message) { {'channel' => '/meta/subscribe/x', 'subscription' => '/foobar'} }
137
+ it_behaves_like 'subscribe_and_publish'
138
+ end
139
+
131
140
  context 'handshake' do
132
141
  let(:message) { {'channel' => '/meta/handshake'} }
133
142
  it_behaves_like 'meta_except_subscribe'
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faye-authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: '1.13'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Siami
8
+ - Adrien Rey-Jarthon
9
+ - Cyril Le Roy
10
+ - Fabien Chaynes
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2018-08-02 00:00:00.000000000 Z
14
+ date: 2020-05-26 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: jwt
@@ -42,117 +45,134 @@ dependencies:
42
45
  name: bundler
43
46
  requirement: !ruby/object:Gem::Requirement
44
47
  requirements:
45
- - - "~>"
48
+ - - ">="
46
49
  - !ruby/object:Gem::Version
47
- version: '1.5'
50
+ version: '0'
48
51
  type: :development
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
53
56
  - !ruby/object:Gem::Version
54
- version: '1.5'
57
+ version: '0'
55
58
  - !ruby/object:Gem::Dependency
56
59
  name: rake
57
60
  requirement: !ruby/object:Gem::Requirement
58
61
  requirements:
59
- - - "~>"
62
+ - - ">="
60
63
  - !ruby/object:Gem::Version
61
- version: '10.3'
64
+ version: '0'
62
65
  type: :development
63
66
  prerelease: false
64
67
  version_requirements: !ruby/object:Gem::Requirement
65
68
  requirements:
66
- - - "~>"
69
+ - - ">="
67
70
  - !ruby/object:Gem::Version
68
- version: '10.3'
71
+ version: '0'
69
72
  - !ruby/object:Gem::Dependency
70
73
  name: rspec
71
74
  requirement: !ruby/object:Gem::Requirement
72
75
  requirements:
73
- - - "~>"
76
+ - - ">="
74
77
  - !ruby/object:Gem::Version
75
- version: '3.0'
78
+ version: '0'
76
79
  type: :development
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
- - - "~>"
83
+ - - ">="
81
84
  - !ruby/object:Gem::Version
82
- version: '3.0'
85
+ version: '0'
83
86
  - !ruby/object:Gem::Dependency
84
87
  name: rspec-eventmachine
85
88
  requirement: !ruby/object:Gem::Requirement
86
89
  requirements:
87
- - - "~>"
90
+ - - ">="
88
91
  - !ruby/object:Gem::Version
89
- version: '0.2'
92
+ version: '0'
90
93
  type: :development
91
94
  prerelease: false
92
95
  version_requirements: !ruby/object:Gem::Requirement
93
96
  requirements:
94
- - - "~>"
97
+ - - ">="
95
98
  - !ruby/object:Gem::Version
96
- version: '0.2'
99
+ version: '0'
97
100
  - !ruby/object:Gem::Dependency
98
101
  name: jasmine
99
102
  requirement: !ruby/object:Gem::Requirement
100
103
  requirements:
101
- - - "~>"
104
+ - - ">="
102
105
  - !ruby/object:Gem::Version
103
- version: '2.0'
106
+ version: '0'
104
107
  type: :development
105
108
  prerelease: false
106
109
  version_requirements: !ruby/object:Gem::Requirement
107
110
  requirements:
108
- - - "~>"
111
+ - - ">="
109
112
  - !ruby/object:Gem::Version
110
- version: '2.0'
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: chrome_remote
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
111
128
  - !ruby/object:Gem::Dependency
112
129
  name: rack
113
130
  requirement: !ruby/object:Gem::Requirement
114
131
  requirements:
115
- - - "~>"
132
+ - - ">="
116
133
  - !ruby/object:Gem::Version
117
- version: '1.5'
134
+ version: '0'
118
135
  type: :development
119
136
  prerelease: false
120
137
  version_requirements: !ruby/object:Gem::Requirement
121
138
  requirements:
122
- - - "~>"
139
+ - - ">="
123
140
  - !ruby/object:Gem::Version
124
- version: '1.5'
141
+ version: '0'
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: thin
127
144
  requirement: !ruby/object:Gem::Requirement
128
145
  requirements:
129
- - - "~>"
146
+ - - ">="
130
147
  - !ruby/object:Gem::Version
131
- version: '1.6'
148
+ version: '0'
132
149
  type: :development
133
150
  prerelease: false
134
151
  version_requirements: !ruby/object:Gem::Requirement
135
152
  requirements:
136
- - - "~>"
153
+ - - ">="
137
154
  - !ruby/object:Gem::Version
138
- version: '1.6'
155
+ version: '0'
139
156
  - !ruby/object:Gem::Dependency
140
157
  name: webmock
141
158
  requirement: !ruby/object:Gem::Requirement
142
159
  requirements:
143
- - - "~>"
160
+ - - ">="
144
161
  - !ruby/object:Gem::Version
145
- version: '1.18'
162
+ version: '0'
146
163
  type: :development
147
164
  prerelease: false
148
165
  version_requirements: !ruby/object:Gem::Requirement
149
166
  requirements:
150
- - - "~>"
167
+ - - ">="
151
168
  - !ruby/object:Gem::Version
152
- version: '1.18'
169
+ version: '0'
153
170
  description: A faye extension to add authentication mechanisms
154
171
  email:
155
- - adrien.siami@dimelo.com
172
+ - adrien.siami@gmail.com
173
+ - jobs@adrienjarthon.com
174
+ - cyril.leroy44@gmail.com
175
+ - fabien.chaynes@ringcentral.com
156
176
  executables: []
157
177
  extensions: []
158
178
  extra_rdoc_files: []
@@ -160,6 +180,7 @@ files:
160
180
  - ".drone.yml"
161
181
  - ".gitignore"
162
182
  - ".rspec"
183
+ - ".ruby-version"
163
184
  - ".travis.yml"
164
185
  - CHANGELOG.md
165
186
  - Gemfile
@@ -190,7 +211,7 @@ files:
190
211
  - spec/utils/javascripts/jwt.js
191
212
  - spec/utils/javascripts/mock-ajax.js
192
213
  - spec/utils/javascripts/query-string.js
193
- homepage: https://github.com/dimelo/faye-authentication
214
+ homepage: https://github.com/jarthod/faye-authentication
194
215
  licenses:
195
216
  - MIT
196
217
  metadata: {}
@@ -210,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
231
  version: '0'
211
232
  requirements: []
212
233
  rubyforge_project:
213
- rubygems_version: 2.5.1
234
+ rubygems_version: 2.7.6
214
235
  signing_key:
215
236
  specification_version: 4
216
237
  summary: A faye extension to add authentication mechanisms
@@ -230,4 +251,3 @@ test_files:
230
251
  - spec/utils/javascripts/jwt.js
231
252
  - spec/utils/javascripts/mock-ajax.js
232
253
  - spec/utils/javascripts/query-string.js
233
- has_rdoc: