fluid_cli 0.1.2

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 (329) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -0
  3. data/dev.yml +5 -0
  4. data/exe/fluid +24 -0
  5. data/lib/fluid_cli/api.rb +135 -0
  6. data/lib/fluid_cli/assets/post_auth_page/index.html.erb +34 -0
  7. data/lib/fluid_cli/assets/post_auth_page/style.css +58 -0
  8. data/lib/fluid_cli/command.rb +55 -0
  9. data/lib/fluid_cli/commands/help.rb +21 -0
  10. data/lib/fluid_cli/commands/login.rb +30 -0
  11. data/lib/fluid_cli/commands/logout.rb +38 -0
  12. data/lib/fluid_cli/commands/switch.rb +23 -0
  13. data/lib/fluid_cli/commands/theme/common/company_helper.rb +15 -0
  14. data/lib/fluid_cli/commands/theme/common/root_helper.rb +95 -0
  15. data/lib/fluid_cli/commands/theme/dev.rb +61 -0
  16. data/lib/fluid_cli/commands/theme/help.rb +21 -0
  17. data/lib/fluid_cli/commands/theme/init.rb +46 -0
  18. data/lib/fluid_cli/commands/theme/pull.rb +68 -0
  19. data/lib/fluid_cli/commands/theme/push.rb +132 -0
  20. data/lib/fluid_cli/commands/theme.rb +23 -0
  21. data/lib/fluid_cli/commands/whoami.rb +23 -0
  22. data/lib/fluid_cli/commands.rb +19 -0
  23. data/lib/fluid_cli/company_switcher.rb +69 -0
  24. data/lib/fluid_cli/context.rb +691 -0
  25. data/lib/fluid_cli/db.rb +114 -0
  26. data/lib/fluid_cli/entry_point.rb +10 -0
  27. data/lib/fluid_cli/environment.rb +32 -0
  28. data/lib/fluid_cli/file_system_listener.rb +29 -0
  29. data/lib/fluid_cli/form.rb +42 -0
  30. data/lib/fluid_cli/git.rb +319 -0
  31. data/lib/fluid_cli/http_request.rb +54 -0
  32. data/lib/fluid_cli/identity_auth/servlet.rb +39 -0
  33. data/lib/fluid_cli/identity_auth.rb +126 -0
  34. data/lib/fluid_cli/options.rb +38 -0
  35. data/lib/fluid_cli/theme/dev_server/certificate_manager.rb +79 -0
  36. data/lib/fluid_cli/theme/dev_server/errors.rb +9 -0
  37. data/lib/fluid_cli/theme/dev_server/header_hash.rb +98 -0
  38. data/lib/fluid_cli/theme/dev_server/hooks/file_change_hook.rb +39 -0
  39. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
  40. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot_reload.js +28 -0
  41. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
  42. data/lib/fluid_cli/theme/dev_server/hot_reload/resources/theme.js +16 -0
  43. data/lib/fluid_cli/theme/dev_server/hot_reload/script_injector.rb +54 -0
  44. data/lib/fluid_cli/theme/dev_server/hot_reload.rb +75 -0
  45. data/lib/fluid_cli/theme/dev_server/local_assets.rb +92 -0
  46. data/lib/fluid_cli/theme/dev_server/proxy.rb +235 -0
  47. data/lib/fluid_cli/theme/dev_server/proxy_param_builder.rb +82 -0
  48. data/lib/fluid_cli/theme/dev_server/reload_mode.rb +34 -0
  49. data/lib/fluid_cli/theme/dev_server/sse.rb +75 -0
  50. data/lib/fluid_cli/theme/dev_server/watcher.rb +57 -0
  51. data/lib/fluid_cli/theme/dev_server/web_server.rb +140 -0
  52. data/lib/fluid_cli/theme/dev_server.rb +289 -0
  53. data/lib/fluid_cli/theme/development_theme.rb +101 -0
  54. data/lib/fluid_cli/theme/file.rb +105 -0
  55. data/lib/fluid_cli/theme/forms/select.rb +33 -0
  56. data/lib/fluid_cli/theme/mime_type.rb +34 -0
  57. data/lib/fluid_cli/theme/presenters/theme_presenter.rb +49 -0
  58. data/lib/fluid_cli/theme/presenters/themes_presenter.rb +31 -0
  59. data/lib/fluid_cli/theme/root.rb +62 -0
  60. data/lib/fluid_cli/theme/syncer/checksums.rb +66 -0
  61. data/lib/fluid_cli/theme/syncer/downloader.rb +54 -0
  62. data/lib/fluid_cli/theme/syncer/error_reporter.rb +45 -0
  63. data/lib/fluid_cli/theme/syncer/merger.rb +53 -0
  64. data/lib/fluid_cli/theme/syncer/operation.rb +58 -0
  65. data/lib/fluid_cli/theme/syncer/standard_reporter.rb +32 -0
  66. data/lib/fluid_cli/theme/syncer/unsupported_script_warning.rb +90 -0
  67. data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
  68. data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
  69. data/lib/fluid_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
  70. data/lib/fluid_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
  71. data/lib/fluid_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
  72. data/lib/fluid_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
  73. data/lib/fluid_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
  74. data/lib/fluid_cli/theme/syncer/uploader.rb +105 -0
  75. data/lib/fluid_cli/theme/syncer.rb +412 -0
  76. data/lib/fluid_cli/theme/theme.rb +186 -0
  77. data/lib/fluid_cli/theme/ui/sync_progress_bar.rb +22 -0
  78. data/lib/fluid_cli/thread_pool/job.rb +35 -0
  79. data/lib/fluid_cli/thread_pool.rb +49 -0
  80. data/lib/fluid_cli/version.rb +3 -0
  81. data/lib/fluid_cli.rb +59 -0
  82. data/vendor/deps/base64/.document +5 -0
  83. data/vendor/deps/base64/.gitignore +9 -0
  84. data/vendor/deps/base64/BSDL +22 -0
  85. data/vendor/deps/base64/COPYING +56 -0
  86. data/vendor/deps/base64/Gemfile +9 -0
  87. data/vendor/deps/base64/LEGAL +60 -0
  88. data/vendor/deps/base64/README.md +48 -0
  89. data/vendor/deps/base64/Rakefile +31 -0
  90. data/vendor/deps/base64/base64.gemspec +28 -0
  91. data/vendor/deps/base64/bin/console +14 -0
  92. data/vendor/deps/base64/bin/setup +8 -0
  93. data/vendor/deps/base64/lib/base64.rb +382 -0
  94. data/vendor/deps/base64/sig/base64.rbs +358 -0
  95. data/vendor/deps/base64/test/base64/test_base64.rb +115 -0
  96. data/vendor/deps/base64/test_sig/test_base64.rb +44 -0
  97. data/vendor/deps/cli-kit/REVISION +1 -0
  98. data/vendor/deps/cli-kit/lib/cli/kit/args/definition.rb +286 -0
  99. data/vendor/deps/cli-kit/lib/cli/kit/args/evaluation.rb +215 -0
  100. data/vendor/deps/cli-kit/lib/cli/kit/args/parser/node.rb +128 -0
  101. data/vendor/deps/cli-kit/lib/cli/kit/args/parser.rb +125 -0
  102. data/vendor/deps/cli-kit/lib/cli/kit/args/tokenizer.rb +130 -0
  103. data/vendor/deps/cli-kit/lib/cli/kit/args.rb +16 -0
  104. data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +30 -0
  105. data/vendor/deps/cli-kit/lib/cli/kit/command_help.rb +268 -0
  106. data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +150 -0
  107. data/vendor/deps/cli-kit/lib/cli/kit/config.rb +137 -0
  108. data/vendor/deps/cli-kit/lib/cli/kit/core_ext.rb +28 -0
  109. data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +166 -0
  110. data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +92 -0
  111. data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +91 -0
  112. data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +92 -0
  113. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +94 -0
  114. data/vendor/deps/cli-kit/lib/cli/kit/opts.rb +248 -0
  115. data/vendor/deps/cli-kit/lib/cli/kit/parse_args.rb +55 -0
  116. data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +66 -0
  117. data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +260 -0
  118. data/vendor/deps/cli-kit/lib/cli/kit/support.rb +11 -0
  119. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +290 -0
  120. data/vendor/deps/cli-kit/lib/cli/kit/util.rb +118 -0
  121. data/vendor/deps/cli-kit/lib/cli/kit/version.rb +7 -0
  122. data/vendor/deps/cli-kit/lib/cli/kit.rb +139 -0
  123. data/vendor/deps/cli-ui/REVISION +1 -0
  124. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +218 -0
  125. data/vendor/deps/cli-ui/lib/cli/ui/color.rb +101 -0
  126. data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +219 -0
  127. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +67 -0
  128. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +179 -0
  129. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +152 -0
  130. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +127 -0
  131. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +286 -0
  132. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +92 -0
  133. data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
  134. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +64 -0
  135. data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +132 -0
  136. data/vendor/deps/cli-ui/lib/cli/ui/progress_reporter.rb +209 -0
  137. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +583 -0
  138. data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +36 -0
  139. data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +381 -0
  140. data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +48 -0
  141. data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +602 -0
  142. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +79 -0
  143. data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +399 -0
  144. data/vendor/deps/cli-ui/lib/cli/ui/table.rb +83 -0
  145. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +55 -0
  146. data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +106 -0
  147. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +8 -0
  148. data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +46 -0
  149. data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +79 -0
  150. data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +89 -0
  151. data/vendor/deps/cli-ui/lib/cli/ui/work_queue.rb +142 -0
  152. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +61 -0
  153. data/vendor/deps/cli-ui/lib/cli/ui.rb +359 -0
  154. data/vendor/deps/cli-ui/vendor/reentrant_mutex.rb +78 -0
  155. data/vendor/deps/debug/CONTRIBUTING.md +573 -0
  156. data/vendor/deps/debug/Gemfile +10 -0
  157. data/vendor/deps/debug/LICENSE.txt +22 -0
  158. data/vendor/deps/debug/README.md +996 -0
  159. data/vendor/deps/debug/Rakefile +57 -0
  160. data/vendor/deps/debug/TODO.md +23 -0
  161. data/vendor/deps/debug/debug.gemspec +33 -0
  162. data/vendor/deps/debug/exe/rdbg +53 -0
  163. data/vendor/deps/debug/ext/debug/Makefile +273 -0
  164. data/vendor/deps/debug/ext/debug/debug.c +228 -0
  165. data/vendor/deps/debug/ext/debug/debug_version.h +1 -0
  166. data/vendor/deps/debug/ext/debug/extconf.rb +27 -0
  167. data/vendor/deps/debug/ext/debug/iseq_collector.c +93 -0
  168. data/vendor/deps/debug/lib/debug/abbrev_command.rb +77 -0
  169. data/vendor/deps/debug/lib/debug/breakpoint.rb +556 -0
  170. data/vendor/deps/debug/lib/debug/client.rb +263 -0
  171. data/vendor/deps/debug/lib/debug/color.rb +123 -0
  172. data/vendor/deps/debug/lib/debug/config.rb +592 -0
  173. data/vendor/deps/debug/lib/debug/console.rb +224 -0
  174. data/vendor/deps/debug/lib/debug/dap_custom/traceInspector.rb +336 -0
  175. data/vendor/deps/debug/lib/debug/debug.bundle +0 -0
  176. data/vendor/deps/debug/lib/debug/frame_info.rb +190 -0
  177. data/vendor/deps/debug/lib/debug/irb_integration.rb +37 -0
  178. data/vendor/deps/debug/lib/debug/local.rb +115 -0
  179. data/vendor/deps/debug/lib/debug/open.rb +13 -0
  180. data/vendor/deps/debug/lib/debug/open_nonstop.rb +15 -0
  181. data/vendor/deps/debug/lib/debug/prelude.rb +50 -0
  182. data/vendor/deps/debug/lib/debug/server.rb +534 -0
  183. data/vendor/deps/debug/lib/debug/server_cdp.rb +1348 -0
  184. data/vendor/deps/debug/lib/debug/server_dap.rb +1108 -0
  185. data/vendor/deps/debug/lib/debug/session.rb +2667 -0
  186. data/vendor/deps/debug/lib/debug/source_repository.rb +150 -0
  187. data/vendor/deps/debug/lib/debug/start.rb +5 -0
  188. data/vendor/deps/debug/lib/debug/thread_client.rb +1457 -0
  189. data/vendor/deps/debug/lib/debug/tracer.rb +241 -0
  190. data/vendor/deps/debug/lib/debug/version.rb +5 -0
  191. data/vendor/deps/debug/lib/debug.rb +9 -0
  192. data/vendor/deps/debug/misc/README.md.erb +660 -0
  193. data/vendor/deps/listen/.github/release-drafter.yml +17 -0
  194. data/vendor/deps/listen/.github/workflows/development.yml +67 -0
  195. data/vendor/deps/listen/.github/workflows/push.yml +12 -0
  196. data/vendor/deps/listen/.gitignore +28 -0
  197. data/vendor/deps/listen/.rspec +3 -0
  198. data/vendor/deps/listen/.rubocop.yml +283 -0
  199. data/vendor/deps/listen/.yardopts +11 -0
  200. data/vendor/deps/listen/CHANGELOG.md +1 -0
  201. data/vendor/deps/listen/CONTRIBUTING.md +45 -0
  202. data/vendor/deps/listen/Gemfile +33 -0
  203. data/vendor/deps/listen/Guardfile +26 -0
  204. data/vendor/deps/listen/LICENSE.txt +22 -0
  205. data/vendor/deps/listen/README.md +490 -0
  206. data/vendor/deps/listen/Rakefile +154 -0
  207. data/vendor/deps/listen/bin/listen +11 -0
  208. data/vendor/deps/listen/lib/listen/adapter/base.rb +129 -0
  209. data/vendor/deps/listen/lib/listen/adapter/bsd.rb +104 -0
  210. data/vendor/deps/listen/lib/listen/adapter/config.rb +31 -0
  211. data/vendor/deps/listen/lib/listen/adapter/darwin.rb +77 -0
  212. data/vendor/deps/listen/lib/listen/adapter/linux.rb +108 -0
  213. data/vendor/deps/listen/lib/listen/adapter/polling.rb +40 -0
  214. data/vendor/deps/listen/lib/listen/adapter/windows.rb +96 -0
  215. data/vendor/deps/listen/lib/listen/adapter.rb +43 -0
  216. data/vendor/deps/listen/lib/listen/backend.rb +40 -0
  217. data/vendor/deps/listen/lib/listen/change.rb +69 -0
  218. data/vendor/deps/listen/lib/listen/cli.rb +65 -0
  219. data/vendor/deps/listen/lib/listen/directory.rb +93 -0
  220. data/vendor/deps/listen/lib/listen/error.rb +11 -0
  221. data/vendor/deps/listen/lib/listen/event/config.rb +39 -0
  222. data/vendor/deps/listen/lib/listen/event/loop.rb +92 -0
  223. data/vendor/deps/listen/lib/listen/event/processor.rb +128 -0
  224. data/vendor/deps/listen/lib/listen/event/queue.rb +52 -0
  225. data/vendor/deps/listen/lib/listen/file.rb +95 -0
  226. data/vendor/deps/listen/lib/listen/fsm.rb +131 -0
  227. data/vendor/deps/listen/lib/listen/listener/config.rb +41 -0
  228. data/vendor/deps/listen/lib/listen/listener.rb +136 -0
  229. data/vendor/deps/listen/lib/listen/logger.rb +65 -0
  230. data/vendor/deps/listen/lib/listen/monotonic_time.rb +27 -0
  231. data/vendor/deps/listen/lib/listen/options.rb +24 -0
  232. data/vendor/deps/listen/lib/listen/queue_optimizer.rb +129 -0
  233. data/vendor/deps/listen/lib/listen/record/entry.rb +66 -0
  234. data/vendor/deps/listen/lib/listen/record/symlink_detector.rb +47 -0
  235. data/vendor/deps/listen/lib/listen/record.rb +122 -0
  236. data/vendor/deps/listen/lib/listen/silencer/controller.rb +50 -0
  237. data/vendor/deps/listen/lib/listen/silencer.rb +106 -0
  238. data/vendor/deps/listen/lib/listen/thread.rb +54 -0
  239. data/vendor/deps/listen/lib/listen/version.rb +5 -0
  240. data/vendor/deps/listen/lib/listen.rb +47 -0
  241. data/vendor/deps/listen/listen.gemspec +40 -0
  242. data/vendor/deps/listen/spec/acceptance/listen_spec.rb +320 -0
  243. data/vendor/deps/listen/spec/lib/listen/adapter/base_spec.rb +101 -0
  244. data/vendor/deps/listen/spec/lib/listen/adapter/bsd_spec.rb +13 -0
  245. data/vendor/deps/listen/spec/lib/listen/adapter/config_spec.rb +122 -0
  246. data/vendor/deps/listen/spec/lib/listen/adapter/darwin_spec.rb +82 -0
  247. data/vendor/deps/listen/spec/lib/listen/adapter/linux_spec.rb +199 -0
  248. data/vendor/deps/listen/spec/lib/listen/adapter/polling_spec.rb +83 -0
  249. data/vendor/deps/listen/spec/lib/listen/adapter/windows_spec.rb +13 -0
  250. data/vendor/deps/listen/spec/lib/listen/adapter_spec.rb +69 -0
  251. data/vendor/deps/listen/spec/lib/listen/backend_spec.rb +82 -0
  252. data/vendor/deps/listen/spec/lib/listen/change_spec.rb +102 -0
  253. data/vendor/deps/listen/spec/lib/listen/cli_spec.rb +116 -0
  254. data/vendor/deps/listen/spec/lib/listen/directory_spec.rb +284 -0
  255. data/vendor/deps/listen/spec/lib/listen/event/config_spec.rb +33 -0
  256. data/vendor/deps/listen/spec/lib/listen/event/loop_spec.rb +118 -0
  257. data/vendor/deps/listen/spec/lib/listen/event/processor_spec.rb +250 -0
  258. data/vendor/deps/listen/spec/lib/listen/event/queue_spec.rb +118 -0
  259. data/vendor/deps/listen/spec/lib/listen/file_spec.rb +254 -0
  260. data/vendor/deps/listen/spec/lib/listen/fsm_spec.rb +147 -0
  261. data/vendor/deps/listen/spec/lib/listen/listener/config_spec.rb +29 -0
  262. data/vendor/deps/listen/spec/lib/listen/listener_spec.rb +321 -0
  263. data/vendor/deps/listen/spec/lib/listen/logger_spec.rb +212 -0
  264. data/vendor/deps/listen/spec/lib/listen/monotonic_time_spec.rb +58 -0
  265. data/vendor/deps/listen/spec/lib/listen/queue_optimizer_spec.rb +111 -0
  266. data/vendor/deps/listen/spec/lib/listen/record_spec.rb +424 -0
  267. data/vendor/deps/listen/spec/lib/listen/silencer/controller_spec.rb +97 -0
  268. data/vendor/deps/listen/spec/lib/listen/silencer_spec.rb +109 -0
  269. data/vendor/deps/listen/spec/lib/listen/thread_spec.rb +133 -0
  270. data/vendor/deps/listen/spec/lib/listen_spec.rb +25 -0
  271. data/vendor/deps/listen/spec/spec_helper.rb +49 -0
  272. data/vendor/deps/listen/spec/support/acceptance_helper.rb +260 -0
  273. data/vendor/deps/listen/spec/support/fixtures_helper.rb +32 -0
  274. data/vendor/deps/listen/spec/support/platform_helper.rb +17 -0
  275. data/vendor/deps/observer/.github/dependabot.yml +6 -0
  276. data/vendor/deps/observer/.github/workflows/test.yml +33 -0
  277. data/vendor/deps/observer/.gitignore +8 -0
  278. data/vendor/deps/observer/BSDL +22 -0
  279. data/vendor/deps/observer/COPYING +56 -0
  280. data/vendor/deps/observer/Gemfile +9 -0
  281. data/vendor/deps/observer/README.md +139 -0
  282. data/vendor/deps/observer/Rakefile +10 -0
  283. data/vendor/deps/observer/bin/console +14 -0
  284. data/vendor/deps/observer/bin/setup +8 -0
  285. data/vendor/deps/observer/lib/observer.rb +229 -0
  286. data/vendor/deps/observer/observer.gemspec +32 -0
  287. data/vendor/deps/observer/test/test_observer.rb +66 -0
  288. data/vendor/deps/webrick/.gitignore +9 -0
  289. data/vendor/deps/webrick/Gemfile +3 -0
  290. data/vendor/deps/webrick/LICENSE.txt +22 -0
  291. data/vendor/deps/webrick/README.md +61 -0
  292. data/vendor/deps/webrick/Rakefile +10 -0
  293. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  294. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  295. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  296. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  297. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  298. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  299. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  300. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  301. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  302. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  303. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  304. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  305. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  306. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  307. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  308. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  309. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  310. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  311. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  312. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  313. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  314. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  315. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  316. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  317. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  318. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  319. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  320. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  321. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  322. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  323. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  324. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  325. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  326. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  327. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  328. data/vendor/deps/webrick/webrick.gemspec +74 -0
  329. metadata +412 -0
