rsence 2.0.0.0.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 (311) hide show
  1. data/INSTALL.rdoc +295 -0
  2. data/LICENSE +622 -0
  3. data/README.rdoc +24 -0
  4. data/VERSION +1 -0
  5. data/bin/build_client.rb +254 -0
  6. data/bin/help +6 -0
  7. data/bin/launch.rb +120 -0
  8. data/bin/rdoc.sh +2 -0
  9. data/bin/restart +6 -0
  10. data/bin/rsence +120 -0
  11. data/bin/run +6 -0
  12. data/bin/run.rb +6 -0
  13. data/bin/save +6 -0
  14. data/bin/start +6 -0
  15. data/bin/status +6 -0
  16. data/bin/stop +6 -0
  17. data/conf/config.ru +5 -0
  18. data/conf/default_conf.yaml +337 -0
  19. data/conf/default_strings.yaml +77 -0
  20. data/conf/local_conf.yaml +14 -0
  21. data/conf/unicorn.conf +78 -0
  22. data/js/comm/comm/autosync/autosync.js +18 -0
  23. data/js/comm/comm/autosync/js.inc +0 -0
  24. data/js/comm/comm/comm.js +195 -0
  25. data/js/comm/comm/js.inc +0 -0
  26. data/js/comm/comm/queue/js.inc +0 -0
  27. data/js/comm/comm/queue/queue.js +183 -0
  28. data/js/comm/comm/session/js.inc +0 -0
  29. data/js/comm/comm/session/session.js +51 -0
  30. data/js/comm/comm/sessionwatcher/js.inc +0 -0
  31. data/js/comm/comm/sessionwatcher/sessionwatcher.js +43 -0
  32. data/js/comm/comm/transporter/js.inc +0 -0
  33. data/js/comm/comm/transporter/transporter.js +257 -0
  34. data/js/comm/comm/urlresponder/js.inc +0 -0
  35. data/js/comm/comm/urlresponder/urlresponder.js +148 -0
  36. data/js/comm/comm/values/js.inc +0 -0
  37. data/js/comm/comm/values/values.js +432 -0
  38. data/js/comm/jsloader/js.inc +0 -0
  39. data/js/comm/jsloader/jsloader.js +114 -0
  40. data/js/comm/reloadapp/js.inc +0 -0
  41. data/js/comm/reloadapp/reloadapp.js +150 -0
  42. data/js/comm/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
  43. data/js/comm/reloadapp/themes/default/reloadapp_warning.png +0 -0
  44. data/js/comm/sha/js.inc +0 -0
  45. data/js/comm/sha/sha.js +432 -0
  46. data/js/comm/values/value/js.inc +0 -0
  47. data/js/comm/values/value/value.js +182 -0
  48. data/js/comm/values/valuematrix/js.inc +0 -0
  49. data/js/comm/values/valuematrix/valuematrix.js +138 -0
  50. data/js/controls/button/button.js +57 -0
  51. data/js/controls/button/js.inc +0 -0
  52. data/js/controls/button/themes/bright/button.css +89 -0
  53. data/js/controls/button/themes/bright/button.html +7 -0
  54. data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
  55. data/js/controls/button/themes/bright/button_parts1.png +0 -0
  56. data/js/controls/button/themes/default/button.css +89 -0
  57. data/js/controls/button/themes/default/button.html +7 -0
  58. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  59. data/js/controls/button/themes/default/button_parts1.png +0 -0
  60. data/js/controls/checkbox/checkbox.js +47 -0
  61. data/js/controls/checkbox/js.inc +0 -0
  62. data/js/controls/checkbox/themes/default/checkbox.css +69 -0
  63. data/js/controls/checkbox/themes/default/checkbox.html +5 -0
  64. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  65. data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
  66. data/js/controls/datetime/calendar/calendar.js +197 -0
  67. data/js/controls/datetime/calendar/js.inc +0 -0
  68. data/js/controls/datetime/calendar/themes/default/calendar.css +108 -0
  69. data/js/controls/datetime/calendar/themes/default/calendar.html +9 -0
  70. data/js/controls/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
  71. data/js/controls/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  72. data/js/controls/datetime/datetimevalue/datetimevalue.js +246 -0
  73. data/js/controls/datetime/datetimevalue/js.inc +0 -0
  74. data/js/controls/datetime/timesheet/js.inc +0 -0
  75. data/js/controls/datetime/timesheet/themes/default/timesheet.css +30 -0
  76. data/js/controls/datetime/timesheet/themes/default/timesheet.html +2 -0
  77. data/js/controls/datetime/timesheet/timesheet.js +182 -0
  78. data/js/controls/datetime/timesheet_item/js.inc +0 -0
  79. data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
  80. data/js/controls/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
  81. data/js/controls/datetime/timesheet_item/timesheet_item.js +247 -0
  82. data/js/controls/datetime/timesheet_item_edit/js.inc +0 -0
  83. data/js/controls/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
  84. data/js/controls/dialogs/alert_sheet/alert_sheet.js +62 -0
  85. data/js/controls/dialogs/alert_sheet/js.inc +0 -0
  86. data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +36 -0
  87. data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
  88. data/js/controls/dialogs/sheet/js.inc +0 -0
  89. data/js/controls/dialogs/sheet/sheet.js +83 -0
  90. data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
  91. data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
  92. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  93. data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
  94. data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
  95. data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
  96. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  97. data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
  98. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  99. data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
  100. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  101. data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
  102. data/js/controls/imageview/imageview.js +108 -0
  103. data/js/controls/imageview/js.inc +0 -0
  104. data/js/controls/imageview/themes/default/blank.gif +0 -0
  105. data/js/controls/lists/checkboxlist/checkboxlist.js +170 -0
  106. data/js/controls/lists/checkboxlist/js.inc +0 -0
  107. data/js/controls/lists/listitems/js.inc +0 -0
  108. data/js/controls/lists/listitems/listitems.js +65 -0
  109. data/js/controls/lists/radiobuttonlist/js.inc +0 -0
  110. data/js/controls/lists/radiobuttonlist/radiobuttonlist.js +126 -0
  111. data/js/controls/passwordcontrol/js.inc +0 -0
  112. data/js/controls/passwordcontrol/passwordcontrol.js +22 -0
  113. data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
  114. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
  115. data/js/controls/progress/progressbar/js.inc +0 -0
  116. data/js/controls/progress/progressbar/progressbar.js +36 -0
  117. data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
  118. data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
  119. data/js/controls/progress/progressindicator/js.inc +0 -0
  120. data/js/controls/progress/progressindicator/progressindicator.js +43 -0
  121. data/js/controls/radiobutton/js.inc +0 -0
  122. data/js/controls/radiobutton/radiobutton.js +41 -0
  123. data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
  124. data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
  125. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  126. data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
  127. data/js/controls/sliders/slider/js.inc +0 -0
  128. data/js/controls/sliders/slider/slider.js +356 -0
  129. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  130. data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
  131. data/js/controls/sliders/slider/themes/default/slider.css +108 -0
  132. data/js/controls/sliders/slider/themes/default/slider.html +5 -0
  133. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  134. data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
  135. data/js/controls/sliders/vslider/js.inc +0 -0
  136. data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
  137. data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
  138. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  139. data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
  140. data/js/controls/sliders/vslider/vslider.js +40 -0
  141. data/js/controls/stepper/js.inc +0 -0
  142. data/js/controls/stepper/stepper.js +212 -0
  143. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  144. data/js/controls/stepper/themes/default/stepper.css +14 -0
  145. data/js/controls/stepper/themes/default/stepper.html +2 -0
  146. data/js/controls/stepper/themes/default/stepper.png +0 -0
  147. data/js/controls/stringview/js.inc +0 -0
  148. data/js/controls/stringview/stringview.js +49 -0
  149. data/js/controls/stringview/themes/default/stringview.css +8 -0
  150. data/js/controls/stringview/themes/default/stringview.html +1 -0
  151. data/js/controls/tab/js.inc +0 -0
  152. data/js/controls/tab/tab.js +276 -0
  153. data/js/controls/tab/themes/bright/tab.css +76 -0
  154. data/js/controls/tab/themes/bright/tab.html +6 -0
  155. data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
  156. data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
  157. data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
  158. data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
  159. data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
  160. data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
  161. data/js/controls/tab/themes/default/tab.css +77 -0
  162. data/js/controls/tab/themes/default/tab.html +6 -0
  163. data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
  164. data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
  165. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  166. data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
  167. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  168. data/js/controls/tab/themes/default/tab_parts1.png +0 -0
  169. data/js/controls/textarea/js.inc +0 -0
  170. data/js/controls/textarea/textarea.js +23 -0
  171. data/js/controls/textarea/themes/default/textarea.css +21 -0
  172. data/js/controls/textarea/themes/default/textarea.html +18 -0
  173. data/js/controls/textcontrol/js.inc +0 -0
  174. data/js/controls/textcontrol/textcontrol.js +372 -0
  175. data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
  176. data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
  177. data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
  178. data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
  179. data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
  180. data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
  181. data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
  182. data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
  183. data/js/controls/uploader/js.inc +0 -0
  184. data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
  185. data/js/controls/uploader/themes/default/uploader.css +108 -0
  186. data/js/controls/uploader/themes/default/uploader.html +27 -0
  187. data/js/controls/uploader/uploader.js +153 -0
  188. data/js/controls/validatorview/js.inc +0 -0
  189. data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
  190. data/js/controls/validatorview/themes/default/validator.png +0 -0
  191. data/js/controls/validatorview/themes/default/validatorview.css +0 -0
  192. data/js/controls/validatorview/themes/default/validatorview.html +0 -0
  193. data/js/controls/validatorview/validatorview.js +55 -0
  194. data/js/controls/window/js.inc +0 -0
  195. data/js/controls/window/themes/default/window.css +219 -0
  196. data/js/controls/window/themes/default/window.html +17 -0
  197. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  198. data/js/controls/window/themes/default/window_bg_active.png +0 -0
  199. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  200. data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
  201. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  202. data/js/controls/window/themes/default/window_buttons.png +0 -0
  203. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  204. data/js/controls/window/themes/default/window_parts1.png +0 -0
  205. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  206. data/js/controls/window/themes/default/window_parts2.png +0 -0
  207. data/js/controls/window/window.js +284 -0
  208. data/js/core/class/class.js +317 -0
  209. data/js/core/class/js.inc +0 -0
  210. data/js/core/elem/elem.js +1376 -0
  211. data/js/core/elem/js.inc +0 -0
  212. data/js/core/event/event.js +1021 -0
  213. data/js/core/event/js.inc +0 -0
  214. data/js/core/iefix/ie_css_element.htc +5 -0
  215. data/js/core/iefix/ie_css_style.htc +5 -0
  216. data/js/core/iefix/iefix.js +359 -0
  217. data/js/core/iefix/js.inc +0 -0
  218. data/js/debugg/debugg.js +43 -0
  219. data/js/debugg/js.inc +0 -0
  220. data/js/foundation/application/application.js +209 -0
  221. data/js/foundation/application/js.inc +0 -0
  222. data/js/foundation/control/control.js +342 -0
  223. data/js/foundation/control/controldefaults/controldefaults.js +59 -0
  224. data/js/foundation/control/controldefaults/js.inc +0 -0
  225. data/js/foundation/control/dummyvalue/dummyvalue.js +50 -0
  226. data/js/foundation/control/dummyvalue/js.inc +0 -0
  227. data/js/foundation/control/dyncontrol/dyncontrol.js +494 -0
  228. data/js/foundation/control/dyncontrol/js.inc +0 -0
  229. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
  230. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
  231. data/js/foundation/control/eventresponder/eventresponder.js +713 -0
  232. data/js/foundation/control/eventresponder/js.inc +0 -0
  233. data/js/foundation/control/js.inc +0 -0
  234. data/js/foundation/control/valueresponder/js.inc +0 -0
  235. data/js/foundation/control/valueresponder/valueresponder.js +77 -0
  236. data/js/foundation/geom/point/js.inc +0 -0
  237. data/js/foundation/geom/point/point.js +202 -0
  238. data/js/foundation/geom/rect/js.inc +0 -0
  239. data/js/foundation/geom/rect/rect.js +610 -0
  240. data/js/foundation/json_renderer/js.inc +0 -0
  241. data/js/foundation/json_renderer/json_renderer.js +231 -0
  242. data/js/foundation/system/js.inc +0 -0
  243. data/js/foundation/system/system.js +369 -0
  244. data/js/foundation/thememanager/js.inc +0 -0
  245. data/js/foundation/thememanager/thememanager.js +387 -0
  246. data/js/foundation/view/js.inc +0 -0
  247. data/js/foundation/view/markupview/js.inc +0 -0
  248. data/js/foundation/view/markupview/markupview.js +113 -0
  249. data/js/foundation/view/morphanimation/js.inc +0 -0
  250. data/js/foundation/view/morphanimation/morphanimation.js +236 -0
  251. data/js/foundation/view/view.js +1804 -0
  252. data/js/foundation/view/viewdefaults/js.inc +0 -0
  253. data/js/foundation/view/viewdefaults/viewdefaults.js +25 -0
  254. data/js/views/centerview/centerview.js +45 -0
  255. data/js/views/centerview/js.inc +0 -0
  256. data/js/views/inlineview/inlineview.js +14 -0
  257. data/js/views/inlineview/js.inc +0 -0
  258. data/js/views/scrollview/js.inc +0 -0
  259. data/js/views/scrollview/scrollview.js +39 -0
  260. data/lib/conf/default.rb +220 -0
  261. data/lib/conf/wizard.rb +303 -0
  262. data/lib/daemon/daemon.rb +293 -0
  263. data/lib/http/broker.rb +102 -0
  264. data/lib/http/rackup.rb +88 -0
  265. data/lib/http/request.rb +69 -0
  266. data/lib/http/response.rb +63 -0
  267. data/lib/plugins/gui_plugin.rb +129 -0
  268. data/lib/plugins/guiparser.rb +114 -0
  269. data/lib/plugins/plugin.rb +652 -0
  270. data/lib/plugins/plugin_plugins.rb +47 -0
  271. data/lib/plugins/plugin_sqlite_db.rb +72 -0
  272. data/lib/plugins/plugin_util.rb +96 -0
  273. data/lib/plugins/pluginmanager.rb +517 -0
  274. data/lib/plugins/servlet.rb +69 -0
  275. data/lib/session/msg.rb +291 -0
  276. data/lib/session/sessionmanager.rb +491 -0
  277. data/lib/session/sessionstorage.rb +314 -0
  278. data/lib/transporter/transporter.rb +254 -0
  279. data/lib/util/gzstring.rb +5 -0
  280. data/lib/values/hvalue.rb +323 -0
  281. data/lib/values/valuemanager.rb +152 -0
  282. data/plugins/client_pkg/client_pkg.rb +186 -0
  283. data/plugins/client_pkg/info.yaml +25 -0
  284. data/plugins/client_pkg/lib/client_pkg_build.rb +569 -0
  285. data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
  286. data/plugins/client_pkg/lib/client_pkg_serve.rb +210 -0
  287. data/plugins/client_pkg/log/build_log +0 -0
  288. data/plugins/index_html/img/loading.gif +0 -0
  289. data/plugins/index_html/img/riassence.gif +0 -0
  290. data/plugins/index_html/index_html.rb +150 -0
  291. data/plugins/index_html/tmpl/index.html +22 -0
  292. data/plugins/index_html/tmpl/startup_index.html +29 -0
  293. data/plugins/legacy/disabled +0 -0
  294. data/plugins/legacy/disabled- +0 -0
  295. data/plugins/legacy/info.yaml +22 -0
  296. data/plugins/legacy/legacy.rb +15 -0
  297. data/plugins/main/js/riassence_ns.js +87 -0
  298. data/plugins/main/main.rb +234 -0
  299. data/plugins/main/values.yaml +8 -0
  300. data/plugins/ticketservices/lib/common.rb +300 -0
  301. data/plugins/ticketservices/lib/favicon.rb +38 -0
  302. data/plugins/ticketservices/lib/file.rb +58 -0
  303. data/plugins/ticketservices/lib/img.rb +50 -0
  304. data/plugins/ticketservices/lib/objblob.rb +66 -0
  305. data/plugins/ticketservices/lib/rsrc.rb +34 -0
  306. data/plugins/ticketservices/lib/upload.rb +206 -0
  307. data/plugins/ticketservices/ticketservices.rb +268 -0
  308. data/var/db/.git_include +0 -0
  309. data/var/log/.git_include +0 -0
  310. data/var/run/.git_include +0 -0
  311. metadata +390 -0
