sinatra_sockets 0.0.5 → 0.0.6
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/lib/server_skeleton/Gemfile.lock +1 -54
- data/lib/server_skeleton/lib/routes/ws.rb +22 -11
- data/lib/server_skeleton/server.rb +20 -10
- data/lib/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d379215d2220dba3ac97637d938c45e7695624d
|
4
|
+
data.tar.gz: c1a7fc1db29382e26218b6913be59094f72e9ddb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7306077f348c70d269327f3bc70e5fd2b52a419ec8c0f81e9235e73257ce74d95b72f62760e7b2d1e03cfd263ace17f23572c5b45623850cd3739cfdfb40edf2
|
7
|
+
data.tar.gz: a39381a435fcea01b45610b981d05ee2b527a0db1b42e7b2914e6c7bcfc6a17569a1b21b87c017ced25dba3558bf198b5e0560e3e1158c41c73272a62d94dd78
|
@@ -8,73 +8,30 @@ GEM
|
|
8
8
|
tzinfo (~> 1.1)
|
9
9
|
addressable (2.5.0)
|
10
10
|
public_suffix (~> 2.0, >= 2.0.2)
|
11
|
-
awesome_print (1.7.0)
|
12
11
|
byebug (9.0.6)
|
13
|
-
coderay (1.1.1)
|
14
|
-
coffee-script (2.4.1)
|
15
|
-
coffee-script-source
|
16
|
-
execjs
|
17
|
-
coffee-script-source (1.12.2)
|
18
|
-
colored (1.2)
|
19
12
|
concurrent-ruby (1.0.4)
|
20
|
-
corefines (1.9.0)
|
21
13
|
daemons (1.2.4)
|
22
14
|
dotenv (2.2.0)
|
23
|
-
engtagger (0.2.1)
|
24
15
|
eventmachine (1.2.2)
|
25
|
-
execjs (2.7.0)
|
26
16
|
faraday (0.11.0)
|
27
17
|
multipart-post (>= 1.2, < 3)
|
28
18
|
faye-websocket (0.10.6)
|
29
19
|
eventmachine (>= 0.12.0)
|
30
20
|
websocket-driver (>= 0.5.1)
|
31
|
-
ffi (1.9.17)
|
32
|
-
gemmyrb (0.1.6)
|
33
|
-
activesupport
|
34
|
-
awesome_print
|
35
|
-
byebug
|
36
|
-
colored
|
37
|
-
corefines
|
38
|
-
engtagger
|
39
|
-
minitest
|
40
|
-
odyssey
|
41
|
-
pry
|
42
|
-
sentence_interpreter
|
43
|
-
thor
|
44
21
|
i18n (0.8.0)
|
45
|
-
listen (3.1.5)
|
46
|
-
rb-fsevent (~> 0.9, >= 0.9.4)
|
47
|
-
rb-inotify (~> 0.9, >= 0.9.7)
|
48
|
-
ruby_dep (~> 1.2)
|
49
|
-
method_source (0.8.2)
|
50
22
|
minitest (5.10.1)
|
51
23
|
multipart-post (2.0.0)
|
52
24
|
octokit (4.6.2)
|
53
25
|
sawyer (~> 0.8.0, >= 0.5.3)
|
54
|
-
odyssey (0.2.0)
|
55
|
-
require_all
|
56
|
-
pry (0.10.4)
|
57
|
-
coderay (~> 1.1.0)
|
58
|
-
method_source (~> 0.8.1)
|
59
|
-
slop (~> 3.4)
|
60
26
|
public_suffix (2.0.5)
|
61
27
|
rack (1.6.5)
|
62
28
|
rack-protection (1.5.3)
|
63
29
|
rack
|
64
30
|
rack-proxy (0.6.0)
|
65
31
|
rack
|
66
|
-
rb-fsevent (0.9.8)
|
67
|
-
rb-inotify (0.9.8)
|
68
|
-
ffi (>= 0.5.0)
|
69
|
-
require_all (1.4.0)
|
70
|
-
rerun (0.11.0)
|
71
|
-
listen (~> 3.0)
|
72
|
-
ruby_dep (1.5.0)
|
73
|
-
sass (3.4.23)
|
74
32
|
sawyer (0.8.1)
|
75
33
|
addressable (>= 2.3.5, < 2.6)
|
76
34
|
faraday (~> 0.8, < 1.0)
|
77
|
-
sentence_interpreter (0.0.7)
|
78
35
|
sinatra (1.4.8)
|
79
36
|
rack (~> 1.5)
|
80
37
|
rack-protection (~> 1.4)
|
@@ -83,16 +40,10 @@ GEM
|
|
83
40
|
sinatra_auth_github (1.2.0)
|
84
41
|
sinatra (~> 1.0)
|
85
42
|
warden-github (~> 1.2.0)
|
86
|
-
slim (3.0.7)
|
87
|
-
temple (~> 0.7.6)
|
88
|
-
tilt (>= 1.3.3, < 2.1)
|
89
|
-
slop (3.6.0)
|
90
|
-
temple (0.7.7)
|
91
43
|
thin (1.7.0)
|
92
44
|
daemons (~> 1.0, >= 1.0.9)
|
93
45
|
eventmachine (~> 1.0, >= 1.0.4)
|
94
46
|
rack (>= 1, < 3)
|
95
|
-
thor (0.19.4)
|
96
47
|
thread_safe (0.3.5)
|
97
48
|
tilt (2.0.6)
|
98
49
|
tzinfo (1.2.2)
|
@@ -111,17 +62,13 @@ PLATFORMS
|
|
111
62
|
ruby
|
112
63
|
|
113
64
|
DEPENDENCIES
|
114
|
-
|
65
|
+
byebug
|
115
66
|
dotenv
|
116
67
|
faye-websocket
|
117
|
-
gemmyrb
|
118
68
|
rack-proxy
|
119
|
-
rerun
|
120
|
-
sass
|
121
69
|
sinatra
|
122
70
|
sinatra-cross_origin
|
123
71
|
sinatra_auth_github
|
124
|
-
slim
|
125
72
|
thin
|
126
73
|
|
127
74
|
BUNDLED WITH
|
@@ -1,27 +1,29 @@
|
|
1
1
|
class Routes::Ws
|
2
2
|
|
3
|
+
# Opens a new websocket connection from a request
|
3
4
|
def self.run(request)
|
4
5
|
return unless Faye::WebSocket.websocket?(request.env)
|
5
|
-
socket = Faye::WebSocket.new(
|
6
|
-
socket.onopen { onopen(request, socket) }
|
7
|
-
socket.onmessage { |
|
8
|
-
socket.onclose { onclose(request,
|
6
|
+
socket = Faye::WebSocket.new(request.env)
|
7
|
+
socket.onopen = Proc.new { |e| onopen(request, socket) }
|
8
|
+
socket.onmessage = Proc.new { |e| onmessage(request, socket, e.data) }
|
9
|
+
socket.onclose = Proc.new { |e| onclose(request, socket) }
|
9
10
|
socket.rack_response
|
10
11
|
end
|
11
12
|
|
12
13
|
def self.onopen(request, ws)
|
13
14
|
token = request.params["token"]
|
14
|
-
|
15
|
-
ws
|
16
|
-
|
17
|
-
}.to_json)
|
15
|
+
if token
|
16
|
+
Sockets[token] = ws
|
17
|
+
else
|
18
18
|
ws.close
|
19
|
-
return
|
20
19
|
end
|
21
|
-
Sockets[token] = ws
|
22
20
|
end
|
23
21
|
|
24
|
-
def self.onmessage(request, ws,
|
22
|
+
def self.onmessage(request, ws, msg_data)
|
23
|
+
data = JSON.parse msg_data
|
24
|
+
if data["action"] == "try_authenticate"
|
25
|
+
try_authenticate(ws, data["token"])
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
27
29
|
def self.onclose(request, ws)
|
@@ -32,6 +34,15 @@ class Routes::Ws
|
|
32
34
|
|
33
35
|
private
|
34
36
|
|
37
|
+
def try_authenticate(ws, token)
|
38
|
+
if username = AuthenticatedTokens[token]
|
39
|
+
ws.send({
|
40
|
+
action: "logged_in",
|
41
|
+
username: username
|
42
|
+
}.to_json)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
35
46
|
def send_json_message(ws, msg)
|
36
47
|
EM.next_tick { ws.send msg.to_json }
|
37
48
|
end
|
@@ -94,13 +94,20 @@ class Server < Sinatra::Base
|
|
94
94
|
end
|
95
95
|
|
96
96
|
# Then they authenticate with Github
|
97
|
-
#
|
97
|
+
#
|
98
|
+
# If the client refreshes the page after logging in, they should have stored
|
99
|
+
# the token in a cookie. If they hit this route with the same token, it
|
100
|
+
# keeps them logged in.
|
101
|
+
#
|
102
|
+
# This needs to be clicked like a regular link - no AJAX
|
103
|
+
#
|
104
|
+
# TODO render a proper HTML page after authenticating not just plaintext
|
98
105
|
# saying they can close the window.
|
99
106
|
|
100
107
|
get '/authenticate' do
|
101
108
|
if token = params["token"]
|
102
109
|
if socket = Sockets[token]
|
103
|
-
|
110
|
+
unless username = AuthenticatedTokens[token]
|
104
111
|
authenticate!
|
105
112
|
username = get_username
|
106
113
|
Users[username] << (token)
|
@@ -119,20 +126,23 @@ class Server < Sinatra::Base
|
|
119
126
|
end
|
120
127
|
end
|
121
128
|
|
129
|
+
# This is hit over AJAX
|
130
|
+
# This closes the websocket connection
|
131
|
+
# Clients should request a new token and reconnect to ws after logging out
|
132
|
+
|
122
133
|
get '/logout' do
|
134
|
+
cross_origin allow_origin: "http://localhost:8080"
|
123
135
|
token = params[:token]
|
124
136
|
if token
|
125
137
|
if username = AuthenticatedTokens[token]
|
126
138
|
logout!
|
127
|
-
|
128
|
-
|
129
|
-
|
139
|
+
AuthenticatedTokens.delete token
|
140
|
+
Users[username].delete token
|
141
|
+
Sockets[token].close
|
142
|
+
Sockets.delete token
|
143
|
+
{ success: "logged out" }.to_json
|
130
144
|
else
|
131
|
-
|
132
|
-
ws.send({msg: "can't find user to log out"}.to_json)
|
133
|
-
else
|
134
|
-
{error: "can't find user to log out"}.to_json
|
135
|
-
end
|
145
|
+
{ error: "can't find user to log out" }.to_json
|
136
146
|
end
|
137
147
|
else
|
138
148
|
{ error: 'cant log out; no token provided' }.to_json
|
data/lib/version.rb
CHANGED