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.
Files changed (313) hide show
  1. data/.yardopts +10 -0
  2. data/INSTALL.rdoc +330 -0
  3. data/LICENSE.txt +622 -0
  4. data/README.rdoc +98 -0
  5. data/VERSION +1 -0
  6. data/bin/rsence +25 -0
  7. data/bin/rsence-pre +25 -0
  8. data/conf/default_conf.yaml +346 -0
  9. data/conf/default_strings.yaml +76 -0
  10. data/conf/rsence_command_strings.yaml +444 -0
  11. data/docs/ExampleGuiPlugin.rdoc +193 -0
  12. data/docs/JavascriptBundles.rdoc +0 -0
  13. data/docs/PluginBundleInfo.rdoc +173 -0
  14. data/docs/PluginBundles.rdoc +96 -0
  15. data/docs/Values.rdoc +163 -0
  16. data/js/comm/autosync/autosync.js +17 -0
  17. data/js/comm/autosync/js.inc +0 -0
  18. data/js/comm/comm.js +203 -0
  19. data/js/comm/js.inc +0 -0
  20. data/js/comm/jsloader/js.inc +0 -0
  21. data/js/comm/jsloader/jsloader.js +112 -0
  22. data/js/comm/queue/js.inc +0 -0
  23. data/js/comm/queue/queue.js +184 -0
  24. data/js/comm/session/js.inc +0 -0
  25. data/js/comm/session/session.js +52 -0
  26. data/js/comm/sessionwatcher/js.inc +0 -0
  27. data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
  28. data/js/comm/transporter/js.inc +0 -0
  29. data/js/comm/transporter/transporter.js +261 -0
  30. data/js/comm/urlresponder/js.inc +0 -0
  31. data/js/comm/urlresponder/urlresponder.js +149 -0
  32. data/js/comm/values/js.inc +0 -0
  33. data/js/comm/values/values.js +433 -0
  34. data/js/controls/button/button.js +72 -0
  35. data/js/controls/button/js.inc +0 -0
  36. data/js/controls/button/themes/bright/button.css +89 -0
  37. data/js/controls/button/themes/bright/button.html +7 -0
  38. data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
  39. data/js/controls/button/themes/bright/button_parts1.png +0 -0
  40. data/js/controls/button/themes/default/button.css +89 -0
  41. data/js/controls/button/themes/default/button.html +7 -0
  42. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  43. data/js/controls/button/themes/default/button_parts1.png +0 -0
  44. data/js/controls/checkbox/checkbox.js +49 -0
  45. data/js/controls/checkbox/js.inc +0 -0
  46. data/js/controls/checkbox/themes/default/checkbox.css +69 -0
  47. data/js/controls/checkbox/themes/default/checkbox.html +5 -0
  48. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  49. data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
  50. data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
  51. data/js/controls/dialogs/alert_sheet/js.inc +0 -0
  52. data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
  53. data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
  54. data/js/controls/dialogs/sheet/js.inc +0 -0
  55. data/js/controls/dialogs/sheet/sheet.js +84 -0
  56. data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
  57. data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
  58. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  59. data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
  60. data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
  61. data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
  62. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  63. data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
  64. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  65. data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
  66. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  67. data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
  68. data/js/controls/imageview/imageview.js +109 -0
  69. data/js/controls/imageview/js.inc +0 -0
  70. data/js/controls/imageview/themes/default/blank.gif +0 -0
  71. data/js/controls/passwordcontrol/js.inc +0 -0
  72. data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
  73. data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
  74. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
  75. data/js/controls/progress/progressbar/js.inc +0 -0
  76. data/js/controls/progress/progressbar/progressbar.js +40 -0
  77. data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
  78. data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
  79. data/js/controls/progress/progressindicator/js.inc +0 -0
  80. data/js/controls/progress/progressindicator/progressindicator.js +44 -0
  81. data/js/controls/radiobutton/js.inc +0 -0
  82. data/js/controls/radiobutton/radiobutton.js +43 -0
  83. data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
  84. data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
  85. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  86. data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
  87. data/js/controls/sliders/slider/js.inc +0 -0
  88. data/js/controls/sliders/slider/slider.js +357 -0
  89. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  90. data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
  91. data/js/controls/sliders/slider/themes/default/slider.css +108 -0
  92. data/js/controls/sliders/slider/themes/default/slider.html +5 -0
  93. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  94. data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
  95. data/js/controls/sliders/vslider/js.inc +0 -0
  96. data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
  97. data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
  98. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  99. data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
  100. data/js/controls/sliders/vslider/vslider.js +41 -0
  101. data/js/controls/stepper/js.inc +0 -0
  102. data/js/controls/stepper/stepper.js +213 -0
  103. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  104. data/js/controls/stepper/themes/default/stepper.css +14 -0
  105. data/js/controls/stepper/themes/default/stepper.html +2 -0
  106. data/js/controls/stepper/themes/default/stepper.png +0 -0
  107. data/js/controls/stringview/js.inc +0 -0
  108. data/js/controls/stringview/stringview.js +49 -0
  109. data/js/controls/stringview/themes/default/stringview.css +8 -0
  110. data/js/controls/stringview/themes/default/stringview.html +1 -0
  111. data/js/controls/tab/js.inc +0 -0
  112. data/js/controls/tab/tab.js +280 -0
  113. data/js/controls/tab/themes/bright/tab.css +76 -0
  114. data/js/controls/tab/themes/bright/tab.html +6 -0
  115. data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
  116. data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
  117. data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
  118. data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
  119. data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
  120. data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
  121. data/js/controls/tab/themes/default/tab.css +77 -0
  122. data/js/controls/tab/themes/default/tab.html +6 -0
  123. data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
  124. data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
  125. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  126. data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
  127. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  128. data/js/controls/tab/themes/default/tab_parts1.png +0 -0
  129. data/js/controls/textarea/js.inc +0 -0
  130. data/js/controls/textarea/textarea.js +24 -0
  131. data/js/controls/textarea/themes/default/textarea.css +21 -0
  132. data/js/controls/textarea/themes/default/textarea.html +18 -0
  133. data/js/controls/textcontrol/js.inc +0 -0
  134. data/js/controls/textcontrol/textcontrol.js +374 -0
  135. data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
  136. data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
  137. data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
  138. data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
  139. data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
  140. data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
  141. data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
  142. data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
  143. data/js/controls/uploader/js.inc +0 -0
  144. data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
  145. data/js/controls/uploader/themes/default/uploader.css +108 -0
  146. data/js/controls/uploader/themes/default/uploader.html +27 -0
  147. data/js/controls/uploader/uploader.js +154 -0
  148. data/js/controls/validatorview/js.inc +0 -0
  149. data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
  150. data/js/controls/validatorview/themes/default/validator.png +0 -0
  151. data/js/controls/validatorview/themes/default/validatorview.css +0 -0
  152. data/js/controls/validatorview/themes/default/validatorview.html +0 -0
  153. data/js/controls/validatorview/validatorview.js +62 -0
  154. data/js/controls/window/js.inc +0 -0
  155. data/js/controls/window/themes/default/window.css +219 -0
  156. data/js/controls/window/themes/default/window.html +17 -0
  157. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  158. data/js/controls/window/themes/default/window_bg_active.png +0 -0
  159. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  160. data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
  161. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  162. data/js/controls/window/themes/default/window_buttons.png +0 -0
  163. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  164. data/js/controls/window/themes/default/window_parts1.png +0 -0
  165. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  166. data/js/controls/window/themes/default/window_parts2.png +0 -0
  167. data/js/controls/window/window.js +286 -0
  168. data/js/core/class/class.js +318 -0
  169. data/js/core/class/js.inc +0 -0
  170. data/js/core/elem/elem.js +1383 -0
  171. data/js/core/elem/js.inc +0 -0
  172. data/js/core/event/event.js +153 -0
  173. data/js/core/event/js.inc +0 -0
  174. data/js/core/iefix/ie_css_element.htc +5 -0
  175. data/js/core/iefix/ie_css_style.htc +5 -0
  176. data/js/core/iefix/iefix.js +359 -0
  177. data/js/core/iefix/js.inc +0 -0
  178. data/js/core/rsence_ns/js.inc +0 -0
  179. data/js/core/rsence_ns/rsence_ns.js +21 -0
  180. data/js/datetime/calendar/calendar.js +198 -0
  181. data/js/datetime/calendar/js.inc +0 -0
  182. data/js/datetime/calendar/themes/default/calendar.css +108 -0
  183. data/js/datetime/calendar/themes/default/calendar.html +9 -0
  184. data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
  185. data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  186. data/js/datetime/datetimevalue/datetimevalue.js +247 -0
  187. data/js/datetime/datetimevalue/js.inc +0 -0
  188. data/js/datetime/timesheet/js.inc +0 -0
  189. data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
  190. data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
  191. data/js/datetime/timesheet/timesheet.js +183 -0
  192. data/js/datetime/timesheet_item/js.inc +0 -0
  193. data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
  194. data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
  195. data/js/datetime/timesheet_item/timesheet_item.js +248 -0
  196. data/js/datetime/timesheet_item_edit/js.inc +0 -0
  197. data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
  198. data/js/foundation/application/application.js +208 -0
  199. data/js/foundation/application/js.inc +0 -0
  200. data/js/foundation/control/control.js +339 -0
  201. data/js/foundation/control/controldefaults/controldefaults.js +56 -0
  202. data/js/foundation/control/controldefaults/js.inc +0 -0
  203. data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
  204. data/js/foundation/control/dummyvalue/js.inc +0 -0
  205. data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
  206. data/js/foundation/control/dyncontrol/js.inc +0 -0
  207. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
  208. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
  209. data/js/foundation/control/eventresponder/eventresponder.js +750 -0
  210. data/js/foundation/control/eventresponder/js.inc +0 -0
  211. data/js/foundation/control/js.inc +0 -0
  212. data/js/foundation/control/valuematrix/js.inc +0 -0
  213. data/js/foundation/control/valuematrix/valuematrix.js +135 -0
  214. data/js/foundation/control/valueresponder/js.inc +0 -0
  215. data/js/foundation/control/valueresponder/valueresponder.js +79 -0
  216. data/js/foundation/eventmanager/eventmanager.js +991 -0
  217. data/js/foundation/eventmanager/js.inc +0 -0
  218. data/js/foundation/geom/point/js.inc +0 -0
  219. data/js/foundation/geom/point/point.js +202 -0
  220. data/js/foundation/geom/rect/js.inc +0 -0
  221. data/js/foundation/geom/rect/rect.js +651 -0
  222. data/js/foundation/json_renderer/js.inc +0 -0
  223. data/js/foundation/json_renderer/json_renderer.js +246 -0
  224. data/js/foundation/system/js.inc +0 -0
  225. data/js/foundation/system/system.js +381 -0
  226. data/js/foundation/thememanager/js.inc +0 -0
  227. data/js/foundation/thememanager/thememanager.js +393 -0
  228. data/js/foundation/value/js.inc +0 -0
  229. data/js/foundation/value/value.js +183 -0
  230. data/js/foundation/view/js.inc +0 -0
  231. data/js/foundation/view/markupview/js.inc +0 -0
  232. data/js/foundation/view/markupview/markupview.js +114 -0
  233. data/js/foundation/view/morphanimation/js.inc +0 -0
  234. data/js/foundation/view/morphanimation/morphanimation.js +237 -0
  235. data/js/foundation/view/view.js +1812 -0
  236. data/js/foundation/view/viewdefaults/js.inc +0 -0
  237. data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
  238. data/js/lists/checkboxlist/checkboxlist.js +171 -0
  239. data/js/lists/checkboxlist/js.inc +0 -0
  240. data/js/lists/listitems/js.inc +0 -0
  241. data/js/lists/listitems/listitems.js +88 -0
  242. data/js/lists/propertylist/js.inc +0 -0
  243. data/js/lists/propertylist/propertylist.js +326 -0
  244. data/js/lists/radiobuttonlist/js.inc +0 -0
  245. data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
  246. data/js/util/reloadapp/js.inc +0 -0
  247. data/js/util/reloadapp/reloadapp.js +152 -0
  248. data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
  249. data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
  250. data/js/util/sha/js.inc +0 -0
  251. data/js/util/sha/sha.js +426 -0
  252. data/js/views/centerview/centerview.js +75 -0
  253. data/js/views/centerview/js.inc +0 -0
  254. data/js/views/inlineview/inlineview.js +15 -0
  255. data/js/views/inlineview/js.inc +0 -0
  256. data/js/views/scrollview/js.inc +0 -0
  257. data/js/views/scrollview/scrollview.js +40 -0
  258. data/lib/conf/argv.rb +850 -0
  259. data/lib/conf/default.rb +219 -0
  260. data/lib/daemon/daemon.rb +387 -0
  261. data/lib/daemon/sigcomm.rb +64 -0
  262. data/lib/http/broker.rb +150 -0
  263. data/lib/http/rackup.rb +91 -0
  264. data/lib/http/request.rb +66 -0
  265. data/lib/http/response.rb +65 -0
  266. data/lib/plugins/dependencies.rb +285 -0
  267. data/lib/plugins/gui_plugin.rb +160 -0
  268. data/lib/plugins/guiparser.rb +123 -0
  269. data/lib/plugins/plugin.rb +438 -0
  270. data/lib/plugins/plugin_base.rb +162 -0
  271. data/lib/plugins/plugin_plugins.rb +81 -0
  272. data/lib/plugins/plugin_sqlite_db.rb +98 -0
  273. data/lib/plugins/pluginmanager.rb +635 -0
  274. data/lib/plugins/plugins.rb +169 -0
  275. data/lib/plugins/servlet.rb +108 -0
  276. data/lib/rsence.rb +32 -0
  277. data/lib/session/msg.rb +327 -0
  278. data/lib/session/sessionmanager.rb +522 -0
  279. data/lib/session/sessionstorage.rb +340 -0
  280. data/lib/transporter/transporter.rb +263 -0
  281. data/lib/util/gzstring.rb +9 -0
  282. data/lib/util/ruby19_fixes.rb +18 -0
  283. data/lib/values/hvalue.rb +378 -0
  284. data/lib/values/valuemanager.rb +172 -0
  285. data/plugins/client_pkg/client_pkg.rb +157 -0
  286. data/plugins/client_pkg/info.yaml +25 -0
  287. data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
  288. data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
  289. data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
  290. data/plugins/index_html/img/loading.gif +0 -0
  291. data/plugins/index_html/img/riassence.gif +0 -0
  292. data/plugins/index_html/index_html.rb +120 -0
  293. data/plugins/index_html/info.yaml +18 -0
  294. data/plugins/index_html/tmpl/index.html +15 -0
  295. data/plugins/main/info.yaml +18 -0
  296. data/plugins/main/js/main.js +84 -0
  297. data/plugins/main/main.rb +255 -0
  298. data/plugins/main/values.yaml +8 -0
  299. data/plugins/ticket/info.yaml +21 -0
  300. data/plugins/ticket/lib/common.rb +392 -0
  301. data/plugins/ticket/lib/favicon.rb +39 -0
  302. data/plugins/ticket/lib/file.rb +58 -0
  303. data/plugins/ticket/lib/img.rb +50 -0
  304. data/plugins/ticket/lib/objblob.rb +66 -0
  305. data/plugins/ticket/lib/rsrc.rb +34 -0
  306. data/plugins/ticket/lib/upload.rb +236 -0
  307. data/plugins/ticket/ticket.rb +333 -0
  308. data/setup/welcome/gui/welcome.yaml +92 -0
  309. data/setup/welcome/info.yaml +13 -0
  310. data/setup/welcome/text/welcome.html +9 -0
  311. data/setup/welcome/values.yaml +9 -0
  312. data/setup/welcome/welcome.rb +54 -0
  313. 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