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.
@@ -1,6 +1,6 @@
1
1
  module UWA
2
2
  NAME = 'UWA'
3
- VERSION = '0.3'
3
+ VERSION = '0.4'
4
4
  DESC = 'Widget server for UWA specs by Netvibes (http://dev.netvibes.com/doc/universal_widget_api)'
5
5
  AUTHOR = 'Florent Solt'
6
6
  EMAIL = 'florent@solt.biz'
@@ -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
- if @request.params['REQUEST_PATH'].split('/', 3)[2].nil? and @query['url'].nil?
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['REQUEST_PATH'] + '/'
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; }\n"
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 = @request.params['REQUEST_PATH'].split('/', 3)[2].to_sym
86
- if self.respond_to?(method)
87
- res.start(200) do |head, out|
88
- begin
89
- @headers = head
90
- @out = out
91
- self.send(method)
92
- rescue Exception
93
- UWA::Server.log(:error, "#{$!.message} <#{$!.class.name}>")
94
- UWA::Server.log(:error, $!.backtrace)
95
- end
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
- res.start(404) do |head, out|
99
- out.write("Method \"#{method}\" not found")
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
- @out.write(buf)
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
@@ -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'] == '127.0.0.1'
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?
@@ -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.3"
7
- date: 2007-03-29 00:00:00 +02:00
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