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,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'rubygems'
3
+
4
+ # Set up gems listed in the Gemfile.
5
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
6
+
7
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
8
+
9
+ if defined?(Bundler)
10
+ env = [:default]
11
+ env << :development if ENV['RACK_ENV'].nil? || ENV['RACK_ENV'].empty?
12
+ env << ENV['RACK_ENV'].intern if ENV['RACK_ENV']
13
+ env = env.reject{|e| Bundler.settings.without.include? e }
14
+ Bundler.require *env
15
+ end
data/tdiary/filter.rb ADDED
@@ -0,0 +1,48 @@
1
+ # -*- coding: utf-8; -*-
2
+ #
3
+ # module/class Filter
4
+ #
5
+ module TDiary
6
+ module Filter
7
+ class Filter
8
+ include ViewHelper
9
+
10
+ DEBUG_NONE = 0
11
+ DEBUG_SPAM = 1
12
+ DEBUG_FULL = 2
13
+
14
+ def initialize( cgi, conf )
15
+ @cgi, @conf = cgi, conf
16
+
17
+ if @conf.options.include?('filter.debug_mode')
18
+ @debug_mode = @conf.options['filter.debug_mode']
19
+ else
20
+ @debug_mode = DEBUG_NONE
21
+ end
22
+ end
23
+
24
+ def comment_filter( diary, comment )
25
+ true
26
+ end
27
+
28
+ def referer_filter( referer )
29
+ true
30
+ end
31
+
32
+ def debug( msg, level = DEBUG_SPAM )
33
+ return if @debug_mode == DEBUG_NONE
34
+ return if @debug_mode == DEBUG_SPAM and level == DEBUG_FULL
35
+
36
+ TDiary.logger.info("#{@cgi.remote_addr}->#{(@cgi.params['date'][0] || 'no date').dump}: #{msg}")
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ # Local Variables:
43
+ # mode: ruby
44
+ # indent-tabs-mode: t
45
+ # tab-width: 3
46
+ # ruby-indent-level: 3
47
+ # End:
48
+ # vim: ts=3
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8; -*-
2
+ #
3
+ # default.rb: included TDiary::Filter::DefaultFilter class
4
+ #
5
+ # Copyright (C) 2001-2005, TADA Tadashi <t@tdtds.jp>
6
+ # You can redistribute it and/or modify it under GPL2.
7
+ #
8
+
9
+ module TDiary
10
+ module Filter
11
+ class DefaultFilter < Filter
12
+ def comment_filter( diary, comment )
13
+ if 'POST' != @cgi.request_method then
14
+ return false
15
+ end
16
+ if comment.name.strip.empty? or comment.body.strip.empty? then
17
+ return false
18
+ end
19
+ idx = 1
20
+ diary.each_comment( -1 ) do |com|
21
+ return false if idx >= @conf.comment_limit_per_day
22
+ return false if comment == com
23
+ idx += 1
24
+ end
25
+ true
26
+ end
27
+
28
+ def referer_filter( referer )
29
+ if not referer then
30
+ false
31
+ #elsif /[\x00-\x20\x7f-\xff]/ =~ referer then
32
+ # false
33
+ elsif @conf.bot =~ @cgi.user_agent
34
+ false
35
+ elsif %r|^https?://|i =~ referer
36
+ ref = CGI::unescape( referer.sub( /#.*$/, '' ).sub( /\?\d{8}$/, '' ) ).force_encoding('ASCII-8BIT')
37
+ @conf.no_referer.each do |noref|
38
+ return false if /#{noref.dup.force_encoding('ASCII-8BIT')}/i =~ ref
39
+ end
40
+ true
41
+ else
42
+ false
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ # Local Variables:
50
+ # mode: ruby
51
+ # indent-tabs-mode: t
52
+ # tab-width: 3
53
+ # ruby-indent-level: 3
54
+ # End:
@@ -0,0 +1,304 @@
1
+ # -*- coding: utf-8; -*-
2
+ # Copyright (C) 2005 akira yamada
3
+ # You can redistribute it and/or modify it under GPL2.
4
+
5
+ require 'uri'
6
+ require 'resolv'
7
+ require 'socket'
8
+ require 'timeout'
9
+
10
+ module TDiary
11
+ module Filter
12
+ class SpamFilter < Filter
13
+ TLD = %w(com net org edu gov mil int info biz name pro museum aero coop [a-z]{2})
14
+
15
+ def initialize( *args )
16
+ super( *args )
17
+ @filter_mode = true
18
+ @max_uris = nil
19
+ @max_rate = nil
20
+ @bad_uri_patts_for_mails = false
21
+
22
+ @bad_uri_patts = nil
23
+ @bad_mail_patts = nil
24
+ @bad_comment_patts = nil
25
+ @bad_ip_addrs = nil
26
+
27
+ @bad_uris = []
28
+ @bad_mails_ext = []
29
+ @bad_mails = []
30
+ @bad_comments = []
31
+ @bad_ips = []
32
+
33
+ @date_limit = nil
34
+ end
35
+
36
+ def update_config
37
+ if @conf.options.include?('spamfilter.filter_mode')
38
+ if @conf.options['spamfilter.filter_mode']
39
+ @filter_mode = true # invisible
40
+ else
41
+ @filter_mode = false # drop
42
+ end
43
+ else
44
+ @filter_mode = true # invisible
45
+ end
46
+
47
+ if @conf.options.include?('spamfilter.max_uris')
48
+ @max_uris = @conf.options['spamfilter.max_uris'].to_i
49
+ else
50
+ @max_uris = nil
51
+ end
52
+
53
+ if @conf.options.include?('spamfilter.max_rate')
54
+ @max_rate = @conf.options['spamfilter.max_rate'].to_i
55
+ else
56
+ @max_rate = nil
57
+ end
58
+
59
+ if @conf.options.include?('spamlookup.ip.list')
60
+ @spamlookup_ip_list = @conf.options['spamlookup.ip.list']
61
+ else
62
+ @spamlookup_ip_list = "dnsbl.spam-champuru.livedoor.com"
63
+ end
64
+
65
+ if @conf.options.include?('spamlookup.domain.list')
66
+ @spamlookup_domain_list = @conf.options['spamlookup.domain.list']
67
+ else
68
+ @spamlookup_domain_list = "bsb.spamlookup.net\nsc.surbl.org\nrbl.bulkfeeds.jp"
69
+ end
70
+
71
+ if @conf.options.include?('spamlookup.safe_domain.list')
72
+ @spamlookup_safe_domain_list = @conf.options['spamlookup.safe_domain.list']
73
+ else
74
+ @spamlookup_safe_domain_list = "www.google.com\nwww.google.co.jp\nsearch.yahoo.co.jp\nwww.bing.com"
75
+ end
76
+
77
+ if @conf.options.include?('spamfilter.bad_uri_patts_for_mails')
78
+ @bad_uri_patts_for_mails =
79
+ @conf.options['spamfilter.bad_uri_patts_for_mails']
80
+ else
81
+ @bad_uri_patts_for_mails = false
82
+ end
83
+ unless @bad_uri_patts_for_mails
84
+ @bad_mails_ext = []
85
+ end
86
+
87
+ unless @conf.options.include?('spamfilter.bad_uri_patts')
88
+ @conf.options['spamfilter.bad_uri_patts'] = ''
89
+ end
90
+ if @bad_uri_patts != @conf.options['spamfilter.bad_uri_patts']
91
+ @bad_uri_patts = @conf.options['spamfilter.bad_uri_patts']
92
+ tmp = @bad_uri_patts.split(/[\r\n]+/)
93
+ tmp.delete_if {|t| t.empty?}
94
+ if tmp.empty?
95
+ @bad_uris = []
96
+ @bad_mails_ext = []
97
+ else
98
+ @bad_uris = [
99
+ %r!^[a-z]*://(?:[^/]*(?:#{tmp.join('|')})){2}!i,
100
+ %r!^[a-z]*://[^/]*\b(?:#{tmp.join('|')})!i,
101
+ %r!^[a-z]*://[^/]*(?:#{tmp.join('|')})\b!i,
102
+ %r!^[a-z]*://.*\b(?:#{tmp.join('|')})\b!i,
103
+ %r!^[a-z]*://[^/]*?[^./]{20,}[^/]*/?$!i,
104
+ %r!^[a-z]*://[^/.]+(?:/|$)!i,
105
+ %r<^[a-z]*://[^/]+\.(?!(?:#{TLD.join("|")})\b\.?)[^.:/]+(?:\.?(?::\d+)?(?:/|$))>i,
106
+ ]
107
+ if @bad_uri_patts_for_mails
108
+ @bad_mails_ext = [
109
+ %r!\b(?:#{tmp.join('|')})!i,
110
+ %r!(?:#{tmp.join('|')})\b!i,
111
+ ]
112
+ end
113
+ end
114
+ end
115
+
116
+ unless @conf.options.include?('spamfilter.bad_mail_patts')
117
+ @conf.options['spamfilter.bad_mail_patts'] = ''
118
+ end
119
+ if @bad_mail_patts != @conf.options['spamfilter.bad_mail_patts']
120
+ @bad_mail_patts = @conf.options['spamfilter.bad_mail_patts']
121
+ tmp = @bad_mail_patts.split(/[\r\n]+/)
122
+ tmp.delete_if {|t| t.empty?}
123
+ @bad_mails = tmp.collect {|t| %r!#{t}!i rescue nil}.compact
124
+ end
125
+
126
+ unless @conf.options.include?('spamfilter.bad_comment_patts')
127
+ @conf.options['spamfilter.bad_comment_patts'] = ''
128
+ end
129
+ if @bad_comment_patts != @conf.options['spamfilter.bad_comment_patts']
130
+ @bad_comment_patts = @conf.options['spamfilter.bad_comment_patts']
131
+ tmp = @bad_comment_patts.split(/[\r\n]+/)
132
+ tmp.delete_if {|t| t.empty?}
133
+ @bad_comments = tmp.collect {|t| %r!#{t}!i rescue nil}.compact
134
+ end
135
+
136
+ unless @conf.options.include?('spamfilter.bad_ip_addrs')
137
+ @conf.options['spamfilter.bad_ip_addrs'] = ''
138
+ end
139
+ if @bad_ip_addrs != @conf.options['spamfilter.bad_ip_addrs']
140
+ @bad_ip_addrs = @conf.options['spamfilter.bad_ip_addrs']
141
+ tmp = @bad_ip_addrs.split(/[\r\n]+/)
142
+ tmp.delete_if {|t| t.empty?}
143
+ @bad_ips = tmp.collect do |t|
144
+ if /\.$/ =~ t
145
+ %r!#{Regexp.quote(t[0..-2]) + '.*'}!i
146
+ else
147
+ %r!#{Regexp.quote(t)}!i
148
+ end
149
+ end
150
+ end
151
+
152
+ nil
153
+ end
154
+
155
+ def name_base_black_domain?( domain )
156
+ @spamlookup_domain_list.split(/[\n\r]+/).inject(false) do |r, dnsbl|
157
+ r || lookup(domain, dnsbl)
158
+ end
159
+ end
160
+
161
+ def ip_base_black_domain?( domain )
162
+ @spamlookup_ip_list.split(/[\n\r]+/).inject(false) do |r, dnsbl|
163
+ r || lookup(domain, dnsbl, true)
164
+ end
165
+ end
166
+
167
+ def lookup(domain, dnsbl, iplookup = false)
168
+ timeout(5) do
169
+ domain = IPSocket::getaddress( domain ).split(/\./).reverse.join(".") if iplookup
170
+ address = Resolv.getaddress( "#{domain}.#{dnsbl}" )
171
+ debug("lookup:#{domain}.#{dnsbl} address:#{address}: spam host.")
172
+ return true
173
+ end
174
+ rescue TimeoutError, Resolv::ResolvTimeout
175
+ debug("lookup:#{domain}.#{dnsbl}: safe host.")
176
+ return false
177
+ rescue Resolv::ResolvError, Exception
178
+ debug("unknown error:#{domain}.#{dnsbl}", DEBUG_FULL)
179
+ return false
180
+ end
181
+
182
+ def black_url?( body )
183
+ body.scan( %r|https?://([^/:\s]+)| ) do |s|
184
+ if @spamlookup_safe_domain_list.include?( s[0] )
185
+ debug("#{s[0]} is safe host.", DEBUG_FULL)
186
+ next
187
+ end
188
+ return true if name_base_black_domain?( s[0] ) || ip_base_black_domain?( s[0] )
189
+ end
190
+ return false
191
+ end
192
+
193
+ def comment_filter( diary, comment )
194
+ update_config
195
+
196
+ return false if black_url?( comment.body )
197
+
198
+ if %r{/\.\/} =~ ENV['REQUEST_URI']
199
+ debug( "REQUEST_URI contains %r{/\./}: #{ENV['REQUEST_URI']}" )
200
+ comment.show = false
201
+ return @filter_mode
202
+ end
203
+
204
+ if /^[\x20-\x7f]*$/io !~ comment.mail
205
+ # mail address include not ASCII charactor
206
+ debug( "invalid mail address: #{comment.mail.dump}" )
207
+ comment.show = false
208
+ return @filter_mode
209
+ end
210
+
211
+ if !comment.mail.empty? &&
212
+ %r<@[^@]+\.(?:#{TLD.join("|")})$>i !~ comment.mail
213
+ debug( "invalid domain name of mail address: #{comment.mail.dump}" )
214
+ comment.show = false
215
+ return @filter_mode
216
+ end
217
+
218
+ p = nil
219
+ if @bad_mails.detect {|p| p =~ comment.mail} ||
220
+ @bad_mails_ext.detect {|p| p =~ comment.mail}
221
+ debug( "mail address blacklisted: /#{p}/ =~ #{comment.mail.dump}" )
222
+ comment.show = false
223
+ return @filter_mode
224
+ end
225
+
226
+ if @bad_comments.detect {|p| p =~ comment.body}
227
+ debug( "comment contains bad words: /#{p}/" )
228
+ comment.show = false
229
+ return @filter_mode
230
+ end
231
+
232
+ if @bad_ips.detect {|p| p =~ @cgi.remote_addr}
233
+ debug( "ip address blacklisted: /#{p}/ =~ #{@cgi.remote_addr}" )
234
+ comment.show = false
235
+ return @filter_mode
236
+ end
237
+
238
+ uris = URI.extract( comment.body, %w(http https ftp mailto) )
239
+ unless uris.empty?
240
+ if @max_uris && @max_uris >= 0 && uris.size > @max_uris
241
+ debug( "too many URIs" )
242
+ comment.show = false
243
+ return @filter_mode
244
+ end
245
+
246
+ if @max_rate && @max_rate > 0 &&
247
+ uris.join('').size * 100 / comment.body.gsub(/\s+/, '').size > @max_rate
248
+ debug( "too many URI-chars" )
249
+ comment.show = false
250
+ return @filter_mode
251
+ end
252
+
253
+ uris.each do |uri|
254
+ uri = uri.sub(/^ur[il]:/io, '')
255
+ @bad_uris.each do |bad_uri|
256
+ if bad_uri =~ uri
257
+ debug( "comment contains bad words: #{uri}: #{bad_uri}" )
258
+ comment.show = false
259
+ return @filter_mode
260
+ end
261
+ end
262
+ end
263
+ end
264
+
265
+ return true
266
+ end
267
+
268
+ def referer_filter( referer )
269
+ return true unless referer
270
+
271
+ update_config
272
+
273
+ return false if black_url?( referer )
274
+
275
+ if /#/ =~ referer then
276
+ debug( "referer has a fragment: #{referer}" )
277
+ return false
278
+ end
279
+
280
+ if %r{\A[^:]+://[^/]*\z} =~ referer
281
+ debug( "referer has no path: #{referer}" )
282
+ return false
283
+ end
284
+
285
+ @bad_uris.each do |bad_uri|
286
+ if bad_uri =~ referer
287
+ debug( "referer contains bad words: #{referer}: #{bad_uri}" )
288
+ return false
289
+ end
290
+ end
291
+
292
+ return true
293
+ end
294
+ end
295
+ end
296
+ end
297
+
298
+ # Local Variables:
299
+ # mode: ruby
300
+ # indent-tabs-mode: t
301
+ # tab-width: 3
302
+ # ruby-indent-level: 3
303
+ # End:
304
+ # vim: ts=3
data/tdiary/io/base.rb ADDED
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8; -*-
2
+ #
3
+ # class IOBase
4
+ # base of IO class
5
+ #
6
+ require 'fileutils'
7
+
8
+ module TDiary
9
+ class BaseIO
10
+ def initialize( tdiary )
11
+ @tdiary = tdiary
12
+ @data_path = @tdiary.conf.data_path if @tdiary.conf.data_path
13
+ load_styles
14
+ end
15
+
16
+ def calendar
17
+ raise StandardError, 'not implemented'
18
+ end
19
+
20
+ def transaction(date)
21
+ raise StandardError, 'not implemented'
22
+ end
23
+
24
+ def diary_factory(date, title, body, style_name = 'tDiary')
25
+ style(style_name.downcase).new(date, title, body)
26
+ end
27
+
28
+ def cache_dir
29
+ raise StandardError, 'not implemented'
30
+ end
31
+
32
+ def cache_path
33
+ @_cache_path ||= cache_dir.untaint
34
+ FileUtils.mkdir_p(@_cache_path)
35
+ @_cache_path
36
+ end
37
+
38
+ def load_styles
39
+ @styles = {}
40
+ paths = @tdiary.conf.options['style.path'] || ["#{TDiary::PATH}/tdiary/style", "#{TDiary::PATH}/tdiary"]
41
+ [paths].flatten.each do |path|
42
+ path = path.sub(/\/+$/, '')
43
+ Dir.glob("#{path}/*_style.rb") do |style_file|
44
+ require style_file.untaint
45
+ style = File.basename(style_file).sub(/_style\.rb$/, '')
46
+ @styles[style] = TDiary.const_get("#{style.capitalize}Diary")
47
+ end
48
+ end
49
+ end
50
+
51
+ def style(s)
52
+ unless @styles
53
+ raise BadStyleError, "styles are not loaded"
54
+ end
55
+ r = @styles[s.downcase]
56
+ unless r
57
+ raise BadStyleError, "bad style: #{s}"
58
+ end
59
+ r
60
+ end
61
+ end
62
+ end
63
+
64
+ # Local Variables:
65
+ # mode: ruby
66
+ # indent-tabs-mode: t
67
+ # tab-width: 3
68
+ # ruby-indent-level: 3
69
+ # End:
70
+ # vim: ts=3