peatio1.9 0.4.4 → 0.4.5
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 +4 -4
- data/Gemfile.lock +1 -2
- data/README.md +2 -2
- data/lib/peatio/mq/events.rb +1 -1
- data/lib/peatio/ranger.rb +64 -23
- data/lib/peatio/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c27f83d3d8bcd476b619d1935c563452c4b7290300907326c651d4a24bcc0b0
|
4
|
+
data.tar.gz: 45a725ae726b661d0a787db208a03b02864c3079863ba4aa5516fa339d3cfede
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef2e5cea2866ffc70d4fb0498da9ba8d26ad3120f9dac860f7a8402c93d37fe4d176eee0f485a1923b73ba938636f951d70844bf284df02143f306e526a99a80
|
7
|
+
data.tar.gz: 76aaf1deab676935b9ebb52a81966682963497c17ea7010d8aed09ae92259fbcec94717e6e5b604162f943d826c792a1751eae023853561752ba8b63070d01c1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
peatio1.9 (0.4.
|
4
|
+
peatio1.9 (0.4.5)
|
5
5
|
amqp
|
6
6
|
bunny
|
7
7
|
clamp
|
@@ -40,7 +40,6 @@ GEM
|
|
40
40
|
jaro_winkler (1.5.1)
|
41
41
|
json (2.3.1)
|
42
42
|
jwt (2.2.1)
|
43
|
-
mysql2 (0.5.3)
|
44
43
|
mysql2 (0.5.3-x64-mingw32)
|
45
44
|
parallel (1.12.1)
|
46
45
|
parser (2.5.1.2)
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem 'peatio'
|
12
|
+
gem 'peatio1.9', '0.4.4', require: 'peatio'
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -18,7 +18,7 @@ And then execute:
|
|
18
18
|
|
19
19
|
Or install it yourself as:
|
20
20
|
|
21
|
-
$ gem install
|
21
|
+
$ gem install peatio1.9
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
data/lib/peatio/mq/events.rb
CHANGED
data/lib/peatio/ranger.rb
CHANGED
@@ -4,7 +4,6 @@ module Peatio::Ranger
|
|
4
4
|
@authenticator = authenticator
|
5
5
|
@socket = socket
|
6
6
|
@logger = logger
|
7
|
-
@streams = []
|
8
7
|
end
|
9
8
|
|
10
9
|
def send(method, data)
|
@@ -13,21 +12,36 @@ module Peatio::Ranger
|
|
13
12
|
@socket.send payload
|
14
13
|
end
|
15
14
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
data = JSON.parse(msg)
|
15
|
+
def update_streams
|
16
|
+
@socket.instance_variable_set(:@connection_handler, @client)
|
17
|
+
end
|
20
18
|
|
21
|
-
|
19
|
+
def subscribe(streams)
|
20
|
+
raise "Streams must be an array of strings" unless streams.is_a?(Array)
|
21
|
+
streams.each do |stream|
|
22
|
+
next if stream.nil?
|
23
|
+
@client.streams[stream] = true
|
24
|
+
end
|
25
|
+
send :success, message: "subscribed", streams: @client.streams.keys
|
26
|
+
end
|
22
27
|
|
23
|
-
|
28
|
+
def unsubscribe(streams)
|
29
|
+
raise "Streams must be an array of strings" unless streams.is_a?(Array)
|
30
|
+
streams.each do |stream|
|
31
|
+
next if stream.nil?
|
32
|
+
@client.streams.delete(stream)
|
33
|
+
end
|
34
|
+
send :success, message: "unsubscribed", streams: @client.streams.keys
|
35
|
+
end
|
24
36
|
|
37
|
+
def authenticate(jwt)
|
38
|
+
begin
|
39
|
+
token = data["jwt"]
|
40
|
+
payload = @authenticator.authenticate!(token)
|
25
41
|
authorized = true
|
26
|
-
rescue JSON::ParserError
|
27
42
|
rescue => error
|
28
43
|
@logger.error error.message
|
29
44
|
end
|
30
|
-
|
31
45
|
if !authorized
|
32
46
|
send :error, message: "Authentication failed."
|
33
47
|
return
|
@@ -36,27 +50,50 @@ module Peatio::Ranger
|
|
36
50
|
@client.user = payload[:uid]
|
37
51
|
@client.authorized = true
|
38
52
|
|
39
|
-
@logger.info "ranger: user #{@client.user} authenticated
|
40
|
-
|
53
|
+
@logger.info "ranger: user #{@client.user} authenticated"
|
41
54
|
send :success, message: "Authenticated."
|
55
|
+
|
42
56
|
end
|
43
57
|
|
44
|
-
def
|
45
|
-
|
58
|
+
def handle(msg)
|
59
|
+
authorized = false
|
60
|
+
begin
|
61
|
+
data = JSON.parse(msg)
|
62
|
+
|
63
|
+
case data["event"]
|
64
|
+
when "subscribe"
|
65
|
+
subscribe data["streams"]
|
66
|
+
when "unsubscribe"
|
67
|
+
unsubscribe data["streams"]
|
68
|
+
when "jwt"
|
69
|
+
authenticate data["jwt"]
|
46
70
|
|
47
|
-
@streams = query.map do |item|
|
48
|
-
if item.first == "stream"
|
49
|
-
item.last
|
50
71
|
end
|
72
|
+
rescue JSON::ParserError
|
73
|
+
rescue => error
|
74
|
+
@logger.error error.message
|
51
75
|
end
|
76
|
+
end
|
52
77
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
78
|
+
def handshake(hs)
|
79
|
+
@client = Peatio::MQ::Events::Client.new(@socket)
|
80
|
+
query = URI::decode_www_form(hs.query_string)
|
81
|
+
subscribe(query.map {|item| item.last if item.first == "stream"})
|
82
|
+
@logger.info "ranger: WebSocket connection openned"
|
83
|
+
|
84
|
+
if hs.headers_downcased.key?("authorization")
|
85
|
+
authorized, payload = authenticate(hs.headers["authorization"])
|
86
|
+
|
87
|
+
if !authorized
|
88
|
+
@logger.info "ranger: #{@client.user} authentication failed"
|
89
|
+
raise EM::WebSocket::HandshakeError, "Authorization failed"
|
90
|
+
else
|
91
|
+
@logger.info [authorized, payload].inspect
|
92
|
+
@client.user = payload[:uid]
|
93
|
+
@client.authorized = true
|
94
|
+
@logger.info "ranger: user #{@client.user} authenticated #{@client.streams}"
|
95
|
+
end
|
96
|
+
end
|
60
97
|
end
|
61
98
|
end
|
62
99
|
|
@@ -91,6 +128,10 @@ module Peatio::Ranger
|
|
91
128
|
connection.handle(msg)
|
92
129
|
end
|
93
130
|
|
131
|
+
socket.onping do |value|
|
132
|
+
logger.info "Received ping: #{value}"
|
133
|
+
end
|
134
|
+
|
94
135
|
socket.onclose do
|
95
136
|
logger.info "ranger: WebSocket connection closed"
|
96
137
|
end
|
data/lib/peatio/version.rb
CHANGED