@@ -0,0 +1,38 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ module TicketService
13
+ module Favicon
14
+
15
+ def favicon( req, res ) # :nodoc:
16
+
17
+ res.status = 200
18
+
19
+ favicon_data = @raw_uris['favicon.ico']
20
+
21
+ res['Content-Type'] = favicon_data[0]
22
+ res['Content-Length'] = favicon_data[1]
23
+
24
+ res['Date'] = httime( Time.now )
25
+ res.body = favicon_data[2]
26
+
27
+ end
28
+
29
+ # Sets favicon. First parameter is favicon data and the second one is content type which defaults to false.
30
+ def set_favicon( ico_data, content_type=false )
31
+ @raw_uris['favicon.ico'][0] = content_type if content_type
32
+ @raw_uris['favicon.ico'][1] = ico_data.size.to_s
33
+ @raw_uris['favicon.ico'][2] = ico_data
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,58 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ module TicketService
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
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ module TicketService
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
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ module TicketService
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
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ module TicketService
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,206 @@
1
+ #--
2
+ ## Riassence Framework
3
+ # Copyright 2008 Riassence Inc.
4
+ # http://riassence.com/
5
+ #
6
+ # You should have received a copy of the GNU General Public License along
7
+ # with this software package. If not, contact licensing@riassence.com
8
+ ##
9
+ #++
10
+
11
+
12
+ =begin
13
+
14
+ Handles uploads by using tickets and other filters.
15
+
16
+ Upload success states:
17
+ 0: Idle, default, ready to upload
18
+ 1: Upload started
19
+ 2: Upload completed
20
+ 3: Upload processed
21
+ 4: Client requests new key
22
+
23
+ Upload failure states:
24
+ -1: Invalid request (missing query keys)
25
+ -2: Invalid or missing key
26
+ -3: Invalid mime-type (invalid data format)
27
+ -4: File too big
28
+ -5: Key request forbidden (when calling upload_key)
29
+ -6: Post-processing failed
30
+
31
+
32
+ Default upload table:
33
+
34
+ create table rsence_uploads (
35
+ id int primary key auto_increment,
36
+ ses_id int not null,
37
+ upload_date int not null,
38
+ upload_done tinyint not null default 0,
39
+ file_size int not null default 0,
40
+ file_mime varchar(255) not null default 'text/plain',
41
+ file_data mediumblob
42
+ )
43
+ =end
44
+
45
+ require 'sequel'
46
+
47
+ module TicketService
48
+ module Upload
49
+
50
+ def upload(request,response)
51
+
52
+ ticket_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:u]}(.*)$/)[1]
53
+ value_id = request.query['value_id']
54
+
55
+ if not @upload_slots[:by_id].has_key?(ticket_id)
56
+ done_value = '-2:::Invalid or missing key'
57
+ else
58
+ ## Get data stored in the upload slot
59
+ (mime_allow,max_size,ses_id,value_key,allow_multi) = @upload_slots[:by_id][ticket_id]
60
+ if not allow_multi
61
+ @upload_slots[:by_id].delete( ticket_id )
62
+ end
63
+ ## The upload form field
64
+ file_data = request.query['file_data']
65
+ file_mimetype = file_data[:type]
66
+ file_filename = file_data[:filename]
67
+ ## Get the size from the temporary file
68
+ file_size = file_data[:tempfile].stat.size
69
+ ## Check for errors
70
+ if not mime_allow.match(file_mimetype)
71
+ done_value = "-3:::#{ticket_id}"
72
+ elsif not file_size < max_size
73
+ done_value = "-4:::#{ticket_id}"
74
+ else
75
+ done_value = "2:::#{ticket_id}"
76
+ ## Insert basic data about the upload and get its key
77
+ upload_id = @db[:rsence_uploads].insert(
78
+ :ses_id => ses_id,
79
+ :ticket_id => ticket_id,
80
+ :upload_date => Time.now.to_i,
81
+ :upload_done => false,
82
+ :file_name => file_filename,
83
+ :file_size => file_size,
84
+ :file_mime => file_mimetype,
85
+ :file_data => ''
86
+ )
87
+ if not @upload_slots[:uploaded].has_key?(ticket_id)
88
+ @upload_slots[:uploaded][ticket_id] = []
89
+ end
90
+ @upload_slots[:uploaded][ticket_id].push( upload_id )
91
+
92
+ ## Start a loop to read the tempfile as chunks of the upload into the
93
+ ## database (4k chunks, so mysql won't choke with its default settings)
94
+ @db[:rsence_uploads].filter(:id => upload_id).update(
95
+ :file_data => file_data[:tempfile].read.to_sequel_blob,
96
+ :upload_done => true
97
+ )
98
+ end
99
+ end
100
+
101
+ response_body = %{
102
+ <html>
103
+ <head>
104
+ <script type="text/javascript">
105
+ with(parent){
106
+ HVM.values[#{value_id.to_json}].set(#{done_value.to_json});
107
+ }
108
+ </script>
109
+ </head>
110
+ <body></body>
111
+ </html>
112
+ }
113
+
114
+ response.status = 200
115
+ response['content-type'] = 'text/html; charset=UTF-8'
116
+ response['content-length'] = response_body.size.to_s
117
+ response.body = response_body
118
+ end
119
+
120
+ def get_uploads( ticket_id, with_data=false )
121
+ uploads = []
122
+ if @upload_slots[:uploaded].has_key?(ticket_id)
123
+ @upload_slots[:uploaded][ticket_id].each do |row_id|
124
+ if with_data
125
+ row_datas = @db[:rsence_uploads].select(
126
+ :upload_date, :upload_done, :file_name,
127
+ :file_size, :file_mime, :file_data
128
+ ).filter(
129
+ :id => row_id
130
+ )
131
+ if row_datas.size == 1
132
+ row_data = row_datas.first
133
+ row_hash = {
134
+ :date => Time.at(row_data[:upload_date]),
135
+ :done => row_data[:upload_done],
136
+ :size => row_data[:file_size],
137
+ :mime => row_data[:file_mime],
138
+ :name => row_data[:file_name],
139
+ :data => row_data[:file_data]
140
+ }
141
+ uploads.push(row_hash)
142
+ end
143
+ else
144
+ row_datas = @db[:rsence_uploads].select(
145
+ :upload_date, :upload_done, :file_name,
146
+ :file_size, :file_mime
147
+ ).filter(
148
+ :id => row_id
149
+ )
150
+ if row_datas.size == 1
151
+ row_data = row_datas.first
152
+ row_hash = {
153
+ :date => Time.at(row_data[:upload_date]),
154
+ :done => row_data[:upload_done],
155
+ :size => row_data[:file_size],
156
+ :mime => row_data[:file_mime],
157
+ :name => row_data[:file_name],
158
+ :data => nil
159
+ }
160
+ uploads.push(row_hash)
161
+ end
162
+ end
163
+ end
164
+ end
165
+ return uploads
166
+ end
167
+
168
+ def del_upload( ticket_id, row_id )
169
+ @upload_slots[:uploaded][ticket_id].delete(row_id)
170
+ @db[:rsence_uploads].filter( :id => row_id ).delete
171
+ end
172
+
173
+ # removes uploaded files
174
+ def del_uploads( ticket_id, ses_id=false )
175
+ if ses_id and @upload_slots[:ses_ids].has_key?( ses_id )
176
+ if @upload_slots[:ses_ids][ses_id].include?( ticket_id )
177
+ @upload_slots[:ses_ids][ses_id].delete( ticket_id )
178
+ end
179
+ end
180
+ if @upload_slots[:uploaded].has_key?( ticket_id )
181
+ @upload_slots[:uploaded][ticket_id].each do |row_id|
182
+ @upload_slots[:uploaded][ticket_id].delete( row_id )
183
+ @db[:rsence_uploads].filter( :id => row_id ).delete
184
+ end
185
+ @upload_slots[:uploaded].delete( ticket_id )
186
+ end
187
+ if @upload_slots[:by_id].has_key?( ticket_id )
188
+ @upload_slots[:by_id].delete( ticket_id )
189
+ end
190
+ @db[:rsence_uploads].filter( :ticket_id => ticket_id ).delete
191
+ @db[:rsence_uploads].filter( :ses_id => ses_id ).delete
192
+ end
193
+
194
+ def upload_key(msg,value_key,max_size=1000000,mime_allow=/(.*?)\/(.*?)/,allow_multi=true)
195
+ key = @randgen.gen
196
+ while @upload_slots[:by_id].has_key?(key)
197
+ key = @randgen.gen
198
+ end
199
+ @upload_slots[:by_id][key] = [mime_allow,max_size,msg.ses_id,value_key,allow_multi]
200
+ @upload_slots[:uploaded][key] = []
201
+ @upload_slots[:ses_ids][msg.ses_id] = [] unless @upload_slots[:ses_ids].has_key?(msg.ses_id)
202
+ @upload_slots[:ses_ids][msg.ses_id].push( key )
203
+ return "0:::#{key}"
204
+ end
205
+ end
206
+ end