tdiary 3.2.2.20130507

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 (509) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +16 -0
  4. data/.travis.yml +29 -0
  5. data/Capfile +2 -0
  6. data/ChangeLog +3173 -0
  7. data/Gemfile +58 -0
  8. data/Gemfile.lock +201 -0
  9. data/LICENSE +340 -0
  10. data/Procfile +1 -0
  11. data/README.md +33 -0
  12. data/Rakefile +26 -0
  13. data/bin/tdiary +7 -0
  14. data/config.ru +61 -0
  15. data/data/.htaccess +2 -0
  16. data/doc/HOWTO-authenticate-in-rack.md +89 -0
  17. data/doc/HOWTO-make-io.md +305 -0
  18. data/doc/HOWTO-make-plugin.md +279 -0
  19. data/doc/HOWTO-make-theme.md +67 -0
  20. data/doc/HOWTO-testing-tDiary.md +44 -0
  21. data/doc/HOWTO-use-plugin.md +148 -0
  22. data/doc/HOWTO-write-tDiary.en.md +131 -0
  23. data/doc/HOWTO-write-tDiary.md +136 -0
  24. data/doc/INSTALL-paas.md +202 -0
  25. data/doc/INSTALL.md +160 -0
  26. data/doc/README.en.md +174 -0
  27. data/doc/README.md +56 -0
  28. data/doc/UPGRADE.md +164 -0
  29. data/doc/doc.css +115 -0
  30. data/dot.htaccess +27 -0
  31. data/index.fcgi +45 -0
  32. data/index.rb +57 -0
  33. data/js/00default.js +60 -0
  34. data/js/01conf.js +62 -0
  35. data/js/02edit.coffee +5 -0
  36. data/js/02edit.js +15 -0
  37. data/js/amazon.js +43 -0
  38. data/js/calendar3.js +130 -0
  39. data/js/caretposition.js +170 -0
  40. data/js/category.js +29 -0
  41. data/js/category_autocomplete.js +96 -0
  42. data/js/comment_ajax.js +27 -0
  43. data/js/draft.js +149 -0
  44. data/js/highlight.js +36 -0
  45. data/js/image.js +181 -0
  46. data/misc/convert2.rb +123 -0
  47. data/misc/filter/antispamservice.rb +101 -0
  48. data/misc/filter/limitdays.rb +40 -0
  49. data/misc/filter/linkcheck.rb +81 -0
  50. data/misc/filter/plugin/antispamservice.rb +82 -0
  51. data/misc/filter/plugin/en/antispamservice.rb +21 -0
  52. data/misc/filter/plugin/ja/antispamservice.rb +20 -0
  53. data/misc/lib/README +4 -0
  54. data/misc/lib/compatible.rb +1 -0
  55. data/misc/lib/fcgi_patch.rb +90 -0
  56. data/misc/migrate.rb +157 -0
  57. data/misc/paas/cloudfoundry/Gemfile +26 -0
  58. data/misc/paas/cloudfoundry/Gemfile.lock +85 -0
  59. data/misc/paas/heroku/Gemfile +22 -0
  60. data/misc/paas/heroku/Gemfile.lock +85 -0
  61. data/misc/paas/sqale/Gemfile +19 -0
  62. data/misc/paas/sqale/Gemfile.lock +85 -0
  63. data/misc/paas/sqale/Procfile +1 -0
  64. data/misc/paas/sqale/dot.env +1 -0
  65. data/misc/plugin/ChangeLog.DO_NOT_UPDATE +2333 -0
  66. data/misc/plugin/a.rb +211 -0
  67. data/misc/plugin/amazon.rb +403 -0
  68. data/misc/plugin/amazon/README.en +17 -0
  69. data/misc/plugin/amazon/README.ja +29 -0
  70. data/misc/plugin/amazon/amazonimg.rb +113 -0
  71. data/misc/plugin/amazon/large.png +0 -0
  72. data/misc/plugin/amazon/medium.png +0 -0
  73. data/misc/plugin/amazon/small.png +0 -0
  74. data/misc/plugin/append-css.rb +51 -0
  75. data/misc/plugin/bq.rb +48 -0
  76. data/misc/plugin/calendar2.rb +184 -0
  77. data/misc/plugin/calendar3.rb +256 -0
  78. data/misc/plugin/category.rb +779 -0
  79. data/misc/plugin/category_autocomplete.rb +33 -0
  80. data/misc/plugin/comment_ajax.rb +11 -0
  81. data/misc/plugin/comment_mail-qmail.rb +57 -0
  82. data/misc/plugin/comment_mail-sendmail.rb +56 -0
  83. data/misc/plugin/comment_mail-smtp.rb +59 -0
  84. data/misc/plugin/comment_rank.rb +36 -0
  85. data/misc/plugin/counter.rb +631 -0
  86. data/misc/plugin/daily_theme.rb +55 -0
  87. data/misc/plugin/disp_referrer.rb +1486 -0
  88. data/misc/plugin/doctype-html401tr.rb +16 -0
  89. data/misc/plugin/draft.rb +20 -0
  90. data/misc/plugin/dropdown_calendar.rb +32 -0
  91. data/misc/plugin/edit_today.rb +50 -0
  92. data/misc/plugin/en/a.rb +10 -0
  93. data/misc/plugin/en/amazon.rb +71 -0
  94. data/misc/plugin/en/append-css.rb +17 -0
  95. data/misc/plugin/en/bq.rb +12 -0
  96. data/misc/plugin/en/calendar2.rb +12 -0
  97. data/misc/plugin/en/category.rb +204 -0
  98. data/misc/plugin/en/counter.rb +48 -0
  99. data/misc/plugin/en/daily_theme.rb +14 -0
  100. data/misc/plugin/en/disp_referrer.rb +387 -0
  101. data/misc/plugin/en/dropdown_calendar.rb +14 -0
  102. data/misc/plugin/en/edit_today.rb +22 -0
  103. data/misc/plugin/en/hide-mail-field.rb +19 -0
  104. data/misc/plugin/en/highlight.rb +29 -0
  105. data/misc/plugin/en/image.rb +54 -0
  106. data/misc/plugin/en/kw.rb +22 -0
  107. data/misc/plugin/en/makerss.rb +47 -0
  108. data/misc/plugin/en/pb-show.rb +21 -0
  109. data/misc/plugin/en/ping.rb +16 -0
  110. data/misc/plugin/en/recent_comment.rb +44 -0
  111. data/misc/plugin/en/recent_comment3.rb +56 -0
  112. data/misc/plugin/en/recent_rss.rb +33 -0
  113. data/misc/plugin/en/referer_scheme.rb +48 -0
  114. data/misc/plugin/en/search_control.rb +74 -0
  115. data/misc/plugin/en/search_form.rb +22 -0
  116. data/misc/plugin/en/speed_comment.rb +19 -0
  117. data/misc/plugin/en/tb-show.rb +37 -0
  118. data/misc/plugin/en/todo.rb +43 -0
  119. data/misc/plugin/en/weather.rb +185 -0
  120. data/misc/plugin/en/xmlrpc.rb +14 -0
  121. data/misc/plugin/footnote.rb +92 -0
  122. data/misc/plugin/gradation.rb +39 -0
  123. data/misc/plugin/gradient.rb +36 -0
  124. data/misc/plugin/hide-mail-field.rb +50 -0
  125. data/misc/plugin/highlight.rb +22 -0
  126. data/misc/plugin/html_anchor.rb +34 -0
  127. data/misc/plugin/image.rb +290 -0
  128. data/misc/plugin/ja/amazon.rb +89 -0
  129. data/misc/plugin/ja/bq.rb +13 -0
  130. data/misc/plugin/ja/calendar2.rb +12 -0
  131. data/misc/plugin/ja/category.rb +212 -0
  132. data/misc/plugin/ja/daily_theme.rb +15 -0
  133. data/misc/plugin/ja/disp_referrer.rb +644 -0
  134. data/misc/plugin/ja/edit_today.rb +23 -0
  135. data/misc/plugin/ja/hide-mail-field.rb +20 -0
  136. data/misc/plugin/ja/highlight.rb +30 -0
  137. data/misc/plugin/ja/makerss.rb +44 -0
  138. data/misc/plugin/ja/my-sequel.rb +52 -0
  139. data/misc/plugin/ja/pb-show.rb +23 -0
  140. data/misc/plugin/ja/ping.rb +17 -0
  141. data/misc/plugin/ja/recent_comment.rb +45 -0
  142. data/misc/plugin/ja/recent_comment3.rb +57 -0
  143. data/misc/plugin/ja/recent_rss.rb +34 -0
  144. data/misc/plugin/ja/referer_scheme.rb +86 -0
  145. data/misc/plugin/ja/search_control.rb +75 -0
  146. data/misc/plugin/ja/search_form.rb +32 -0
  147. data/misc/plugin/ja/tb-show.rb +38 -0
  148. data/misc/plugin/ja/todo.rb +46 -0
  149. data/misc/plugin/ja/weather.rb +402 -0
  150. data/misc/plugin/ja/xmlrpc.rb +15 -0
  151. data/misc/plugin/kw.rb +150 -0
  152. data/misc/plugin/list.rb +40 -0
  153. data/misc/plugin/makelirs.rb +89 -0
  154. data/misc/plugin/makerss.rb +744 -0
  155. data/misc/plugin/my-ex.rb +68 -0
  156. data/misc/plugin/my-sequel.rb +539 -0
  157. data/misc/plugin/navi_user.rb +19 -0
  158. data/misc/plugin/number_anchor.rb +47 -0
  159. data/misc/plugin/pb-show.rb +165 -0
  160. data/misc/plugin/ping.rb +99 -0
  161. data/misc/plugin/pre_wrap.rb +19 -0
  162. data/misc/plugin/random_google.rb +165 -0
  163. data/misc/plugin/recent_comment.rb +82 -0
  164. data/misc/plugin/recent_comment3.rb +192 -0
  165. data/misc/plugin/recent_list.rb +91 -0
  166. data/misc/plugin/recent_namazu.rb +50 -0
  167. data/misc/plugin/recent_rss.rb +305 -0
  168. data/misc/plugin/referer-antibot.rb +53 -0
  169. data/misc/plugin/referer-utf8.rb +12 -0
  170. data/misc/plugin/referer_scheme.rb +87 -0
  171. data/misc/plugin/search_control.rb +227 -0
  172. data/misc/plugin/search_form.rb +53 -0
  173. data/misc/plugin/sn.rb +107 -0
  174. data/misc/plugin/speed_comment.rb +68 -0
  175. data/misc/plugin/squeeze.rb +272 -0
  176. data/misc/plugin/src.rb +30 -0
  177. data/misc/plugin/tb-show.rb +212 -0
  178. data/misc/plugin/title_list.rb +41 -0
  179. data/misc/plugin/title_tag.rb +80 -0
  180. data/misc/plugin/tlink.rb +163 -0
  181. data/misc/plugin/todo.rb +182 -0
  182. data/misc/plugin/weather.rb +505 -0
  183. data/misc/plugin/whatsnew.rb +100 -0
  184. data/misc/plugin/xmlrpc.rb +80 -0
  185. data/misc/plugin/xmlrpc/README +20 -0
  186. data/misc/plugin/xmlrpc/xmlrpc.rb +575 -0
  187. data/misc/style/emptdiary/README.rd +83 -0
  188. data/misc/style/emptdiary/README.rd.en +78 -0
  189. data/misc/style/emptdiary/emptdiary_style.rb +199 -0
  190. data/misc/style/etdiary/README.rd +83 -0
  191. data/misc/style/etdiary/etdiary_style.rb +446 -0
  192. data/misc/style/gfm/gfm_style.rb +194 -0
  193. data/misc/style/rd/README.rd +71 -0
  194. data/misc/style/rd/rd_style.rb +366 -0
  195. data/misc/style/wiki/README +116 -0
  196. data/misc/style/wiki/README.en +101 -0
  197. data/misc/style/wiki/wiki_parser.rb +273 -0
  198. data/misc/style/wiki/wiki_style.rb +478 -0
  199. data/misc/theme_convert/Readme.rd +21 -0
  200. data/misc/theme_convert/append.rcss +150 -0
  201. data/misc/theme_convert/theme_convert.rb +453 -0
  202. data/plugin/00default.rb +1015 -0
  203. data/plugin/05referer.rb +298 -0
  204. data/plugin/10spamfilter.rb +183 -0
  205. data/plugin/50sp.rb +146 -0
  206. data/plugin/60sf.rb +152 -0
  207. data/plugin/90migrate.rb +109 -0
  208. data/plugin/en/00default.rb +390 -0
  209. data/plugin/en/05referer.rb +49 -0
  210. data/plugin/en/10spamfilter.rb +81 -0
  211. data/plugin/en/50sp.rb +56 -0
  212. data/plugin/en/60sf.rb +60 -0
  213. data/plugin/ja/00default.rb +401 -0
  214. data/plugin/ja/05referer.rb +47 -0
  215. data/plugin/ja/10spamfilter.rb +79 -0
  216. data/plugin/ja/50sp.rb +66 -0
  217. data/plugin/ja/60sf.rb +73 -0
  218. data/public/.gitkeep +0 -0
  219. data/public/images/.gitkeep +0 -0
  220. data/public/javascripts/.gitkeep +0 -0
  221. data/public/stylesheets/.gitkeep +0 -0
  222. data/skel/category.rhtml +9 -0
  223. data/skel/conf.rhtml +23 -0
  224. data/skel/day.rhtml +33 -0
  225. data/skel/diary.rhtml +83 -0
  226. data/skel/footer.rhtml +8 -0
  227. data/skel/header.rhtml +10 -0
  228. data/skel/i.category.rhtml +6 -0
  229. data/skel/i.conf.rhtml +14 -0
  230. data/skel/i.day.rhtml +28 -0
  231. data/skel/i.diary.rhtml +17 -0
  232. data/skel/i.footer.rhtml +2 -0
  233. data/skel/i.header.rhtml +3 -0
  234. data/skel/i.latest.rhtml +24 -0
  235. data/skel/i.month.rhtml +39 -0
  236. data/skel/i.search.rhtml +5 -0
  237. data/skel/i.update.rhtml +40 -0
  238. data/skel/i.update.rhtml.en +40 -0
  239. data/skel/latest.rhtml +27 -0
  240. data/skel/mail.rtxt +18 -0
  241. data/skel/mail.rtxt.en +18 -0
  242. data/skel/month.rhtml +27 -0
  243. data/skel/plugin_error.rhtml +27 -0
  244. data/skel/preview.rhtml +85 -0
  245. data/skel/preview.rhtml.en +72 -0
  246. data/skel/referer.rhtml +24 -0
  247. data/skel/search.rhtml +14 -0
  248. data/skel/tdiary.rconf +76 -0
  249. data/skel/update.rhtml +103 -0
  250. data/skel/update.rhtml.en +83 -0
  251. data/spec/acceptance/append_comment_spec.rb +94 -0
  252. data/spec/acceptance/append_diary_spec.rb +98 -0
  253. data/spec/acceptance/bugfix/encoding_error_spec.rb +27 -0
  254. data/spec/acceptance/save_conf_comment_spec.rb +87 -0
  255. data/spec/acceptance/save_conf_default_spec.rb +169 -0
  256. data/spec/acceptance/save_conf_dnsbl_spec.rb +152 -0
  257. data/spec/acceptance/save_conf_filter_spec.rb +50 -0
  258. data/spec/acceptance/save_conf_plugin_spec.rb +69 -0
  259. data/spec/acceptance/save_conf_referer_spec.rb +60 -0
  260. data/spec/acceptance/save_conf_security_spec.rb +280 -0
  261. data/spec/acceptance/support/helpers.rb +49 -0
  262. data/spec/acceptance/support/paths.rb +7 -0
  263. data/spec/acceptance/update_diary_spec.rb +113 -0
  264. data/spec/acceptance/view_category_spec.rb +38 -0
  265. data/spec/acceptance/view_comment_spec.rb +67 -0
  266. data/spec/acceptance/view_diary_spec.rb +126 -0
  267. data/spec/acceptance/view_referer_spec.rb +31 -0
  268. data/spec/acceptance_helper.rb +101 -0
  269. data/spec/core/compatible_spec.rb +54 -0
  270. data/spec/core/core_ext_spec.rb +59 -0
  271. data/spec/core/plugin_spec.rb +389 -0
  272. data/spec/core/rack/assets/precompile_spec.rb +76 -0
  273. data/spec/core/rack/html_anchor_spec.rb +57 -0
  274. data/spec/core/rack/valid_request_path_spec.rb +67 -0
  275. data/spec/core/style/emptdiary_style_spec.rb +165 -0
  276. data/spec/core/style/etdiary_style_spec.rb +512 -0
  277. data/spec/core/style/gfm_style_spec.rb +334 -0
  278. data/spec/core/style/rd_style_spec.rb +202 -0
  279. data/spec/core/style/tdiary_style_spec.rb +240 -0
  280. data/spec/core/style/wiki_style_spec.rb +441 -0
  281. data/spec/fixtures/ascii8bit-pstore.db +0 -0
  282. data/spec/fixtures/invalid-sequence-volatile.tdr +9 -0
  283. data/spec/fixtures/just_installed.conf +1 -0
  284. data/spec/fixtures/plugin/ja/sample.rb +4 -0
  285. data/spec/fixtures/plugin/sample.rb +6 -0
  286. data/spec/fixtures/sample.rb +12 -0
  287. data/spec/fixtures/tdiary.conf.gem +212 -0
  288. data/spec/fixtures/tdiary.conf.rack +212 -0
  289. data/spec/fixtures/tdiary.conf.rdb +227 -0
  290. data/spec/fixtures/tdiary.conf.secure +204 -0
  291. data/spec/fixtures/tdiary.conf.webrick +212 -0
  292. data/spec/javascripts/00default_spec.js +35 -0
  293. data/spec/javascripts/fixtures/00default.html +1 -0
  294. data/spec/javascripts/support/jasmine.yml +76 -0
  295. data/spec/plugin/bq_spec.rb +24 -0
  296. data/spec/plugin/plugin_helper.rb +203 -0
  297. data/spec/spec_helper.rb +32 -0
  298. data/tdiary.conf.beginner +244 -0
  299. data/tdiary.conf.sample +345 -0
  300. data/tdiary.conf.sample-en +333 -0
  301. data/tdiary.gemspec +26 -0
  302. data/tdiary.rb +151 -0
  303. data/tdiary/admin.rb +236 -0
  304. data/tdiary/application.rb +57 -0
  305. data/tdiary/author_only_base.rb +171 -0
  306. data/tdiary/base.rb +220 -0
  307. data/tdiary/cli.rb +116 -0
  308. data/tdiary/comment.rb +40 -0
  309. data/tdiary/comment_manager.rb +94 -0
  310. data/tdiary/compatible.rb +72 -0
  311. data/tdiary/config.rb +270 -0
  312. data/tdiary/core_ext.rb +122 -0
  313. data/tdiary/deploy.rb +50 -0
  314. data/tdiary/dispatcher.rb +77 -0
  315. data/tdiary/dispatcher/index_main.rb +122 -0
  316. data/tdiary/dispatcher/update_main.rb +101 -0
  317. data/tdiary/environment.rb +15 -0
  318. data/tdiary/filter.rb +48 -0
  319. data/tdiary/filter/default.rb +54 -0
  320. data/tdiary/filter/spam.rb +304 -0
  321. data/tdiary/io/base.rb +70 -0
  322. data/tdiary/io/cache/file.rb +123 -0
  323. data/tdiary/io/cache/memcached.rb +88 -0
  324. data/tdiary/io/cache/redis.rb +100 -0
  325. data/tdiary/io/default.rb +297 -0
  326. data/tdiary/io/pstore.rb +252 -0
  327. data/tdiary/io/rdb.rb +213 -0
  328. data/tdiary/lang/en.rb +79 -0
  329. data/tdiary/lang/ja.rb +72 -0
  330. data/tdiary/plugin.rb +375 -0
  331. data/tdiary/rack/assets/precompile.rb +37 -0
  332. data/tdiary/rack/auth/basic.rb +38 -0
  333. data/tdiary/rack/auth/omniauth.rb +51 -0
  334. data/tdiary/rack/html_anchor.rb +31 -0
  335. data/tdiary/rack/valid_request_path.rb +36 -0
  336. data/tdiary/referer_manager.rb +80 -0
  337. data/tdiary/request.rb +217 -0
  338. data/tdiary/response.rb +29 -0
  339. data/tdiary/server.rb +85 -0
  340. data/tdiary/style.rb +194 -0
  341. data/tdiary/style/tdiary_style.rb +198 -0
  342. data/tdiary/style/wiki_style.rb +213 -0
  343. data/tdiary/tasks.rb +1 -0
  344. data/tdiary/tasks/assets.rake +31 -0
  345. data/tdiary/tasks/auth.rake +28 -0
  346. data/tdiary/tasks/db.rake +110 -0
  347. data/tdiary/tasks/doc.rake +31 -0
  348. data/tdiary/tasks/heroku.rake +37 -0
  349. data/tdiary/tasks/jasmine.rake +16 -0
  350. data/tdiary/tasks/rdoc.rake +24 -0
  351. data/tdiary/tasks/release.rake +122 -0
  352. data/tdiary/tasks/rspec.rake +51 -0
  353. data/tdiary/tasks/server.rake +33 -0
  354. data/tdiary/tasks/test.rake +17 -0
  355. data/tdiary/version.rb +3 -0
  356. data/tdiary/view.rb +468 -0
  357. data/tdiary/view_helper.rb +15 -0
  358. data/test/disp_referrer_test.rb +93 -0
  359. data/test/my-sequel_test.rb +238 -0
  360. data/test/test_helper.rb +7 -0
  361. data/test/test_plugin_helper.rb +64 -0
  362. data/test/test_plugin_helper_test.rb +28 -0
  363. data/test/weather_test.rb +33 -0
  364. data/theme/base.css +268 -0
  365. data/theme/conf.block.png +0 -0
  366. data/theme/conf.css +254 -0
  367. data/theme/default/README +11 -0
  368. data/theme/default/body.png +0 -0
  369. data/theme/default/default.css +743 -0
  370. data/theme/help.png +0 -0
  371. data/theme/loading.gif +0 -0
  372. data/theme/tdiary1/README +7 -0
  373. data/theme/tdiary1/tdiary1.css +394 -0
  374. data/theme/tdiary2/README +19 -0
  375. data/theme/tdiary2/tdiary2.css +624 -0
  376. data/update.fcgi +45 -0
  377. data/update.rb +57 -0
  378. data/vendor/hikidoc-0.0.6/COPYING +28 -0
  379. data/vendor/hikidoc-0.0.6/NEWS +30 -0
  380. data/vendor/hikidoc-0.0.6/NEWS.ja +30 -0
  381. data/vendor/hikidoc-0.0.6/README +86 -0
  382. data/vendor/hikidoc-0.0.6/README.ja +83 -0
  383. data/vendor/hikidoc-0.0.6/Rakefile +68 -0
  384. data/vendor/hikidoc-0.0.6/TextFormattingRules +320 -0
  385. data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +318 -0
  386. data/vendor/hikidoc-0.0.6/bin/hikidoc +66 -0
  387. data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +914 -0
  388. data/vendor/hikidoc-0.0.6/setup.rb +1360 -0
  389. data/vendor/hikidoc-0.0.6/test/run-test.rb +13 -0
  390. data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +506 -0
  391. data/vendor/imagesize-0.1.1/Manifest.txt +19 -0
  392. data/vendor/imagesize-0.1.1/README.txt +49 -0
  393. data/vendor/imagesize-0.1.1/lib/image_size.rb +305 -0
  394. data/vendor/imagesize-0.1.1/lib/image_size/version.rb +9 -0
  395. data/vendor/imagesize-0.1.1/setup.rb +1585 -0
  396. data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
  397. data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
  398. data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
  399. data/vendor/imagesize-0.1.1/test/cursor.xbm +6 -0
  400. data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
  401. data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
  402. data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
  403. data/vendor/imagesize-0.1.1/test/pgm.pgm +5 -0
  404. data/vendor/imagesize-0.1.1/test/test.xpm +38 -0
  405. data/vendor/imagesize-0.1.1/test/test_helper.rb +2 -0
  406. data/vendor/imagesize-0.1.1/test/test_image_size.rb +71 -0
  407. data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
  408. data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
  409. data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
  410. data/vendor/jasmine-jquery-1.4.2/jasmine-jquery.js +548 -0
  411. data/vendor/jquery-1.8/jquery.js +9227 -0
  412. data/vendor/rdtool-0.6.38/COPYING.txt +339 -0
  413. data/vendor/rdtool-0.6.38/Gemfile +3 -0
  414. data/vendor/rdtool-0.6.38/HISTORY +318 -0
  415. data/vendor/rdtool-0.6.38/LGPL-2.1 +502 -0
  416. data/vendor/rdtool-0.6.38/LICENSE.txt +58 -0
  417. data/vendor/rdtool-0.6.38/README.html +66 -0
  418. data/vendor/rdtool-0.6.38/README.ja.html +73 -0
  419. data/vendor/rdtool-0.6.38/README.rd +76 -0
  420. data/vendor/rdtool-0.6.38/README.rd.ja +85 -0
  421. data/vendor/rdtool-0.6.38/Rakefile +152 -0
  422. data/vendor/rdtool-0.6.38/TODO +22 -0
  423. data/vendor/rdtool-0.6.38/bin/rd2 +283 -0
  424. data/vendor/rdtool-0.6.38/bin/rdswap.rb +207 -0
  425. data/vendor/rdtool-0.6.38/doc/rd-draft.html +456 -0
  426. data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +466 -0
  427. data/vendor/rdtool-0.6.38/doc/rd-draft.rd +479 -0
  428. data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +487 -0
  429. data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +114 -0
  430. data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +65 -0
  431. data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +55 -0
  432. data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +46 -0
  433. data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +18 -0
  434. data/vendor/rdtool-0.6.38/lib/rd/element.rb +160 -0
  435. data/vendor/rdtool-0.6.38/lib/rd/filter.rb +255 -0
  436. data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +14 -0
  437. data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +233 -0
  438. data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +14 -0
  439. data/vendor/rdtool-0.6.38/lib/rd/list.rb +57 -0
  440. data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +11 -0
  441. data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +57 -0
  442. data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +30 -0
  443. data/vendor/rdtool-0.6.38/lib/rd/package.rb +4 -0
  444. data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +14 -0
  445. data/vendor/rdtool-0.6.38/lib/rd/post-install +1 -0
  446. data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +18 -0
  447. data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +69 -0
  448. data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +37 -0
  449. data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +86 -0
  450. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +266 -0
  451. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +34 -0
  452. data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +490 -0
  453. data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +67 -0
  454. data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +251 -0
  455. data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +19 -0
  456. data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +32 -0
  457. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +518 -0
  458. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +1061 -0
  459. data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +15 -0
  460. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +503 -0
  461. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +1243 -0
  462. data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +214 -0
  463. data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +114 -0
  464. data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +14 -0
  465. data/vendor/rdtool-0.6.38/lib/rd/tree.rb +103 -0
  466. data/vendor/rdtool-0.6.38/lib/rd/version.rb +41 -0
  467. data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +86 -0
  468. data/vendor/rdtool-0.6.38/rdtool.gemspec +125 -0
  469. data/vendor/rdtool-0.6.38/setup.rb +1596 -0
  470. data/vendor/rdtool-0.6.38/test/data/includee1.html +1 -0
  471. data/vendor/rdtool-0.6.38/test/data/includee2.html +1 -0
  472. data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +1 -0
  473. data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
  474. data/vendor/rdtool-0.6.38/test/data/label.rbl +2 -0
  475. data/vendor/rdtool-0.6.38/test/data/label2.rbl +2 -0
  476. data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +1 -0
  477. data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
  478. data/vendor/rdtool-0.6.38/test/dummy-observer.rb +6 -0
  479. data/vendor/rdtool-0.6.38/test/dummy.rb +33 -0
  480. data/vendor/rdtool-0.6.38/test/temp-dir.rb +19 -0
  481. data/vendor/rdtool-0.6.38/test/test-block-parser.rb +46 -0
  482. data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +219 -0
  483. data/vendor/rdtool-0.6.38/test/test-document-element.rb +46 -0
  484. data/vendor/rdtool-0.6.38/test/test-document-struct.rb +66 -0
  485. data/vendor/rdtool-0.6.38/test/test-element.rb +46 -0
  486. data/vendor/rdtool-0.6.38/test/test-headline.rb +80 -0
  487. data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +46 -0
  488. data/vendor/rdtool-0.6.38/test/test-list-item.rb +54 -0
  489. data/vendor/rdtool-0.6.38/test/test-list.rb +53 -0
  490. data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +73 -0
  491. data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +170 -0
  492. data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +33 -0
  493. data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +48 -0
  494. data/vendor/rdtool-0.6.38/test/test-parser-util.rb +41 -0
  495. data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +156 -0
  496. data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +43 -0
  497. data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +496 -0
  498. data/vendor/rdtool-0.6.38/test/test-rdtree.rb +17 -0
  499. data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +29 -0
  500. data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +202 -0
  501. data/vendor/rdtool-0.6.38/test/test-reference.rb +132 -0
  502. data/vendor/rdtool-0.6.38/test/test-search-file.rb +22 -0
  503. data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +41 -0
  504. data/vendor/rdtool-0.6.38/test/test-textblock.rb +44 -0
  505. data/vendor/rdtool-0.6.38/test/test-tree.rb +82 -0
  506. data/vendor/rdtool-0.6.38/test/test-version.rb +57 -0
  507. data/vendor/rdtool-0.6.38/test/test-visitor.rb +230 -0
  508. data/vendor/rdtool-0.6.38/utils/rd-mode.el +464 -0
  509. metadata +666 -0
