faye-authentication 1.9.0 → 1.13
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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +3 -2
- data/CHANGELOG.md +17 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/app/assets/javascripts/faye-authentication.js +7 -6
- data/faye-authentication.gemspec +12 -11
- data/lib/faye/authentication.rb +2 -1
- data/lib/faye/authentication/http_client.rb +4 -4
- data/lib/faye/authentication/server_extension.rb +1 -0
- data/spec/javascripts/faye-authentication_spec.js +9 -2
- data/spec/javascripts/faye-extension_spec.js +44 -3
- data/spec/javascripts/support/jasmine_helper.rb +4 -7
- data/spec/lib/faye/authentication/http_client_spec.rb +12 -1
- data/spec/lib/faye/authentication/server_extension_spec.rb +5 -0
- data/spec/lib/faye/authentication_spec.rb +9 -0
- metadata +58 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7df2f00525686219899b087a97cd26dda4d0beb817de711c7009e0b1f2d73172
|
4
|
+
data.tar.gz: 87ed8fcf147384cf3c2a2f43ef32488e0592cac79e00f5360b4dd4b95d40bde6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b3cd29b0f5384af09976d723a30d2878e172ff15a9c125b109b27ff3592ce684446474799f8e035664cdc9af0458d005143ef05fed3539b31347a3eed627a5a
|
7
|
+
data.tar.gz: fba06b490b06c432ea3fdd7bd897c55f75f1ee2e20c7e68f59e8900037a454d007a1665ec251d04fc83387540e152ee459cfae4c1296909fa3b68db697ba07b2
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -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 [](https://travis-ci.org/jarthod/faye-authentication)
|
2
2
|
|
3
3
|
Authentification implementation for faye
|
4
4
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
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
|
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;
|
data/faye-authentication.gemspec
CHANGED
@@ -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@
|
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/
|
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
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency 'rspec'
|
27
|
-
spec.add_development_dependency 'rspec-eventmachine'
|
28
|
-
spec.add_development_dependency 'jasmine'
|
29
|
-
spec.add_development_dependency '
|
30
|
-
spec.add_development_dependency '
|
31
|
-
spec.add_development_dependency '
|
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
|
data/lib/faye/authentication.rb
CHANGED
@@ -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
|
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
|
@@ -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
|
-
|
6
|
-
|
7
|
-
|
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(:
|
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.
|
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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
|
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
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
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: '
|
169
|
+
version: '0'
|
153
170
|
description: A faye extension to add authentication mechanisms
|
154
171
|
email:
|
155
|
-
- adrien.siami@
|
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/
|
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.
|
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:
|