uwa 0.3 → 0.4
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.
- 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
|