uwa 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/uwa/config.rb +1 -1
- data/lib/uwa/handler.rb +48 -20
- data/lib/uwa/proxy.rb +6 -1
- data/lib/uwa/server.rb +2 -1
- metadata +2 -2
data/lib/uwa/config.rb
CHANGED
data/lib/uwa/handler.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
module UWA
|
4
4
|
class Handler < Mongrel::HttpHandler
|
5
|
-
attr_accessor :css, :script
|
5
|
+
attr_accessor :css, :script, :base
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
super
|
@@ -17,7 +17,9 @@ class Handler < Mongrel::HttpHandler
|
|
17
17
|
@keywords = self.class.name.downcase
|
18
18
|
@css = []
|
19
19
|
@script = []
|
20
|
+
@base = nil
|
20
21
|
@cache = {:css => nil, :script => nil}
|
22
|
+
@autoRefresh = nil
|
21
23
|
|
22
24
|
@query = nil
|
23
25
|
@out = nil
|
@@ -31,7 +33,10 @@ class Handler < Mongrel::HttpHandler
|
|
31
33
|
UWA::Server.log(@request.params['REQUEST_METHOD'], @request.params['REQUEST_URI'])
|
32
34
|
@query = query_string(req.params['QUERY_STRING'])
|
33
35
|
UWA::Server.log(:QUERY, @query.inspect)
|
34
|
-
|
36
|
+
|
37
|
+
method = @request.params['PATH_INFO'].split('/')[1]
|
38
|
+
|
39
|
+
if method.nil?
|
35
40
|
@response.start(200) do |head, out|
|
36
41
|
head["Content-Type"] = "text/html"
|
37
42
|
xml = Builder::XmlMarkup.new(:indent => 4, :target => out)
|
@@ -48,6 +53,7 @@ class Handler < Mongrel::HttpHandler
|
|
48
53
|
xml.meta(:name => 'inline', :content => @inline.to_s)
|
49
54
|
xml.meta(:name => 'debugMode', :content => @debugMode.to_s)
|
50
55
|
xml.meta(:name => 'keywords', :content => @keywords)
|
56
|
+
xml.meta(:name => 'autoRefresh', :content => @autoRefresh) unless @autoRefresh.nil?
|
51
57
|
xml.link(:rel => :stylesheet, :type => 'text/css',
|
52
58
|
:href => 'http://www.netvibes.com/themes/uwa/style.css')
|
53
59
|
xml.script("", :type => 'text/javascript',
|
@@ -61,8 +67,8 @@ class Handler < Mongrel::HttpHandler
|
|
61
67
|
xml.link(:rel => :icon, :type => 'image/png', :href => @icon)
|
62
68
|
css.each { |c| xml.style("\n" + c, :type => 'text/css') }
|
63
69
|
xml.script(:type => 'text/javascript') do |xml|
|
64
|
-
url = 'http://' + req.params['HTTP_HOST'] + req.params['
|
65
|
-
xml << "widget.remoteUrl = '#{url}'\n"
|
70
|
+
url = 'http://' + req.params['HTTP_HOST'] + req.params['SCRIPT_NAME']
|
71
|
+
xml << "widget.remoteUrl = '#{url}/'\n"
|
66
72
|
['Text', 'Json', 'Xml', 'Feed'].each do |m|
|
67
73
|
xml << "widget.remote#{m} = function(uri, cb) {
|
68
74
|
UWA.Data.get#{m}(widget.remoteUrl + uri, cb); };\n"
|
@@ -70,9 +76,11 @@ class Handler < Mongrel::HttpHandler
|
|
70
76
|
script.each do |s|
|
71
77
|
xml << "\n#{s}\n"
|
72
78
|
end
|
73
|
-
xml << "if (document.location && document.location.hostname == 'localhost'
|
79
|
+
xml << "if (document.location && (document.location.hostname == 'localhost'
|
80
|
+
|| document.location.href.match('^#{url}'))) {
|
74
81
|
UWA.proxies.ajax = '/proxy';
|
75
|
-
UWA.Data.useJsonRequest = false;
|
82
|
+
UWA.Data.useJsonRequest = false;
|
83
|
+
}\n"
|
76
84
|
end
|
77
85
|
end
|
78
86
|
xml.body do |xml|
|
@@ -82,21 +90,23 @@ class Handler < Mongrel::HttpHandler
|
|
82
90
|
xml.target!
|
83
91
|
end
|
84
92
|
else
|
85
|
-
method
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
if method == 'ressource'
|
94
|
+
file = @request.params['PATH_INFO'].gsub(/\.\./, '').split('/')[2..-1].join($/)
|
95
|
+
file = File.join(@base, 'ressources', file)
|
96
|
+
send_file(file)
|
97
|
+
elsif self.respond_to?(method.to_sym)
|
98
|
+
begin
|
99
|
+
@response.header["Content-Type"] = "text/html"
|
100
|
+
@response.status = 200
|
101
|
+
self.send(method.to_sym)
|
102
|
+
@response.finished
|
103
|
+
rescue Exception
|
104
|
+
UWA::Server.log(:error, "#{$!.message} <#{$!.class.name}>")
|
105
|
+
UWA::Server.log(:error, $!.backtrace)
|
96
106
|
end
|
97
107
|
else
|
98
|
-
|
99
|
-
out.write("Method
|
108
|
+
@response.start(404) do |head, out|
|
109
|
+
out.write("Method #{method.inspect} not found")
|
100
110
|
end
|
101
111
|
end
|
102
112
|
end
|
@@ -105,7 +115,25 @@ class Handler < Mongrel::HttpHandler
|
|
105
115
|
protected
|
106
116
|
|
107
117
|
def <<(buf)
|
108
|
-
@
|
118
|
+
@response.body.write(buf)
|
119
|
+
end
|
120
|
+
|
121
|
+
def send_file(file, content_type = nil)
|
122
|
+
if File.exists?(file)
|
123
|
+
file_status = File.stat(file)
|
124
|
+
@response.status = 200
|
125
|
+
@response.header[Mongrel::Const::LAST_MODIFIED] = file_status.mtime.httpdate
|
126
|
+
@response.header[Mongrel::Const::ETAG] = Mongrel::Const::ETAG_FORMAT %
|
127
|
+
[file_status.mtime.to_i, file_status.size, file_status.ino]
|
128
|
+
@response.header[Mongrel::Const::CONTENT_TYPE] = content_type unless content_type.nil?
|
129
|
+
@response.send_status(file_status.size)
|
130
|
+
@response.send_header
|
131
|
+
@response.send_file(file)
|
132
|
+
else
|
133
|
+
@response.start(404) do |head, out|
|
134
|
+
out.write("File #{file} not found")
|
135
|
+
end
|
136
|
+
end
|
109
137
|
end
|
110
138
|
|
111
139
|
def script
|
data/lib/uwa/proxy.rb
CHANGED
@@ -5,6 +5,11 @@ require 'uri'
|
|
5
5
|
module UWA
|
6
6
|
class Proxy < Mongrel::HttpHandler
|
7
7
|
|
8
|
+
@@ALLOWED_IP = [ '127.0.0.1' ]
|
9
|
+
def self.allow(ip)
|
10
|
+
@@ALLOWED_IP << ip
|
11
|
+
end
|
12
|
+
|
8
13
|
def process(req,res)
|
9
14
|
query = CGI::parse(req.params['QUERY_STRING'].to_s)
|
10
15
|
url = query['url'].to_a.first
|
@@ -12,7 +17,7 @@ class Proxy < Mongrel::HttpHandler
|
|
12
17
|
UWA::Server.log :ignore, req.params['REQUEST_URI']
|
13
18
|
else
|
14
19
|
url = URI.parse(query['url'].to_a.first.to_s.strip)
|
15
|
-
if req.params['REMOTE_ADDR']
|
20
|
+
if @@ALLOWED_IP.include? req.params['REMOTE_ADDR']
|
16
21
|
res.start(200) do |head, out|
|
17
22
|
head["Content-Type"] = "text/xml"
|
18
23
|
unless url.nil?
|
data/lib/uwa/server.rb
CHANGED
@@ -34,9 +34,9 @@ class Server
|
|
34
34
|
begin
|
35
35
|
$mongrel_debug_client = @debug
|
36
36
|
m = Mongrel::HttpServer.new(@host, @port) if m.nil?
|
37
|
-
m.register('/', UWA::Proxy.new)
|
38
37
|
@widgets.each do |widget|
|
39
38
|
object = widget[:class].new
|
39
|
+
object.base = widget[:base]
|
40
40
|
object.script = widget[:script]
|
41
41
|
object.css = widget[:css]
|
42
42
|
widget[:params].to_a.each do |name, value|
|
@@ -44,6 +44,7 @@ class Server
|
|
44
44
|
end
|
45
45
|
m.register(widget[:path], object)
|
46
46
|
end
|
47
|
+
m.register('/proxy', UWA::Proxy.new)
|
47
48
|
m.run.join
|
48
49
|
rescue
|
49
50
|
m.graceful_shutdown unless m.nil?
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: uwa
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2007-
|
6
|
+
version: "0.4"
|
7
|
+
date: 2007-04-02 00:00:00 +02:00
|
8
8
|
summary: Widget server for UWA specs by Netvibes (http://dev.netvibes.com/doc/universal_widget_api)
|
9
9
|
require_paths:
|
10
10
|
- lib
|