forked from nestorInc/jukebox
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoken_api.rb
More file actions
77 lines (60 loc) · 1.78 KB
/
Copy pathtoken_api.rb
File metadata and controls
77 lines (60 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env ruby
require 'rev'
require 'socket'
require 'http.rb'
require 'display.rb'
require 'db.rb'
class TokenManager < HttpNode
def initialize(users, conf)
@users = users;
@conf = conf;
super();
end
def on_request(s, req)
if(s.auth != "httpAuth" && s.auth != "cookie")
rep = HttpResponse.generate401(req);
s.write(rep.to_s);
return;
end
token = @users.get_user_login_token(s.udata[:user]);
if( token == nil )
rep = HttpResponse.generate401(req);
s.write(rep.to_s);
return;
end
rep = HttpResponse.new(req.proto, 200, "OK",
"Content-Type" => "application/x-mpegURL");
rep.setData("http://#{@conf['host']}/stream?token=#{token}\n");
s.write(rep.to_s);
end
end
class LoginManager < HttpNodeMapping
def initialize(child, users, sessions, stream)
@users = users;
@sessions = sessions;
@stream = stream;
super(child);
end
def on_request(s, req)
j = req.data && Hash[req.data.split("&").map { |v| v.split('=') }];
user = j && j["user"]
pass = j && j["pass"]
if(user == nil || pass == nil)
return super(s, req);
end
uid, _ = @users.login(user, pass)
if(uid == nil)
rep = HttpResponse.generate303(req, "/login")
return s.write(rep.to_s);
end
ip_address = s.remote_address.ip_address;
user_agent = req.options["User-Agent"] || ""
sid = @sessions.create(uid, ip_address, user_agent);
s.udata = { :user => user, :session => sid }
@stream.channel_init(user)
rep = HttpResponse.generate303(req, "/")
rep.options["Set-Cookie"] = []
rep.options["Set-Cookie"] << Cookie.new({"session" => sid.sid }, nil, "/", Time.now()+(2*7*24*60*60), nil, nil).to_s();
s.write(rep.to_s);
end
end