@@ -0,0 +1,294 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # httpserver.rb -- HTTPServer Class
4
+ #
5
+ # Author: IPR -- Internet Programming with Ruby -- writers
6
+ # Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
7
+ # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
8
+ # reserved.
9
+ #
10
+ # $IPR: httpserver.rb,v 1.63 2002/10/01 17:16:32 gotoyuzo Exp $
11
+
12
+ require 'io/wait'
13
+ require_relative 'server'
14
+ require_relative 'httputils'
15
+ require_relative 'httpstatus'
16
+ require_relative 'httprequest'
17
+ require_relative 'httpresponse'
18
+ require_relative 'httpservlet'
19
+ require_relative 'accesslog'
20
+
21
+ module WEBrick
22
+ class HTTPServerError < ServerError; end
23
+
24
+ ##
25
+ # An HTTP Server
26
+
27
+ class HTTPServer < ::WEBrick::GenericServer
28
+ ##
29
+ # Creates a new HTTP server according to +config+
30
+ #
31
+ # An HTTP server uses the following attributes:
32
+ #
33
+ # :AccessLog:: An array of access logs. See WEBrick::AccessLog
34
+ # :BindAddress:: Local address for the server to bind to
35
+ # :DocumentRoot:: Root path to serve files from
36
+ # :DocumentRootOptions:: Options for the default HTTPServlet::FileHandler
37
+ # :HTTPVersion:: The HTTP version of this server
38
+ # :Port:: Port to listen on
39
+ # :RequestCallback:: Called with a request and response before each
40
+ # request is serviced.
41
+ # :RequestTimeout:: Maximum time to wait between requests
42
+ # :ServerAlias:: Array of alternate names for this server for virtual
43
+ # hosting
44
+ # :ServerName:: Name for this server for virtual hosting
45
+
46
+ def initialize(config={}, default=Config::HTTP)
47
+ super(config, default)
48
+ @http_version = HTTPVersion::convert(@config[:HTTPVersion])
49
+
50
+ @mount_tab = MountTable.new
51
+ if @config[:DocumentRoot]
52
+ mount("/", HTTPServlet::FileHandler, @config[:DocumentRoot],
53
+ @config[:DocumentRootOptions])
54
+ end
55
+
56
+ unless @config[:AccessLog]
57
+ @config[:AccessLog] = [
58
+ [ $stderr, AccessLog::COMMON_LOG_FORMAT ],
59
+ [ $stderr, AccessLog::REFERER_LOG_FORMAT ]
60
+ ]
61
+ end
62
+
63
+ @virtual_hosts = Array.new
64
+ end
65
+
66
+ ##
67
+ # Processes requests on +sock+
68
+
69
+ def run(sock)
70
+ while true
71
+ req = create_request(@config)
72
+ res = create_response(@config)
73
+ server = self
74
+ begin
75
+ timeout = @config[:RequestTimeout]
76
+ while timeout > 0
77
+ break if sock.to_io.wait_readable(0.5)
78
+ break if @status != :Running
79
+ timeout -= 0.5
80
+ end
81
+ raise HTTPStatus::EOFError if timeout <= 0 || @status != :Running
82
+ raise HTTPStatus::EOFError if sock.eof?
83
+ req.parse(sock)
84
+ res.request_method = req.request_method
85
+ res.request_uri = req.request_uri
86
+ res.request_http_version = req.http_version
87
+ res.keep_alive = req.keep_alive?
88
+ server = lookup_server(req) || self
89
+ if callback = server[:RequestCallback]
90
+ callback.call(req, res)
91
+ elsif callback = server[:RequestHandler]
92
+ msg = ":RequestHandler is deprecated, please use :RequestCallback"
93
+ @logger.warn(msg)
94
+ callback.call(req, res)
95
+ end
96
+ server.service(req, res)
97
+ rescue HTTPStatus::EOFError, HTTPStatus::RequestTimeout => ex
98
+ res.set_error(ex)
99
+ rescue HTTPStatus::Error => ex
100
+ @logger.error(ex.message)
101
+ res.set_error(ex)
102
+ rescue HTTPStatus::Status => ex
103
+ res.status = ex.code
104
+ rescue StandardError => ex
105
+ @logger.error(ex)
106
+ res.set_error(ex, true)
107
+ ensure
108
+ if req.request_line
109
+ if req.keep_alive? && res.keep_alive?
110
+ req.fixup()
111
+ end
112
+ res.send_response(sock)
113
+ server.access_log(@config, req, res)
114
+ end
115
+ end
116
+ break if @http_version < "1.1"
117
+ break unless req.keep_alive?
118
+ break unless res.keep_alive?
119
+ end
120
+ end
121
+
122
+ ##
123
+ # Services +req+ and fills in +res+
124
+
125
+ def service(req, res)
126
+ if req.unparsed_uri == "*"
127
+ if req.request_method == "OPTIONS"
128
+ do_OPTIONS(req, res)
129
+ raise HTTPStatus::OK
130
+ end
131
+ raise HTTPStatus::NotFound, "`#{req.unparsed_uri}' not found."
132
+ end
133
+
134
+ servlet, options, script_name, path_info = search_servlet(req.path)
135
+ raise HTTPStatus::NotFound, "`#{req.path}' not found." unless servlet
136
+ req.script_name = script_name
137
+ req.path_info = path_info
138
+ si = servlet.get_instance(self, *options)
139
+ @logger.debug(format("%s is invoked.", si.class.name))
140
+ si.service(req, res)
141
+ end
142
+
143
+ ##
144
+ # The default OPTIONS request handler says GET, HEAD, POST and OPTIONS
145
+ # requests are allowed.
146
+
147
+ def do_OPTIONS(req, res)
148
+ res["allow"] = "GET,HEAD,POST,OPTIONS"
149
+ end
150
+
151
+ ##
152
+ # Mounts +servlet+ on +dir+ passing +options+ to the servlet at creation
153
+ # time
154
+
155
+ def mount(dir, servlet, *options)
156
+ @logger.debug(sprintf("%s is mounted on %s.", servlet.inspect, dir))
157
+ @mount_tab[dir] = [ servlet, options ]
158
+ end
159
+
160
+ ##
161
+ # Mounts +proc+ or +block+ on +dir+ and calls it with a
162
+ # WEBrick::HTTPRequest and WEBrick::HTTPResponse
163
+
164
+ def mount_proc(dir, proc=nil, &block)
165
+ proc ||= block
166
+ raise HTTPServerError, "must pass a proc or block" unless proc
167
+ mount(dir, HTTPServlet::ProcHandler.new(proc))
168
+ end
169
+
170
+ ##
171
+ # Unmounts +dir+
172
+
173
+ def unmount(dir)
174
+ @logger.debug(sprintf("unmount %s.", dir))
175
+ @mount_tab.delete(dir)
176
+ end
177
+ alias umount unmount
178
+
179
+ ##
180
+ # Finds a servlet for +path+
181
+
182
+ def search_servlet(path)
183
+ script_name, path_info = @mount_tab.scan(path)
184
+ servlet, options = @mount_tab[script_name]
185
+ if servlet
186
+ [ servlet, options, script_name, path_info ]
187
+ end
188
+ end
189
+
190
+ ##
191
+ # Adds +server+ as a virtual host.
192
+
193
+ def virtual_host(server)
194
+ @virtual_hosts << server
195
+ @virtual_hosts = @virtual_hosts.sort_by{|s|
196
+ num = 0
197
+ num -= 4 if s[:BindAddress]
198
+ num -= 2 if s[:Port]
199
+ num -= 1 if s[:ServerName]
200
+ num
201
+ }
202
+ end
203
+
204
+ ##
205
+ # Finds the appropriate virtual host to handle +req+
206
+
207
+ def lookup_server(req)
208
+ @virtual_hosts.find{|s|
209
+ (s[:BindAddress].nil? || req.addr[3] == s[:BindAddress]) &&
210
+ (s[:Port].nil? || req.port == s[:Port]) &&
211
+ ((s[:ServerName].nil? || req.host == s[:ServerName]) ||
212
+ (!s[:ServerAlias].nil? && s[:ServerAlias].find{|h| h === req.host}))
213
+ }
214
+ end
215
+
216
+ ##
217
+ # Logs +req+ and +res+ in the access logs. +config+ is used for the
218
+ # server name.
219
+
220
+ def access_log(config, req, res)
221
+ param = AccessLog::setup_params(config, req, res)
222
+ @config[:AccessLog].each{|logger, fmt|
223
+ logger << AccessLog::format(fmt+"\n", param)
224
+ }
225
+ end
226
+
227
+ ##
228
+ # Creates the HTTPRequest used when handling the HTTP
229
+ # request. Can be overridden by subclasses.
230
+ def create_request(with_webrick_config)
231
+ HTTPRequest.new(with_webrick_config)
232
+ end
233
+
234
+ ##
235
+ # Creates the HTTPResponse used when handling the HTTP
236
+ # request. Can be overridden by subclasses.
237
+ def create_response(with_webrick_config)
238
+ HTTPResponse.new(with_webrick_config)
239
+ end
240
+
241
+ ##
242
+ # Mount table for the path a servlet is mounted on in the directory space
243
+ # of the server. Users of WEBrick can only access this indirectly via
244
+ # WEBrick::HTTPServer#mount, WEBrick::HTTPServer#unmount and
245
+ # WEBrick::HTTPServer#search_servlet
246
+
247
+ class MountTable # :nodoc:
248
+ def initialize
249
+ @tab = Hash.new
250
+ compile
251
+ end
252
+
253
+ def [](dir)
254
+ dir = normalize(dir)
255
+ @tab[dir]
256
+ end
257
+
258
+ def []=(dir, val)
259
+ dir = normalize(dir)
260
+ @tab[dir] = val
261
+ compile
262
+ val
263
+ end
264
+
265
+ def delete(dir)
266
+ dir = normalize(dir)
267
+ res = @tab.delete(dir)
268
+ compile
269
+ res
270
+ end
271
+
272
+ def scan(path)
273
+ @scanner =~ path
274
+ [ $&, $' ]
275
+ end
276
+
277
+ private
278
+
279
+ def compile
280
+ k = @tab.keys
281
+ k.sort!
282
+ k.reverse!
283
+ k.collect!{|path| Regexp.escape(path) }
284
+ @scanner = Regexp.new("\\A(" + k.join("|") +")(?=/|\\z)")
285
+ end
286
+
287
+ def normalize(dir)
288
+ ret = dir ? dir.dup : +""
289
+ ret.sub!(%r|/+\z|, "")
290
+ ret
291
+ end
292
+ end
293
+ end
294
+ end
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # httpservlet.rb -- HTTPServlet Module
4
+ #
5
+ # Author: IPR -- Internet Programming with Ruby -- writers
6
+ # Copyright (c) 2000 TAKAHASHI Masayoshi, GOTOU Yuuzou
7
+ # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
8
+ # reserved.
9
+ #
10
+ # $IPR: abstract.rb,v 1.24 2003/07/11 11:16:46 gotoyuzo Exp $
11
+
12
+ require_relative '../htmlutils'
13
+ require_relative '../httputils'
14
+ require_relative '../httpstatus'
15
+
16
+ module WEBrick
17
+ module HTTPServlet
18
+ class HTTPServletError < StandardError; end
19
+
20
+ ##
21
+ # AbstractServlet allows HTTP server modules to be reused across multiple
22
+ # servers and allows encapsulation of functionality.
23
+ #
24
+ # By default a servlet will respond to GET, HEAD (through an alias to GET)
25
+ # and OPTIONS requests.
26
+ #
27
+ # By default a new servlet is initialized for every request. A servlet
28
+ # instance can be reused by overriding ::get_instance in the
29
+ # AbstractServlet subclass.
30
+ #
31
+ # == A Simple Servlet
32
+ #
33
+ # class Simple < WEBrick::HTTPServlet::AbstractServlet
34
+ # def do_GET request, response
35
+ # status, content_type, body = do_stuff_with request
36
+ #
37
+ # response.status = status
38
+ # response['Content-Type'] = content_type
39
+ # response.body = body
40
+ # end
41
+ #
42
+ # def do_stuff_with request
43
+ # return 200, 'text/plain', 'you got a page'
44
+ # end
45
+ # end
46
+ #
47
+ # This servlet can be mounted on a server at a given path:
48
+ #
49
+ # server.mount '/simple', Simple
50
+ #
51
+ # == Servlet Configuration
52
+ #
53
+ # Servlets can be configured via initialize. The first argument is the
54
+ # HTTP server the servlet is being initialized for.
55
+ #
56
+ # class Configurable < Simple
57
+ # def initialize server, color, size
58
+ # super server
59
+ # @color = color
60
+ # @size = size
61
+ # end
62
+ #
63
+ # def do_stuff_with request
64
+ # content = "<p " \
65
+ # %q{style="color: #{@color}; font-size: #{@size}"} \
66
+ # ">Hello, World!"
67
+ #
68
+ # return 200, "text/html", content
69
+ # end
70
+ # end
71
+ #
72
+ # This servlet must be provided two arguments at mount time:
73
+ #
74
+ # server.mount '/configurable', Configurable, 'red', '2em'
75
+
76
+ class AbstractServlet
77
+
78
+ ##
79
+ # Factory for servlet instances that will handle a request from +server+
80
+ # using +options+ from the mount point. By default a new servlet
81
+ # instance is created for every call.
82
+
83
+ def self.get_instance(server, *options)
84
+ self.new(server, *options)
85
+ end
86
+
87
+ ##
88
+ # Initializes a new servlet for +server+ using +options+ which are
89
+ # stored as-is in +@options+. +@logger+ is also provided.
90
+
91
+ def initialize(server, *options)
92
+ @server = @config = server
93
+ @logger = @server[:Logger]
94
+ @options = options
95
+ end
96
+
97
+ ##
98
+ # Dispatches to a +do_+ method based on +req+ if such a method is
99
+ # available. (+do_GET+ for a GET request). Raises a MethodNotAllowed
100
+ # exception if the method is not implemented.
101
+
102
+ def service(req, res)
103
+ method_name = "do_" + req.request_method.gsub(/-/, "_")
104
+ if respond_to?(method_name)
105
+ __send__(method_name, req, res)
106
+ else
107
+ raise HTTPStatus::MethodNotAllowed,
108
+ "unsupported method `#{req.request_method}'."
109
+ end
110
+ end
111
+
112
+ ##
113
+ # Raises a NotFound exception
114
+
115
+ def do_GET(req, res)
116
+ raise HTTPStatus::NotFound, "not found."
117
+ end
118
+
119
+ ##
120
+ # Dispatches to do_GET
121
+
122
+ def do_HEAD(req, res)
123
+ do_GET(req, res)
124
+ end
125
+
126
+ ##
127
+ # Returns the allowed HTTP request methods
128
+
129
+ def do_OPTIONS(req, res)
130
+ m = self.methods.grep(/\Ado_([A-Z]+)\z/) {$1}
131
+ m.sort!
132
+ res["allow"] = m.join(",")
133
+ end
134
+
135
+ private
136
+
137
+ ##
138
+ # Redirects to a path ending in /
139
+
140
+ def redirect_to_directory_uri(req, res)
141
+ if req.path[-1] != ?/
142
+ location = WEBrick::HTTPUtils.escape_path(req.path + "/")
143
+ if req.query_string && req.query_string.bytesize > 0
144
+ location << "?" << req.query_string
145
+ end
146
+ res.set_redirect(HTTPStatus::MovedPermanently, location)
147
+ end
148
+ end
149
+ end
150
+
151
+ end
152
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # cgi_runner.rb -- CGI launcher.
4
+ #
5
+ # Author: IPR -- Internet Programming with Ruby -- writers
6
+ # Copyright (c) 2000 TAKAHASHI Masayoshi, GOTOU YUUZOU
7
+ # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
8
+ # reserved.
9
+ #
10
+ # $IPR: cgi_runner.rb,v 1.9 2002/09/25 11:33:15 gotoyuzo Exp $
11
+
12
+ def sysread(io, size)
13
+ buf = +""
14
+ while size > 0
15
+ tmp = io.sysread(size)
16
+ buf << tmp
17
+ size -= tmp.bytesize
18
+ end
19
+ return buf
20
+ end
21
+
22
+ STDIN.binmode
23
+
24
+ len = sysread(STDIN, 8).to_i
25
+ out = sysread(STDIN, len)
26
+ STDOUT.reopen(File.open(out, "w"))
27
+
28
+ len = sysread(STDIN, 8).to_i
29
+ err = sysread(STDIN, len)
30
+ STDERR.reopen(File.open(err, "w"))
31
+
32
+ len = sysread(STDIN, 8).to_i
33
+ dump = sysread(STDIN, len)
34
+ hash = Marshal.restore(dump)
35
+ ENV.keys.each{|name| ENV.delete(name) }
36
+ hash.each{|k, v| ENV[k] = v if v }
37
+
38
+ dir = File::dirname(ENV["SCRIPT_FILENAME"])
39
+ Dir::chdir dir
40
+
41
+ if ARGV[0]
42
+ argv = ARGV.dup
43
+ argv << ENV["SCRIPT_FILENAME"]
44
+ exec(*argv)
45
+ # NOTREACHED
46
+ end
47
+ exec ENV["SCRIPT_FILENAME"]
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # cgihandler.rb -- CGIHandler Class
4
+ #
5
+ # Author: IPR -- Internet Programming with Ruby -- writers
6
+ # Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
7
+ # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
8
+ # reserved.
9
+ #
10
+ # $IPR: cgihandler.rb,v 1.27 2003/03/21 19:56:01 gotoyuzo Exp $
11
+
12
+ require 'rbconfig'
13
+ require 'tempfile'
14
+ require_relative '../config'
15
+ require_relative 'abstract'
16
+
17
+ module WEBrick
18
+ module HTTPServlet
19
+
20
+ ##
21
+ # Servlet for handling CGI scripts
22
+ #
23
+ # Example:
24
+ #
25
+ # server.mount('/cgi/my_script', WEBrick::HTTPServlet::CGIHandler,
26
+ # '/path/to/my_script')
27
+
28
+ class CGIHandler < AbstractServlet
29
+ Ruby = RbConfig.ruby # :nodoc:
30
+ CGIRunner = "\"#{Ruby}\" \"#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb\"" # :nodoc:
31
+ CGIRunnerArray = [Ruby, "#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb".freeze].freeze # :nodoc:
32
+
33
+ ##
34
+ # Creates a new CGI script servlet for the script at +name+
35
+
36
+ def initialize(server, name)
37
+ super(server, name)
38
+ @script_filename = name
39
+ @tempdir = server[:TempDir]
40
+ interpreter = server[:CGIInterpreter]
41
+ if interpreter.is_a?(Array)
42
+ @cgicmd = CGIRunnerArray + interpreter
43
+ else
44
+ @cgicmd = "#{CGIRunner} #{interpreter}"
45
+ end
46
+ end
47
+
48
+ # :stopdoc:
49
+
50
+ def do_GET(req, res)
51
+ cgi_in = IO::popen(@cgicmd, "wb")
52
+ cgi_out = Tempfile.new("webrick.cgiout.", @tempdir, mode: IO::BINARY)
53
+ cgi_out.set_encoding("ASCII-8BIT")
54
+ cgi_err = Tempfile.new("webrick.cgierr.", @tempdir, mode: IO::BINARY)
55
+ cgi_err.set_encoding("ASCII-8BIT")
56
+ begin
57
+ cgi_in.sync = true
58
+ meta = req.meta_vars
59
+ meta["SCRIPT_FILENAME"] = @script_filename
60
+ meta["PATH"] = @config[:CGIPathEnv]
61
+ meta.delete("HTTP_PROXY")
62
+ if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
63
+ meta["SystemRoot"] = ENV["SystemRoot"]
64
+ end
65
+ dump = Marshal.dump(meta)
66
+
67
+ cgi_in.write("%8d" % cgi_out.path.bytesize)
68
+ cgi_in.write(cgi_out.path)
69
+ cgi_in.write("%8d" % cgi_err.path.bytesize)
70
+ cgi_in.write(cgi_err.path)
71
+ cgi_in.write("%8d" % dump.bytesize)
72
+ cgi_in.write(dump)
73
+
74
+ req.body { |chunk| cgi_in.write(chunk) }
75
+ ensure
76
+ cgi_in.close
77
+ status = $?.exitstatus
78
+ sleep 0.1 if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
79
+ data = cgi_out.read
80
+ cgi_out.close(true)
81
+ if errmsg = cgi_err.read
82
+ if errmsg.bytesize > 0
83
+ @logger.error("CGIHandler: #{@script_filename}:\n" + errmsg)
84
+ end
85
+ end
86
+ cgi_err.close(true)
87
+ end
88
+
89
+ if status != 0
90
+ @logger.error("CGIHandler: #{@script_filename} exit with #{status}")
91
+ end
92
+
93
+ data = "" unless data
94
+ raw_header, body = data.split(/^[\xd\xa]+/, 2)
95
+ raise HTTPStatus::InternalServerError,
96
+ "Premature end of script headers: #{@script_filename}" if body.nil?
97
+
98
+ begin
99
+ header = HTTPUtils::parse_header(raw_header)
100
+ if /^(\d+)/ =~ header['status'][0]
101
+ res.status = $1.to_i
102
+ header.delete('status')
103
+ end
104
+ if header.has_key?('location')
105
+ # RFC 3875 6.2.3, 6.2.4
106
+ res.status = 302 unless (300...400) === res.status
107
+ end
108
+ if header.has_key?('set-cookie')
109
+ header['set-cookie'].each{|k|
110
+ res.cookies << Cookie.parse_set_cookie(k)
111
+ }
112
+ header.delete('set-cookie')
113
+ end
114
+ header.each{|key, val| res[key] = val.join(", ") }
115
+ rescue => ex
116
+ raise HTTPStatus::InternalServerError, ex.message
117
+ end
118
+ res.body = body
119
+ end
120
+ alias do_POST do_GET
121
+
122
+ # :startdoc:
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # erbhandler.rb -- ERBHandler Class
4
+ #
5
+ # Author: IPR -- Internet Programming with Ruby -- writers
6
+ # Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
7
+ # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
8
+ # reserved.
9
+ #
10
+ # $IPR: erbhandler.rb,v 1.25 2003/02/24 19:25:31 gotoyuzo Exp $
11
+
12
+ require_relative 'abstract'
13
+
14
+ require 'erb'
15
+
16
+ module WEBrick
17
+ module HTTPServlet
18
+
19
+ ##
20
+ # ERBHandler evaluates an ERB file and returns the result. This handler
21
+ # is automatically used if there are .rhtml files in a directory served by
22
+ # the FileHandler.
23
+ #
24
+ # ERBHandler supports GET and POST methods.
25
+ #
26
+ # The ERB file is evaluated with the local variables +servlet_request+ and
27
+ # +servlet_response+ which are a WEBrick::HTTPRequest and
28
+ # WEBrick::HTTPResponse respectively.
29
+ #
30
+ # Example .rhtml file:
31
+ #
32
+ # Request to <%= servlet_request.request_uri %>
33
+ #
34
+ # Query params <%= servlet_request.query.inspect %>
35
+
36
+ class ERBHandler < AbstractServlet
37
+
38
+ ##
39
+ # Creates a new ERBHandler on +server+ that will evaluate and serve the
40
+ # ERB file +name+
41
+
42
+ def initialize(server, name)
43
+ super(server, name)
44
+ @script_filename = name
45
+ end
46
+
47
+ ##
48
+ # Handles GET requests
49
+
50
+ def do_GET(req, res)
51
+ unless defined?(ERB)
52
+ @logger.warn "#{self.class}: ERB not defined."
53
+ raise HTTPStatus::Forbidden, "ERBHandler cannot work."
54
+ end
55
+ begin
56
+ data = File.open(@script_filename, &:read)
57
+ res.body = evaluate(ERB.new(data), req, res)
58
+ res['content-type'] ||=
59
+ HTTPUtils::mime_type(@script_filename, @config[:MimeTypes])
60
+ rescue StandardError
61
+ raise
62
+ rescue Exception => ex
63
+ @logger.error(ex)
64
+ raise HTTPStatus::InternalServerError, ex.message
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Handles POST requests
70
+
71
+ alias do_POST do_GET
72
+
73
+ private
74
+
75
+ ##
76
+ # Evaluates +erb+ providing +servlet_request+ and +servlet_response+ as
77
+ # local variables.
78
+
79
+ def evaluate(erb, servlet_request, servlet_response)
80
+ Module.new.module_eval{
81
+ servlet_request.meta_vars
82
+ servlet_request.query
83
+ erb.result(binding)
84
+ }
85
+ end
86
+ end
87
+ end
88
+ end