rsence-pre 2.1.0.1.pre
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/.yardopts +10 -0
- data/INSTALL.rdoc +330 -0
- data/LICENSE.txt +622 -0
- data/README.rdoc +98 -0
- data/VERSION +1 -0
- data/bin/rsence +25 -0
- data/bin/rsence-pre +25 -0
- data/conf/default_conf.yaml +346 -0
- data/conf/default_strings.yaml +76 -0
- data/conf/rsence_command_strings.yaml +444 -0
- data/docs/ExampleGuiPlugin.rdoc +193 -0
- data/docs/JavascriptBundles.rdoc +0 -0
- data/docs/PluginBundleInfo.rdoc +173 -0
- data/docs/PluginBundles.rdoc +96 -0
- data/docs/Values.rdoc +163 -0
- data/js/comm/autosync/autosync.js +17 -0
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/comm.js +203 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +112 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/queue/queue.js +184 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/session/session.js +52 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/transporter/transporter.js +261 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/urlresponder/urlresponder.js +149 -0
- data/js/comm/values/js.inc +0 -0
- data/js/comm/values/values.js +433 -0
- data/js/controls/button/button.js +72 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +49 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +84 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +109 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +40 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +44 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +43 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +357 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +41 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +213 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +280 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +24 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +374 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +154 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +62 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +286 -0
- data/js/core/class/class.js +318 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1383 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +153 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/core/rsence_ns/rsence_ns.js +21 -0
- data/js/datetime/calendar/calendar.js +198 -0
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/datetime/datetimevalue/datetimevalue.js +247 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/datetime/timesheet/timesheet.js +183 -0
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/datetime/timesheet_item/timesheet_item.js +248 -0
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/foundation/application/application.js +208 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +339 -0
- data/js/foundation/control/controldefaults/controldefaults.js +56 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +750 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valuematrix/valuematrix.js +135 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +79 -0
- data/js/foundation/eventmanager/eventmanager.js +991 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +651 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +246 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +381 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +393 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/value/value.js +183 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +114 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +237 -0
- data/js/foundation/view/view.js +1812 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
- data/js/lists/checkboxlist/checkboxlist.js +171 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/listitems/listitems.js +88 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +326 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/reloadapp/reloadapp.js +152 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/util/sha/sha.js +426 -0
- data/js/views/centerview/centerview.js +75 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +15 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +40 -0
- data/lib/conf/argv.rb +850 -0
- data/lib/conf/default.rb +219 -0
- data/lib/daemon/daemon.rb +387 -0
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +150 -0
- data/lib/http/rackup.rb +91 -0
- data/lib/http/request.rb +66 -0
- data/lib/http/response.rb +65 -0
- data/lib/plugins/dependencies.rb +285 -0
- data/lib/plugins/gui_plugin.rb +160 -0
- data/lib/plugins/guiparser.rb +123 -0
- data/lib/plugins/plugin.rb +438 -0
- data/lib/plugins/plugin_base.rb +162 -0
- data/lib/plugins/plugin_plugins.rb +81 -0
- data/lib/plugins/plugin_sqlite_db.rb +98 -0
- data/lib/plugins/pluginmanager.rb +635 -0
- data/lib/plugins/plugins.rb +169 -0
- data/lib/plugins/servlet.rb +108 -0
- data/lib/rsence.rb +32 -0
- data/lib/session/msg.rb +327 -0
- data/lib/session/sessionmanager.rb +522 -0
- data/lib/session/sessionstorage.rb +340 -0
- data/lib/transporter/transporter.rb +263 -0
- data/lib/util/gzstring.rb +9 -0
- data/lib/util/ruby19_fixes.rb +18 -0
- data/lib/values/hvalue.rb +378 -0
- data/lib/values/valuemanager.rb +172 -0
- data/plugins/client_pkg/client_pkg.rb +157 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +120 -0
- data/plugins/index_html/info.yaml +18 -0
- data/plugins/index_html/tmpl/index.html +15 -0
- data/plugins/main/info.yaml +18 -0
- data/plugins/main/js/main.js +84 -0
- data/plugins/main/main.rb +255 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticket/info.yaml +21 -0
- data/plugins/ticket/lib/common.rb +392 -0
- data/plugins/ticket/lib/favicon.rb +39 -0
- data/plugins/ticket/lib/file.rb +58 -0
- data/plugins/ticket/lib/img.rb +50 -0
- data/plugins/ticket/lib/objblob.rb +66 -0
- data/plugins/ticket/lib/rsrc.rb +34 -0
- data/plugins/ticket/lib/upload.rb +236 -0
- data/plugins/ticket/ticket.rb +333 -0
- data/setup/welcome/gui/welcome.yaml +92 -0
- data/setup/welcome/info.yaml +13 -0
- data/setup/welcome/text/welcome.html +9 -0
- data/setup/welcome/values.yaml +9 -0
- data/setup/welcome/welcome.rb +54 -0
- metadata +407 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
# @private Inner workings of Ticket
|
12
|
+
module TicketService
|
13
|
+
# @private Inner workings of Ticket
|
14
|
+
module Favicon
|
15
|
+
|
16
|
+
def favicon( req, res ) # :nodoc:
|
17
|
+
|
18
|
+
res.status = 200
|
19
|
+
|
20
|
+
favicon_data = @raw_uris['favicon.ico']
|
21
|
+
|
22
|
+
res['Content-Type'] = favicon_data[0]
|
23
|
+
res['Content-Length'] = favicon_data[1]
|
24
|
+
|
25
|
+
res['Date'] = httime( Time.now )
|
26
|
+
res.body = favicon_data[2]
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# Sets favicon. First parameter is favicon data and the second one is content type which defaults to false.
|
31
|
+
def set_favicon( ico_data, content_type=false )
|
32
|
+
@raw_uris['favicon.ico'][0] = content_type if content_type
|
33
|
+
@raw_uris['favicon.ico'][1] = ico_data.size.to_s
|
34
|
+
@raw_uris['favicon.ico'][2] = ico_data
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
# @private Inner workings of Ticket
|
11
|
+
module TicketService
|
12
|
+
# @private Inner workings of Ticket
|
13
|
+
module TicketFile
|
14
|
+
|
15
|
+
# Removes other disposable data and references. File removed by file_id
|
16
|
+
# which is initially given with the +Common#Serve+ function.
|
17
|
+
def del_file( file_id, ses_id=false )
|
18
|
+
if ses_id and @files[:ses_ids].has_key?( ses_id )
|
19
|
+
@files[:ses_ids][ses_id].delete( file_id ) if @files[:ses_ids][ses_id].include?( file_id )
|
20
|
+
end
|
21
|
+
@files[:by_id].delete( file_id ) if @files[:by_id].has_key?( file_id )
|
22
|
+
end
|
23
|
+
|
24
|
+
# extends expiration time of disposable data, essentially for keep-alive requests
|
25
|
+
def push_keepalive_file( file_id, keep_alive ) # :nodoc:
|
26
|
+
expiry_time = Time.now.to_i+keep_alive
|
27
|
+
@expire_files[expiry_time] = [] unless @expire_files.has_key?(expiry_time)
|
28
|
+
@expire_files[expiry_time].push( file_id )
|
29
|
+
end
|
30
|
+
|
31
|
+
# removes all expired files
|
32
|
+
def expire_keepalive_files # :nodoc:
|
33
|
+
curr_time = Time.now.to_i
|
34
|
+
@expire_files.keys.sort.each do |exp_time|
|
35
|
+
if exp_time < curr_time
|
36
|
+
@expire_files[exp_time].size.times do |incr|
|
37
|
+
file_id = @expire_files[exp_time].shift
|
38
|
+
if @files[:by_id].has_key?(file_id)
|
39
|
+
ses_id = @files[:by_id][file_id][3]
|
40
|
+
del_file( file_id, ses_id )
|
41
|
+
end
|
42
|
+
end
|
43
|
+
@expire_files.delete(exp_time) if @expire_files[exp_time].size == 0
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Shorthand for +Common#serve+ for serving a file. Expects served file to be
|
49
|
+
# of type :file. Defaults the content_type to 'text/plain' and expects user
|
50
|
+
# to input filename.
|
51
|
+
def serve_file( msg, content='', content_type='text/plain', filename='' )
|
52
|
+
return serve( msg, content, [content_type, filename], :file)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
# @private Inner workings of Ticket
|
11
|
+
module TicketService
|
12
|
+
# @private Inner workings of Ticket
|
13
|
+
module Img
|
14
|
+
|
15
|
+
# Removes image data and references. Image is removed with
|
16
|
+
# its ID which is the same as its URI.
|
17
|
+
def del_img( img_id, ses_id=false )
|
18
|
+
if ses_id and @imgs[:ses_ids].has_key?( ses_id )
|
19
|
+
@imgs[:ses_ids][ses_id].delete( img_id ) if @imgs[:ses_ids][ses_id].include?( img_id )
|
20
|
+
end
|
21
|
+
@imgs[:by_id].delete( img_id ) if @imgs[:by_id].has_key?( img_id )
|
22
|
+
end
|
23
|
+
|
24
|
+
# Extends expiration time of disposable files, essentially for keep-alive
|
25
|
+
# requests. Image URI is used as an ID and extension is given as seconds.
|
26
|
+
def push_keepalive( img_id, keep_alive )
|
27
|
+
expiry_time = Time.now.to_i+keep_alive
|
28
|
+
@expires[expiry_time] = [] unless @expires.has_key?(expiry_time)
|
29
|
+
@expires[expiry_time].push( img_id )
|
30
|
+
end
|
31
|
+
|
32
|
+
# Removes all expired images.
|
33
|
+
def expire_keepalives
|
34
|
+
curr_time = Time.now.to_i
|
35
|
+
@expires.keys.sort.each do |exp_time|
|
36
|
+
if exp_time < curr_time
|
37
|
+
@expires[exp_time].size.times do |incr|
|
38
|
+
img_id = @expires[exp_time].shift
|
39
|
+
if @imgs[:by_id].has_key?(img_id)
|
40
|
+
ses_id = @imgs[:by_id][img_id][3]
|
41
|
+
del_img( img_id, ses_id )
|
42
|
+
end
|
43
|
+
end
|
44
|
+
@expires.delete(exp_time) if @expires[exp_time].size == 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
# @private Inner workings of Ticket
|
11
|
+
module TicketService
|
12
|
+
# @private Inner workings of Ticket
|
13
|
+
module ObjBlob
|
14
|
+
|
15
|
+
# Serves a blob object. Will expire by default. Returns ID as URI.
|
16
|
+
def serve_blobobj( msg, blob_obj, no_expire=false )
|
17
|
+
# gets a new, unique identifier
|
18
|
+
ticket_id = @randgen.gen
|
19
|
+
if no_expire
|
20
|
+
@raw_uris[ticket_id] = blob_obj
|
21
|
+
else
|
22
|
+
@blob_objs[:ses_ids][msg.ses_id] = [] unless @imgs[:ses_ids].has_key?(msg.ses_id)
|
23
|
+
@blob_objs[:ses_ids][msg.ses_id].push( ticket_id )
|
24
|
+
@blob_objs[:by_id][ticket_id] = [msg.ses_id,blob_obj]
|
25
|
+
end
|
26
|
+
uri = File.join(::RSence.config[:broker_urls][:b],ticket_id)
|
27
|
+
return uri
|
28
|
+
end
|
29
|
+
|
30
|
+
# Deletes blob object by ID.
|
31
|
+
def del_blobobj( ticket_id, ses_id=false )
|
32
|
+
if @raw_uris.has_key?( ticket_id )
|
33
|
+
@raw_uris.delete( rsrc_id )
|
34
|
+
else
|
35
|
+
if ses_id and @blob_objs[:ses_ids].has_key?( ses_id )
|
36
|
+
@blob_objs[:ses_ids][ses_id].delete( ticket_id ) if @blob_objs[:ses_ids][ses_id].include?( ticket_id )
|
37
|
+
end
|
38
|
+
@blob_objs[:by_id].delete( ticket_id ) if @blob_objs[:by_id].has_key?( ticket_id )
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Increases expiration time by keep_alive in seconds.
|
43
|
+
def push_keepalive_blobobj( ticket_id, keep_alive )
|
44
|
+
expiry_time = Time.now.to_i+keep_alive
|
45
|
+
@expire_blobobj[expiry_time] = [] unless @expire_blobobj.has_key?(expiry_time)
|
46
|
+
@expire_blobobj[expiry_time].push( ticket_id )
|
47
|
+
end
|
48
|
+
|
49
|
+
# Removes all expired blob objects.
|
50
|
+
def expire_keepalive_blobobjs
|
51
|
+
curr_time = Time.now.to_i
|
52
|
+
@expire_blobobj.keys.sort.each do |exp_time|
|
53
|
+
if exp_time < curr_time
|
54
|
+
@expire_blobobj[exp_time].size.times do |incr|
|
55
|
+
ticket_id = @expire_blobobj[exp_time].shift
|
56
|
+
if @blob_objs[:by_id].has_key?(ticket_id)
|
57
|
+
ses_id = @blob_objs[:by_id][ticket_id][3]
|
58
|
+
del_blobobj( ticket_id, ses_id )
|
59
|
+
end
|
60
|
+
end
|
61
|
+
@expire_blobobj.delete(exp_time) if @expire_blobobj[exp_time].size == 0
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
# @private Inner workings of Ticket
|
11
|
+
module TicketService
|
12
|
+
# @private Inner workings of Ticket
|
13
|
+
module Rsrc
|
14
|
+
|
15
|
+
# Removes static data by ID.
|
16
|
+
def del_rsrc( rsrc_id )
|
17
|
+
@raw_uris.delete( rsrc_id )
|
18
|
+
end
|
19
|
+
|
20
|
+
# Serves static resources. ID returned by function.
|
21
|
+
def serve_rsrc( content, content_type )
|
22
|
+
|
23
|
+
rsrc_id = @randgen.gen
|
24
|
+
#puts "rsrc_id: #{rsrc_id.inspect}"
|
25
|
+
|
26
|
+
content_size = content.size.to_s
|
27
|
+
|
28
|
+
@raw_uris[rsrc_id] = [content_type,content_size,content]
|
29
|
+
|
30
|
+
uri = File.join(::RSence.config[:broker_urls][:d],rsrc_id)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,236 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
require 'sequel'
|
12
|
+
|
13
|
+
# @private Inner workings of Ticket
|
14
|
+
module TicketService
|
15
|
+
|
16
|
+
# @private Inner workings of Ticket
|
17
|
+
module Upload
|
18
|
+
|
19
|
+
=begin
|
20
|
+
|
21
|
+
Handles uploads by using tickets and other filters.
|
22
|
+
|
23
|
+
Upload success states:
|
24
|
+
0: Idle, default, ready to upload
|
25
|
+
1: Upload started
|
26
|
+
2: Upload completed
|
27
|
+
3: Upload processed
|
28
|
+
4: Client requests new key
|
29
|
+
|
30
|
+
Upload failure states:
|
31
|
+
-1: Invalid request (missing query keys)
|
32
|
+
-2: Invalid or missing key
|
33
|
+
-3: Invalid mime-type (invalid data format)
|
34
|
+
-4: File too big
|
35
|
+
-5: Key request forbidden (when calling upload_key)
|
36
|
+
-6: Post-processing failed
|
37
|
+
|
38
|
+
|
39
|
+
Default upload table:
|
40
|
+
|
41
|
+
create table rsence_uploads (
|
42
|
+
id int primary key auto_increment,
|
43
|
+
ses_id int not null,
|
44
|
+
upload_date int not null,
|
45
|
+
upload_done tinyint not null default 0,
|
46
|
+
file_size int not null default 0,
|
47
|
+
file_mime varchar(255) not null default 'text/plain',
|
48
|
+
file_data mediumblob
|
49
|
+
)
|
50
|
+
=end
|
51
|
+
def upload(request,response)
|
52
|
+
|
53
|
+
ticket_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:u]}(.*)$/)[1]
|
54
|
+
value_id = request.query['value_id']
|
55
|
+
|
56
|
+
if not @upload_slots[:by_id].has_key?(ticket_id)
|
57
|
+
done_value = '-2:::Invalid or missing key'
|
58
|
+
else
|
59
|
+
## Get data stored in the upload slot
|
60
|
+
(mime_allow,max_size,ses_id,value_key,allow_multi) = @upload_slots[:by_id][ticket_id]
|
61
|
+
if not allow_multi
|
62
|
+
@upload_slots[:by_id].delete( ticket_id )
|
63
|
+
end
|
64
|
+
## The upload form field
|
65
|
+
file_data = request.query['file_data']
|
66
|
+
file_mimetype = file_data[:type]
|
67
|
+
file_filename = file_data[:filename]
|
68
|
+
## Get the size from the temporary file
|
69
|
+
file_size = file_data[:tempfile].stat.size
|
70
|
+
## Check for errors
|
71
|
+
if not mime_allow.match(file_mimetype)
|
72
|
+
done_value = "-3:::#{ticket_id}"
|
73
|
+
elsif not file_size < max_size
|
74
|
+
done_value = "-4:::#{ticket_id}"
|
75
|
+
else
|
76
|
+
done_value = "2:::#{ticket_id}"
|
77
|
+
## Insert basic data about the upload and get its key
|
78
|
+
insert_hash = {
|
79
|
+
:ses_id => ses_id,
|
80
|
+
:ticket_id => ticket_id,
|
81
|
+
:upload_date => Time.now.to_i,
|
82
|
+
:upload_done => false,
|
83
|
+
:file_name => file_filename,
|
84
|
+
:file_size => file_size,
|
85
|
+
:file_mime => file_mimetype,
|
86
|
+
:file_data => ''
|
87
|
+
}
|
88
|
+
if @db
|
89
|
+
upload_id = @db[:rsence_uploads].insert( insert_hash )
|
90
|
+
else
|
91
|
+
@upload_id += 1
|
92
|
+
upload_id = @upload_id
|
93
|
+
@upload_slots[:rsence_uploads] = {} unless @upload_slots.has_key?(:rsence_uploads)
|
94
|
+
@upload_slots[:rsence_uploads][upload_id] = insert_hash
|
95
|
+
end
|
96
|
+
if not @upload_slots[:uploaded].has_key?(ticket_id)
|
97
|
+
@upload_slots[:uploaded][ticket_id] = []
|
98
|
+
end
|
99
|
+
@upload_slots[:uploaded][ticket_id].push( upload_id )
|
100
|
+
|
101
|
+
update_hash = {
|
102
|
+
:file_data => file_data[:tempfile].read.to_sequel_blob,
|
103
|
+
:upload_done => true
|
104
|
+
}
|
105
|
+
if @db
|
106
|
+
@db[:rsence_uploads].filter(:id => upload_id).update( update_hash )
|
107
|
+
else
|
108
|
+
@upload_slots[:rsence_uploads][upload_id].merge!( update_hash )
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
response_body = %{
|
114
|
+
<html>
|
115
|
+
<head>
|
116
|
+
<script type="text/javascript">
|
117
|
+
with(parent){
|
118
|
+
HVM.values[#{value_id.to_json}].set(#{done_value.to_json});
|
119
|
+
}
|
120
|
+
</script>
|
121
|
+
</head>
|
122
|
+
<body></body>
|
123
|
+
</html>
|
124
|
+
}
|
125
|
+
|
126
|
+
response.status = 200
|
127
|
+
response['content-type'] = 'text/html; charset=UTF-8'
|
128
|
+
response['content-length'] = response_body.size.to_s
|
129
|
+
response.body = response_body
|
130
|
+
end
|
131
|
+
|
132
|
+
def get_uploads( ticket_id, with_data=false )
|
133
|
+
uploads = []
|
134
|
+
if @upload_slots[:uploaded].has_key?(ticket_id)
|
135
|
+
@upload_slots[:uploaded][ticket_id].each do |row_id|
|
136
|
+
if with_data
|
137
|
+
if @db
|
138
|
+
row_datas = @db[:rsence_uploads].select(
|
139
|
+
:upload_date, :upload_done, :file_name,
|
140
|
+
:file_size, :file_mime, :file_data
|
141
|
+
).filter(
|
142
|
+
:id => row_id
|
143
|
+
)
|
144
|
+
else
|
145
|
+
row_datas = @upload_slots[:rsence_uploads][row_id]
|
146
|
+
end
|
147
|
+
if row_datas.size == 1
|
148
|
+
row_data = row_datas.first
|
149
|
+
row_hash = {
|
150
|
+
:date => Time.at(row_data[:upload_date]),
|
151
|
+
:done => row_data[:upload_done],
|
152
|
+
:size => row_data[:file_size],
|
153
|
+
:mime => row_data[:file_mime],
|
154
|
+
:name => row_data[:file_name],
|
155
|
+
:data => row_data[:file_data]
|
156
|
+
}
|
157
|
+
uploads.push(row_hash)
|
158
|
+
end
|
159
|
+
else
|
160
|
+
if @db
|
161
|
+
row_datas = @db[:rsence_uploads].select(
|
162
|
+
:upload_date, :upload_done, :file_name,
|
163
|
+
:file_size, :file_mime
|
164
|
+
).filter(
|
165
|
+
:id => row_id
|
166
|
+
)
|
167
|
+
else
|
168
|
+
row_datas = @upload_slots[:rsence_uploads][row_id]
|
169
|
+
end
|
170
|
+
if row_datas.size == 1
|
171
|
+
row_data = row_datas.first
|
172
|
+
row_hash = {
|
173
|
+
:date => Time.at(row_data[:upload_date]),
|
174
|
+
:done => row_data[:upload_done],
|
175
|
+
:size => row_data[:file_size],
|
176
|
+
:mime => row_data[:file_mime],
|
177
|
+
:name => row_data[:file_name],
|
178
|
+
:data => nil
|
179
|
+
}
|
180
|
+
uploads.push(row_hash)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
return uploads
|
186
|
+
end
|
187
|
+
|
188
|
+
def del_upload( ticket_id, row_id )
|
189
|
+
@upload_slots[:uploaded][ticket_id].delete(row_id)
|
190
|
+
if @db
|
191
|
+
@db[:rsence_uploads].filter( :id => row_id ).delete
|
192
|
+
else
|
193
|
+
@upload_slots[:rsence_uploads].delete(row_id)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# removes uploaded files
|
198
|
+
def del_uploads( ticket_id, ses_id=false )
|
199
|
+
if ses_id and @upload_slots[:ses_ids].has_key?( ses_id )
|
200
|
+
if @upload_slots[:ses_ids][ses_id].include?( ticket_id )
|
201
|
+
@upload_slots[:ses_ids][ses_id].delete( ticket_id )
|
202
|
+
end
|
203
|
+
end
|
204
|
+
if @upload_slots[:uploaded].has_key?( ticket_id )
|
205
|
+
@upload_slots[:uploaded][ticket_id].each do |row_id|
|
206
|
+
@upload_slots[:uploaded][ticket_id].delete( row_id )
|
207
|
+
if @db
|
208
|
+
@db[:rsence_uploads].filter( :id => row_id ).delete
|
209
|
+
else
|
210
|
+
@upload_slots[:rsence_uploads].delete(row_id)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
@upload_slots[:uploaded].delete( ticket_id )
|
214
|
+
end
|
215
|
+
if @upload_slots[:by_id].has_key?( ticket_id )
|
216
|
+
@upload_slots[:by_id].delete( ticket_id )
|
217
|
+
end
|
218
|
+
if @db
|
219
|
+
@db[:rsence_uploads].filter( :ticket_id => ticket_id ).delete
|
220
|
+
@db[:rsence_uploads].filter( :ses_id => ses_id ).delete
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def upload_key(msg,value_key,max_size=1000000,mime_allow=/(.*?)\/(.*?)/,allow_multi=true)
|
225
|
+
key = @randgen.gen
|
226
|
+
while @upload_slots[:by_id].has_key?(key)
|
227
|
+
key = @randgen.gen
|
228
|
+
end
|
229
|
+
@upload_slots[:by_id][key] = [mime_allow,max_size,msg.ses_id,value_key,allow_multi]
|
230
|
+
@upload_slots[:uploaded][key] = []
|
231
|
+
@upload_slots[:ses_ids][msg.ses_id] = [] unless @upload_slots[:ses_ids].has_key?(msg.ses_id)
|
232
|
+
@upload_slots[:ses_ids][msg.ses_id].push( key )
|
233
|
+
return "0:::#{key}"
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|