@@ -0,0 +1,171 @@
1
+ module TDiary
2
+ #
3
+ # class TDiaryAuthorOnlyBase
4
+ # base class for author-only access pages
5
+ #
6
+ class TDiaryAuthorOnlyBase < TDiaryBase
7
+ def csrf_protection_get_is_okay; false; end
8
+
9
+ def initialize( cgi, rhtml, conf )
10
+ super
11
+ csrf_check( cgi, conf )
12
+ end
13
+
14
+ private
15
+
16
+ def csrf_check( cgi, conf )
17
+ # CSRF condition check
18
+ protection_method = conf.options['csrf_protection_method']
19
+ masterkey = conf.options['csrf_protection_key']
20
+ updaterb_regexp = conf.options['csrf_protection_allowed_referer_regexp_for_update']
21
+
22
+ protection_method = 1 unless protection_method
23
+
24
+ return if protection_method == -1 # don't use this setting!
25
+
26
+ check_key = (protection_method & 2 != 0)
27
+ check_referer = (protection_method & 1 != 0)
28
+
29
+ masterkey = '' unless masterkey
30
+
31
+ updaterb_regexp = '' unless updaterb_regexp
32
+
33
+ if (masterkey != '' && check_key)
34
+ @csrf_protection = %Q[<input type="hidden" name="csrf_protection_key" value="#{h masterkey}">]
35
+ else
36
+ @csrf_protection="<!-- no CSRF protection key used -->"
37
+ end
38
+
39
+ referer = cgi.referer || ''
40
+ referer = referer.sub(/\?.*$/, '')
41
+ base_uri = URI.parse(base_url)
42
+ config_uri = URI.parse(base_url) + conf.update
43
+
44
+ referer_is_empty = referer == ''
45
+ referer_uri = URI.parse(referer) if !referer_is_empty
46
+ referer_is_config = !referer_is_empty && config_uri == referer_uri
47
+ referer_is_config ||= Regexp.new(updaterb_regexp) =~ referer if !referer_is_empty && updaterb_regexp != ''
48
+ is_post = cgi.request_method == 'POST'
49
+
50
+ given_key = nil
51
+ if cgi.valid?('csrf_protection_key')
52
+ given_key = cgi.params['csrf_protection_key'][0]
53
+ case given_key
54
+ when String
55
+ else
56
+ given_key = given_key.read
57
+ end
58
+ end
59
+
60
+ is_key_ok = masterkey != '' && given_key == masterkey
61
+
62
+ keycheck_ok = !check_key || is_key_ok
63
+ referercheck_ok = referer_is_config || (!check_referer && referer_is_empty)
64
+
65
+ if csrf_protection_get_is_okay then
66
+ return if is_post || given_key == nil
67
+ else
68
+ return if keycheck_ok && referercheck_ok
69
+ end
70
+
71
+ raise Exception.new(<<"EOS")
72
+ Security Error: Possible Cross-site Request Forgery (CSRF)
73
+
74
+ Diagnostics:
75
+ - Protection Method is #{ protection_method }
76
+ - Mode is #{ self.mode || 'unknown' }
77
+ - GET is #{ csrf_protection_get_is_okay ? '' : 'not '}allowed
78
+ - Request Method is #{ is_post ? 'POST' : 'not POST' }
79
+ - Referer is #{ referer_is_empty ? 'empty' : referer_is_config ? 'config' : 'another page' }
80
+ - Given referer: #{h referer_uri.to_s}
81
+ - Expected base URI: #{h base_uri.to_s}
82
+ - Expected update URI: #{h config_uri.to_s}
83
+ - CSRF key is #{ is_key_ok ? 'OK' : given_key ? 'NG (' + (given_key || '') + ')' : 'nothing' }
84
+ EOS
85
+ end
86
+
87
+ def load_plugins
88
+ super
89
+ @plugin.instance_eval("def csrf_protection\n#{(@csrf_protection.untaint || '').dump}\nend;")
90
+ end
91
+ end
92
+
93
+ #
94
+ # class TDiaryFormPlugin
95
+ # show edit diary form after calling form plugin.
96
+ #
97
+ class TDiaryFormPlugin < TDiaryAuthorOnlyBase
98
+ def initialize( cgi, rhtm, conf )
99
+ super
100
+
101
+ if @cgi.valid?( 'date' ) then
102
+ if @cgi.params['date'][0].kind_of?( String ) then
103
+ date = @cgi.params['date'][0]
104
+ else
105
+ date = @cgi.params['date'][0].read
106
+ end
107
+ @date = Time::local( *date.scan( /(\d{4})(\d\d)(\d\d)/ )[0] )
108
+ else
109
+ @date = Time::now + (@conf.hour_offset * 3600).to_i
110
+ @diary = @io.diary_factory( @date, '', '', @conf.style )
111
+ end
112
+
113
+ @io.transaction( @date ) do |diaries|
114
+ @diaries = diaries
115
+ @diary = self[@date]
116
+ if @diary then
117
+ @conf.style = @diary.style
118
+ else
119
+ @diary = @io.diary_factory( @date, '', '', @conf.style )
120
+ end
121
+ DIRTY_NONE
122
+ end
123
+ end
124
+ end
125
+
126
+ #
127
+ # class TDiaryConf
128
+ # show configuration form
129
+ #
130
+ class TDiaryConf < TDiaryAuthorOnlyBase
131
+ def csrf_protection_get_is_okay; true; end
132
+
133
+ def initialize( cgi, rhtml, conf )
134
+ super
135
+ @key = @cgi.params['conf'][0] || ''
136
+ end
137
+ end
138
+
139
+ #
140
+ # class TDiarySaveConf
141
+ # save configuration
142
+ #
143
+ class TDiarySaveConf < TDiaryConf
144
+ def csrf_protection_get_is_okay; false; end
145
+
146
+ def initialize( cgi, rhtml, conf )
147
+ super
148
+ end
149
+
150
+ def eval_rhtml( prefix = '' )
151
+ r = super
152
+
153
+ begin
154
+ @conf.save
155
+ @io.clear_cache
156
+ rescue
157
+ @error = [$!.dup, $@.dup]
158
+ end
159
+
160
+ r
161
+ end
162
+ end
163
+ end
164
+
165
+ # Local Variables:
166
+ # mode: ruby
167
+ # indent-tabs-mode: t
168
+ # tab-width: 3
169
+ # ruby-indent-level: 3
170
+ # End:
171
+ # vim: ts=3
data/tdiary/base.rb ADDED
@@ -0,0 +1,220 @@
1
+ # -*- coding: utf-8 -*-
2
+ module TDiary
3
+ #
4
+ # class TDiaryBase
5
+ # tDiary CGI
6
+ #
7
+ class TDiaryBase
8
+ include ERB::Util
9
+ include ViewHelper
10
+
11
+ DIRTY_NONE = 0
12
+ DIRTY_DIARY = 1
13
+ DIRTY_COMMENT = 2
14
+ DIRTY_REFERER = 4
15
+
16
+ attr_reader :cookies, :date, :diaries
17
+ attr_reader :cgi, :rhtml, :conf
18
+ attr_reader :ignore_parser_cache
19
+
20
+ def initialize( cgi, rhtml, conf )
21
+ @cgi, @rhtml, @conf = cgi, rhtml, conf
22
+ @diaries = {}
23
+ @cookies = []
24
+ @io = @conf.io_class.new( self )
25
+ @ignore_parser_cache = false
26
+ end
27
+
28
+ def eval_rhtml( prefix = '' )
29
+ begin
30
+ r = do_eval_rhtml( prefix )
31
+ rescue PluginError, SyntaxError, ArgumentError, Exception => e
32
+ if e.class == ForceRedirect
33
+ raise
34
+ else
35
+ body = File.read("#{PATH}/skel/plugin_error.rhtml").untaint
36
+ r = ERB.new(body).result(binding)
37
+ end
38
+ end
39
+ r
40
+ end
41
+
42
+ def last_modified
43
+ nil
44
+ end
45
+
46
+ def []( date )
47
+ @diaries[date.strftime( '%Y%m%d' )]
48
+ end
49
+
50
+ def calendar
51
+ @years = @io.calendar unless @years
52
+ end
53
+
54
+ protected
55
+
56
+ def do_eval_rhtml( prefix )
57
+ load_plugins
58
+
59
+ r = @io.restore_cache( prefix )
60
+
61
+ if r.nil?
62
+ r = @rhtml ? erb_src(prefix) : ""
63
+ @io.store_cache( r, prefix ) unless @diaries.empty?
64
+ end
65
+
66
+ r = @plugin.eval_src( r.untaint, @conf.secure ) if @plugin
67
+
68
+ @cookies += @plugin.cookies
69
+
70
+ r
71
+ end
72
+
73
+ def mode
74
+ self.class.to_s.sub( /^TDiary::TDiary/, '' ).downcase
75
+ end
76
+
77
+ def load_plugins
78
+ calendar
79
+ #
80
+ # caching plugin
81
+ # NOTE: currently, plugin cache doesn't work with blog-category plugin
82
+ # see also https://github.com/tdiary/tdiary-core/issues/203
83
+ #
84
+ if @plugin and not @plugin.respond_to?( 'blog_category' )
85
+ @plugin.diaries = @diaries
86
+ @plugin.date = @date
87
+ @plugin.last_modified = last_modified
88
+ @plugin.comment = @comment
89
+ @plugin
90
+ else
91
+ @plugin = Plugin::new(
92
+ 'conf' => @conf,
93
+ 'mode' => mode,
94
+ 'diaries' => @diaries,
95
+ 'cgi' => @cgi,
96
+ 'years' => @years,
97
+ 'cache_path' => @io.cache_path,
98
+ 'date' => @date,
99
+ 'comment' => @comment,
100
+ 'last_modified' => last_modified,
101
+ 'logger' => TDiary.logger
102
+ )
103
+ end
104
+ end
105
+
106
+ def <<( diary )
107
+ @diaries[diary.date.strftime( '%Y%m%d' )] = diary
108
+ end
109
+
110
+ def delete( date )
111
+ @diaries.delete( date.strftime( '%Y%m%d' ) )
112
+ end
113
+
114
+ private
115
+
116
+ def erb_src(prefix)
117
+ rhtml = ["header.rhtml", @rhtml, "footer.rhtml"].map do |file|
118
+ path = "#{PATH}/skel/#{prefix}#{file}"
119
+ begin
120
+ File.read("#{path}.#{@conf.lang}")
121
+ rescue
122
+ File.read(path)
123
+ end
124
+ end.join
125
+
126
+ begin
127
+ r = ERB.new(rhtml.untaint).result(binding)
128
+ rescue => e
129
+ # migration error on ruby 1.9 only 1st time, reload.
130
+ if defined?(::Encoding) && e.class == ::Encoding::CompatibilityError
131
+ raise ForceRedirect.new(base_url)
132
+ end
133
+ end
134
+ ERB.new(r).src
135
+ end
136
+ end
137
+
138
+ #
139
+ # class TDiaryCategoryView
140
+ # base of category view mode classes
141
+ #
142
+ class TDiaryCategoryView < TDiaryBase
143
+ attr_reader :last_modified
144
+
145
+ def initialize(cgi, rhtml, conf)
146
+ super
147
+ @last_modified = Time.now
148
+ end
149
+ end
150
+
151
+ #
152
+ # class TDiarySearch
153
+ # base of search view mode classes
154
+ #
155
+ class TDiarySearch < TDiaryBase
156
+ attr_reader :last_modified
157
+
158
+ def initialize(cgi, rhtml, conf)
159
+ super
160
+ @last_modified = Time.now
161
+ end
162
+ end
163
+
164
+ # class TDiaryPluginView
165
+ # base of plugin view mode classes
166
+ #
167
+ class TDiaryPluginView < TDiaryBase
168
+ attr_reader :last_modified
169
+
170
+ def initialize(cgi, rhtml, conf)
171
+ super
172
+
173
+ tdiary = tdiary_class(cgi.params['date'][0] || '').new(cgi, '', conf)
174
+ @date = tdiary.date
175
+ @diaries = tdiary.diaries
176
+ @last_modified = Time.now
177
+ end
178
+
179
+ def eval_rhtml( prefix = '' )
180
+ load_plugins
181
+ # TODO: prefixでモバイルモードかどうかを判定
182
+ # TODO: rhtml rendering
183
+ @rhtml = "#{plugin_name}.rhtml"
184
+ @plugin.__send__(:content_proc, plugin_name, @date.strftime('%Y%m%d'))
185
+ end
186
+
187
+ protected
188
+
189
+ def plugin_name
190
+ # plugin name MUST contain only words ([a-zA-Z0-9_])
191
+ @plugin_name ||= (@cgi.params['plugin'][0] || '').match(/^(\w+)$/).to_a[1]
192
+ raise TDiary::PermissionError.new('invalid plugin name') unless @plugin_name
193
+ @plugin_name
194
+ end
195
+
196
+ def tdiary_class(date)
197
+ # YYYYMMDD-N, YYYYMMDD, YYYYMM, MMDD, or nil
198
+ case date
199
+ when /^\d{8}-\d+$/
200
+ TDiaryLatest
201
+ when /^\d{8}$/
202
+ TDiaryDay
203
+ when /^\d{6}$/
204
+ TDiaryMonth
205
+ when /^\d{4}$/
206
+ TDiaryNYear
207
+ else
208
+ TDiaryLatest
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ # Local Variables:
215
+ # mode: ruby
216
+ # indent-tabs-mode: t
217
+ # tab-width: 3
218
+ # ruby-indent-level: 3
219
+ # End:
220
+ # vim: ts=3
data/tdiary/cli.rb ADDED
@@ -0,0 +1,116 @@
1
+ # coding: utf-8
2
+ require 'thor'
3
+ require 'tdiary'
4
+ require 'bundler'
5
+
6
+ module TDiary
7
+ class CLI < Thor
8
+ include Thor::Actions
9
+
10
+ def self.source_root
11
+ TDiary.root
12
+ end
13
+
14
+ desc "new DIR_NAME", "Create a new tDiary directory"
15
+ def new(name)
16
+ target = File.join(Dir.pwd, name)
17
+ deploy(target)
18
+
19
+ Bundler.with_clean_env do
20
+ inside(target) do
21
+ run('bundle install --without test development')
22
+ run('bundle exec tdiary htpasswd')
23
+ end
24
+ end
25
+ say 'install finished', :green
26
+ say "run `tdiary server` in #{name} directory to start server", :green
27
+ end
28
+
29
+ desc "test", "Create test server and run tDiary test"
30
+ def test
31
+ target = File.join(Dir.pwd, 'tmp/test')
32
+ deploy(target)
33
+ append_to_file(File.join(target, 'Gemfile'), "path '#{TDiary.root}'")
34
+ directory('spec', File.join(target, 'spec'))
35
+ directory('test', File.join(target, 'test'))
36
+
37
+ Bundler.with_clean_env do
38
+ inside(target) do
39
+ run('bundle install')
40
+ run('bundle exec rake spec')
41
+ end
42
+ end
43
+ end
44
+
45
+ desc "server", "Start tDiary server"
46
+ method_option "rack", :type => :string, :banner =>
47
+ "start server with rack interface (default)"
48
+ method_option "cgi", :type => :string, :banner =>
49
+ "start server with cgi interface"
50
+ def server
51
+ if options[:cgi]
52
+ opts = {
53
+ :daemon => ENV['DAEMON'],
54
+ :bind => ENV['BIND'] || '0.0.0.0',
55
+ :port => ENV['PORT'] || 19292,
56
+ :logger => $stderr,
57
+ :access_log => $stderr,
58
+ }
59
+ TDiary::Server.run( opts )
60
+ elsif
61
+ # --rack option
62
+ # TODO: start rack server without run command
63
+ run 'bundle exec rackup'
64
+ end
65
+ end
66
+
67
+ desc "htpasswd", "Create a .htpasswd file"
68
+ def htpasswd
69
+ require 'webrick/httpauth/htpasswd'
70
+ say "Input your username/password"
71
+ print 'Username: '
72
+ ARGV.replace([])
73
+ username = gets().chop
74
+ print 'New password: '
75
+ system "stty -echo"
76
+ password = $stdin.gets.chop
77
+ puts
78
+ print 'Re-type new password: '
79
+ password2 = $stdin.gets.chop
80
+ puts
81
+ system "stty echo"
82
+ if password != password2
83
+ raise StandardError, 'password verification error'
84
+ end
85
+ htpasswd = WEBrick::HTTPAuth::Htpasswd.new('.htpasswd')
86
+ htpasswd.set_passwd(nil, username, password)
87
+ htpasswd.flush
88
+ end
89
+
90
+ desc "version", "Prints the tDiary's version information"
91
+ def version
92
+ say "tdiary #{TDiary::VERSION}"
93
+ end
94
+ map %w(-v --version) => :version
95
+
96
+ no_commands do
97
+ def deploy(target)
98
+ empty_directory(target)
99
+ empty_directory(File.join(target, 'public'))
100
+ empty_directory(File.join(target, 'misc/plugin'))
101
+ %w(
102
+ README.md
103
+ Gemfile
104
+ config.ru
105
+ tdiary.conf.beginner
106
+ tdiary.conf.sample
107
+ tdiary.conf.sample-en
108
+ ).each do |file|
109
+ copy_file(file, File.join(target, file))
110
+ end
111
+ copy_file('tdiary.conf.beginner', File.join(target, 'tdiary.conf'))
112
+ directory('doc', File.join(target, 'doc'))
113
+ end
114
+ end
115
+ end
116
+ end