qwikdoc 0.0.1

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 (335) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/CHANGES +3 -0
  4. data/COPYING +340 -0
  5. data/Gemfile +3 -0
  6. data/README.md +10 -0
  7. data/Rakefile +10 -0
  8. data/TextFormattingRules +137 -0
  9. data/TextFormattingRules.ja +143 -0
  10. data/bin/qwikdoc +34 -0
  11. data/lib/qwik_doc.rb +15 -0
  12. data/lib/qwik_doc/hack.rb +184 -0
  13. data/qwikdoc.gemspec +26 -0
  14. data/spec/qwik_doc_spec.rb +305 -0
  15. data/spec/spec_helper.rb +12 -0
  16. data/vendor/qwik/Makefile +63 -0
  17. data/vendor/qwik/Rakefile +17 -0
  18. data/vendor/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/action.rb +325 -0
  99. data/vendor/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/config.rb +299 -0
  146. data/vendor/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/description.rb +256 -0
  154. data/vendor/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/farm.rb +283 -0
  165. data/vendor/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/group.rb +157 -0
  176. data/vendor/qwik/helper.rb +6 -0
  177. data/vendor/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/html-to-wabisabi.rb +149 -0
  179. data/vendor/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/logger.rb +115 -0
  188. data/vendor/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/mail.rb +341 -0
  193. data/vendor/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/page.rb +67 -0
  223. data/vendor/qwik/pages.rb +444 -0
  224. data/vendor/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/parser-inline.rb +273 -0
  227. data/vendor/qwik/parser.rb +350 -0
  228. data/vendor/qwik/password.rb +183 -0
  229. data/vendor/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/qp.rb +56 -0
  231. data/vendor/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/request.rb +91 -0
  244. data/vendor/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/response.rb +228 -0
  247. data/vendor/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/server.rb +252 -0
  250. data/vendor/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/site.rb +76 -0
  268. data/vendor/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/template.rb +85 -0
  272. data/vendor/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/tokenizer-inline.rb +294 -0
  308. data/vendor/qwik/tokenizer.rb +332 -0
  309. data/vendor/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/util-charset.rb +332 -0
  312. data/vendor/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/util-string.rb +203 -0
  320. data/vendor/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/version.rb +11 -0
  323. data/vendor/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/wabisabi.rb +5 -0
  335. metadata +416 -0
@@ -0,0 +1,295 @@
1
+ # -*- coding: shift_jis -*-
2
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
3
+ # This is free software with ABSOLUTELY NO WARRANTY.
4
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
5
+
6
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
7
+ require 'qwik/mail'
8
+ require 'qwik/util-sendmail'
9
+
10
+ module Qwik
11
+ class Action
12
+ # Send password by e-mail.
13
+ def pre_act_getpass
14
+ mail = @req.query['mail']
15
+
16
+ if mail.nil?
17
+ user = @req.user
18
+ if ! @site.is_open? && user && ! @site.member.exist?(user)
19
+ raise RequireMember
20
+ end
21
+
22
+ return getpass_show_form
23
+ end
24
+
25
+ if ! MailAddress.valid?(mail)
26
+ return c_nerror(_('Invalid mail address')) {
27
+ [[:p, [:em, mail], [:br],
28
+ _('The mail address format is wrong.'), [:br],
29
+ _('Please confirm the input again.')],
30
+ [:p, [:a, {:href=>'.getpass'}, _('Please access again.')]]]
31
+ }
32
+ end
33
+
34
+ if ! @site.is_open? && ! @site.member.exist?(mail)
35
+ ml = @site.ml_address
36
+ return getpass_not_member(mail, ml)
37
+ end
38
+
39
+ passmail = generate_password_mail(mail)
40
+ sendmail = Sendmail.new(@config.smtp_host, @config.smtp_port,
41
+ @config.test)
42
+ begin
43
+ sendmail.send(passmail)
44
+ rescue
45
+ return c_nerror(_('Send Password Error')) {
46
+ [[:p, _('Send failed because of system error.')],
47
+ [:p, _('Please contact the administrator.')],
48
+ [:p, [:a, {:href=>'.login'}, _('Go back to Login screen')]]]
49
+ }
50
+ end
51
+
52
+ return c_notice(_('Send Password done')) {
53
+ [[:p, {:style=>'margin: 1.5em 0'},
54
+ _('I send the password to this mail address.'), [:br],
55
+ _('Please check your mailbox.')],
56
+ [:p, {:style=>'margin: 1.5em 0'}, [:em, mail]],
57
+ [:hr],
58
+ [:p, [:a, {:href=>'.login'}, _('Go back to Login screen')]]]
59
+ }
60
+ end
61
+
62
+ def getpass_show_form
63
+ c_notice(_('Get Password')) {
64
+ [[:h2, _('You will receive the password by e-mail.')],
65
+ [:p, _('Please input your mail address.')],
66
+ getpass_form,
67
+ [:p, [:a, {:href=>'.login'}, _('Go back to Login screen')]]]
68
+ }
69
+ end
70
+
71
+ def getpass_form(form_style='text-align: center; margin: 32px 0 48px;',
72
+ div_style='margin: 16px 0 8px', klass='focus')
73
+ return [:form, {:action=>'.getpass',
74
+ :style=>form_style},
75
+ [:div, {:style=>div_style},
76
+ [:em, _('Mail address'), ': '],
77
+ [:input,
78
+ {:name=>'mail', :size=>'40', :istyle=>'3', :class=>klass}]],
79
+ [:div, {:class=>'rightbutton'},
80
+ [:input, {:type=>'submit', :value=>_('Send')}]]]
81
+ end
82
+
83
+ def getpass_not_member(user, ml)
84
+ c_nerror(_('Members Only')) {
85
+ [[:p, _('You input this e-mail address as user ID.'), [:br],
86
+ [:strong, user]],
87
+ [:p, _('This user with this ID is not a member of this group.'), [:br],
88
+ [:strong, ml]],
89
+ [:p, _('Only the member of this group can get a password.')],
90
+ [:p, [:a, {:href=>'.getpass'}, _('Go back')]]]
91
+ }
92
+ end
93
+
94
+ private
95
+
96
+ def generate_password_mail(user)
97
+ password = @memory.passgen.generate(user)
98
+
99
+ msg = ''
100
+ msg << _('This is your user name and password: ')+"#{@site.host_url}\n"
101
+ msg << "\n"
102
+ msg << _('Username')+": #{user}\n"
103
+ msg << _('Password')+": #{password}\n"
104
+ msg << "\n"
105
+ msg << _('Please access login page')+" #{@site.site_url}.login\n"
106
+ msg << "\n"
107
+ msg << _('You can input the user name and password from this URL automatically.')+"\n"
108
+ msg << "#{@site.site_url}.login?user=#{user}&pass=#{password}\n"
109
+
110
+ mail = {
111
+ :from => @site.ml_address,
112
+ :to => user,
113
+ :subject => _('Your password:')+" #{@site.host_url}",
114
+ :content => msg,
115
+ }
116
+ return mail
117
+ end
118
+ end
119
+ end
120
+
121
+ if $0 == __FILE__
122
+ require 'qwik/test-common'
123
+ require 'qwik/test-module-public'
124
+ $test = true
125
+ end
126
+
127
+ if defined?($test) && $test
128
+ class TestActGetPass < Test::Unit::TestCase
129
+ include TestSession
130
+
131
+ def test_private_site
132
+ # Try to see a get password page, but you can't.
133
+ res = session '/test/.getpass'
134
+ ok_title 'Members Only'
135
+
136
+ # But you can see the page without login.
137
+ res = session('/test/.getpass') {|req|
138
+ req.cookies.clear
139
+ }
140
+ ok_title 'Get Password'
141
+
142
+ t_add_user
143
+ eq ",user@e.com,\n", @site['_SiteMember'].load
144
+ eq false, @site.is_open?
145
+
146
+ # See get password page.
147
+ res = session '/test/.getpass'
148
+ ok_title 'Get Password'
149
+ ok_in ['Get Password'], 'h1'
150
+ ok_xp [:input, {:istyle=>'3', :size=>'40', :class=>'focus',
151
+ :name=>'mail'}], '//input'
152
+ ok_xp [:input, {:value=>'Send', :type=>'submit'}], '//input[2]'
153
+
154
+ # Invalid mail address
155
+ res = session '/test/.getpass?mail=wrong@mail@address'
156
+ ok_title 'Invalid mail address'
157
+
158
+ # You can not get pass if you are not a member.
159
+ res = session '/test/.getpass?mail=guest@example.com'
160
+ ok_title 'Members Only'
161
+
162
+ # Input your mail address
163
+ res = session '/test/.getpass?mail=user@e.com'
164
+ ok_title 'Send Password done'
165
+ ok_in ['user@e.com'], 'em'
166
+ eq ['test@q.example.com', 'user@e.com'], $smtp_sendmail[2..3]
167
+ assert_match /user@e.com/, $smtp_sendmail[4]
168
+ assert_match /95988593/, $smtp_sendmail[4]
169
+ header =
170
+ "From: test@q.example.com
171
+ To: user@e.com
172
+ Subject: Your password: http://example.com
173
+ Content-Type: text/plain; charset=\"ISO-2022-JP\"
174
+
175
+ "
176
+ body = 'This is your user name and password: http://example.com
177
+
178
+ Username: user@e.com
179
+ Password: 95988593
180
+
181
+ Please access login page http://example.com/test/.login
182
+
183
+ You can input the user name and password from this URL automatically.
184
+ http://example.com/test/.login?user=user@e.com&pass=95988593
185
+
186
+ '.set_sourcecode_charset
187
+ eq header+body.to_mail_charset, $smtp_sendmail[4]
188
+
189
+ # Input your mail address in Japanese mode.
190
+ res = session('/test/.getpass?mail=user@e.com') {|req|
191
+ req.accept_language = ['ja']
192
+ }
193
+ ok_title '�p�X���[�h���M����'
194
+ ok_in ['user@e.com'], 'em'
195
+ eq ['test@q.example.com', 'user@e.com'], $smtp_sendmail[2..3]
196
+ assert_match /user@e.com/, $smtp_sendmail[4]
197
+ assert_match /95988593/, $smtp_sendmail[4]
198
+ header =
199
+ "From: test@q.example.com
200
+ To: user@e.com
201
+ Subject: =?ISO-2022-JP?B?GyRCJVElOSVvITwlSRsoQiA=?=: http://example.com
202
+ Content-Type: text/plain; charset=\"ISO-2022-JP\"
203
+
204
+ "
205
+ body =
206
+ '���̃T�C�g�ɂ����郆�[�U���ƃp�X���[�h�ł� : http://example.com
207
+
208
+ ���[�U��: user@e.com
209
+ �p�X���[�h: 95988593
210
+
211
+ ���O�C���y�[�W�ɃA�N�Z�X���Ă������� : http://example.com/test/.login
212
+
213
+ ���LURL�ɃA�N�Z�X����ƁA�����I�Ƀ��[�U�[���ƃp�X���[�h����͂��܂��B
214
+ http://example.com/test/.login?user=user@e.com&pass=95988593
215
+
216
+ '.set_sourcecode_charset
217
+ str = header+body.to_mail_charset
218
+ eq str, $smtp_sendmail[4]
219
+ end
220
+
221
+ def nu_test_obsolete_format
222
+ t_add_user
223
+ res = session '/test/GetPass.html'
224
+ ok_in ['Get Password'], 'title'
225
+ end
226
+
227
+ def test_open_site
228
+ t_site_open
229
+
230
+ # You can see the page.
231
+ res = session '/test/.getpass'
232
+ ok_title 'Get Password'
233
+
234
+ # You can get any pass.
235
+ res = session '/test/.getpass?mail=user@e.com'
236
+ ok_title 'Send Password done'
237
+
238
+ res = session '/test/.getpass?mail=guest@example.com'
239
+ ok_title 'Send Password done'
240
+ end
241
+ end
242
+
243
+ class TestPasswordMailGenerator < Test::Unit::TestCase
244
+ include TestSession
245
+ include TestModulePublic
246
+
247
+ def test_getpass_mail
248
+ res = session '/test/'
249
+
250
+ # test_generate_password_mail
251
+ t_make_public(Qwik::Action, :generate_password_mail)
252
+ mail = @action.generate_password_mail 'user@e.com'
253
+ eq({:from=>"test@q.example.com", :to=>"user@e.com",
254
+ :subject=>"Your password: http://example.com",
255
+ :content=>"This is your user name and password: http://example.com\n\nUsername:\tuser@e.com\nPassword:\t95988593\n\nPlease access login page http://example.com/test/.login\n\nYou can input the user name and password from this URL automatically.\nhttp://example.com/test/.login?user=user@e.com&pass=95988593\n"
256
+ }, mail)
257
+
258
+ @action.instance_eval {
259
+ cf = @memory.catalog
260
+ catalog = cf.get_catalog('ja')
261
+ set_catalog(catalog)
262
+ }
263
+
264
+ mail = @action.generate_password_mail 'user@e.com'
265
+ $KCODE = "s"
266
+ eq({:from=>"test@q.example.com", :to=>"user@e.com",
267
+ :subject=>"�p�X���[�h : http://example.com",
268
+ :content=>"���̃T�C�g�ɂ����郆�[�U���ƃp�X���[�h�ł� : http://example.com\n\n���[�U��:\tuser@e.com\n�p�X���[�h:\t95988593\n\n���O�C���y�[�W�ɃA�N�Z�X���Ă������� : http://example.com/test/.login\n\n���LURL�ɃA�N�Z�X����ƁA�����I�Ƀ��[�U�[���ƃp�X���[�h����͂��܂��B\nhttp://example.com/test/.login?user=user@e.com&pass=95988593\n"
269
+ }, mail)
270
+ end
271
+
272
+ def test_mail_example_org
273
+ site = @site
274
+ page = site.create '_SiteConfig'
275
+ page.store(':siteurl: http://example.org/
276
+ :siteml: info@example.org
277
+ ')
278
+
279
+ res = session '/test/'
280
+ ok_title 'Members Only'
281
+
282
+ t_add_user
283
+ res = session '/test/'
284
+ ok_title 'FrontPage'
285
+
286
+ t_make_public Qwik::Action, :generate_password_mail
287
+ mail = @action.generate_password_mail 'user@e.com'
288
+ eq({:from=>"info@example.org",
289
+ :to=>"user@e.com",
290
+ :subject=>"Your password: http://example.org",
291
+ :content=>"This is your user name and password: http://example.org\n\nUsername:\tuser@e.com\nPassword:\t95988593\n\nPlease access login page http://example.org/.login\n\nYou can input the user name and password from this URL automatically.\nhttp://example.org/.login?user=user@e.com&pass=95988593\n"}, mail)
292
+ end
293
+
294
+ end
295
+ end
@@ -0,0 +1,136 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/act-backup'
7
+
8
+ module Qwik
9
+ class Action
10
+ D_ExtHistory = {
11
+ :dt => 'History mode',
12
+ :dd => 'You can see the history of the page interactively.',
13
+ :dc => "* How to
14
+ Go edit page, follow 'Time machine' link in the right side.
15
+ You see the interactive history of the page.
16
+ "
17
+ }
18
+
19
+ D_ExtHistory_ja = {
20
+ :dt => '�y�[�W�̗��j���[�h',
21
+ :dd => '�y�[�W�̗��j���C���^���N�e�B�u�Ɍ��邱�Ƃ��ł��܂��B',
22
+ :dc => "* �g����
23
+ �ҏW��ʂ̉E���Ɂu�^�C���}�V�[���v�Ƃ��������N������܂��B
24
+ ���̃����N���A�y�[�W�̕ҏW�������C���^���N�e�B�u�Ɍ��邱�Ƃ��ł��܂��B
25
+ "
26
+ }
27
+
28
+
29
+
30
+ def plg_show_history
31
+ return if @req.user.nil?
32
+ return if ! defined?(@req.base) || @req.base.nil?
33
+ return page_attribute('history', _('Show history'))
34
+ end
35
+
36
+ def ext_history
37
+ c_require_pagename
38
+ c_require_member
39
+ return c_notice(_('Announcement')) {
40
+ [[:h2, _('Announcement')],
41
+ [:p, "TimeMachine function is disabled for server issue."]]
42
+ }
43
+ end
44
+
45
+ def nu_ext_history
46
+ c_require_pagename
47
+ c_require_member
48
+ #c_require_page_exist
49
+ # You can see the history of the deleted page.
50
+
51
+ return c_nerror('no path args') if 0 < @req.path_args.length
52
+ return c_nerror('no ext args') if 0 < @req.ext_args.length
53
+
54
+ =begin
55
+ divs = []
56
+ key = @req.base
57
+ @site.backupdb.each_by_key(key) {|v, time|
58
+ res = [:div, {:class=>'period'}, c_res(v)]
59
+ divs << [:div, {:class=>'era', :id=>time.to_i.to_s}, res]
60
+ }
61
+ =end
62
+
63
+ key = @req.base
64
+ list = backup_list(@site, key)
65
+
66
+ divs = list.map {|v, time|
67
+ v = @site.backupdb.get(key, time)
68
+ [:div, {:class=>'era', :id=>time.to_s},
69
+ [:div, {:class=>'period'}, c_res(v)]]
70
+ }
71
+
72
+ return history_show(@req.base, divs)
73
+ end
74
+
75
+ def history_show(pagename, divs)
76
+ ar = []
77
+
78
+ ar << [:style, "@import '.theme/css/wema.css';"]
79
+
80
+ handle = [:div, {:class=>'wema', :id=>'curosr',
81
+ :style=>'left:0px;top:0px;'},
82
+ [:div, {:class=>'menubar'},
83
+ [:span, {:class=>'handle'}, 'handle'],
84
+ [:span, {:class=>'close'}, [:a, {:href=>'#'}, ' X ']]], # noop
85
+ [:div, {:class=>'cont'},
86
+ [:span, {:id=>'indicator'}, _('Move this')]]]
87
+ ar << handle
88
+
89
+ section = []
90
+ section << [:div, {:id=>'eratable'}, '']
91
+ section << divs
92
+ section << [:div, {:id=>'lines'}, '']
93
+ ar << [:div, {:class=>'day'},
94
+ [:div, {:class=>'section'},
95
+ section]]
96
+
97
+ ar << [:script,
98
+ {:type=>'text/javascript', :src=>'.theme/js/wema.js'}, '']
99
+ ar << [:script,
100
+ {:type=>'text/javascript',:src=>'.theme/js/history.js'}, '']
101
+
102
+ title = _('Time machine')+" | #{pagename}"
103
+
104
+ return c_plain(title) { ar }
105
+ end
106
+ end
107
+ end
108
+
109
+ if $0 == __FILE__
110
+ require 'qwik/test-common'
111
+ $test = true
112
+ end
113
+
114
+ if defined?($test) && $test
115
+ class TestActHistory < Test::Unit::TestCase
116
+ include TestSession
117
+
118
+ def test_act_history
119
+ t_add_user
120
+
121
+ ok_wi [:span, {:class=>'attribute'},
122
+ [:a, {:href=>'1.history'}, 'Show history']],
123
+ '{{show_history}}'
124
+
125
+ page = @site['1']
126
+ page.store('* t1') # store the first
127
+ page.store('* t2') # store the second
128
+
129
+ res = session '/test/1.html'
130
+ ok_in ['t2'], '//title'
131
+
132
+ res = session '/test/1.history'
133
+ # ok_in ['Time machine | 1'], '//title'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,204 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ module Qwik
8
+ class Action
9
+ MAX_PAGE_SIZE = 100 * 1024
10
+
11
+ def ext_html
12
+ c_require_page_exist
13
+ c_require_member if Action.private_page?(@req.base)
14
+
15
+ page = @site[@req.base]
16
+ if MAX_PAGE_SIZE < page.size
17
+ return c_nerror(_('Page too big.')) {
18
+ [:div,
19
+ [:p, _('The page is too big to show.')],
20
+ [:p, _('Max is 100K bytes. Please truncate it.')],
21
+ [:p, [:a, {:href=>"#{@req.base}.edit"}, _('Edit')]]]
22
+ }
23
+ end
24
+
25
+ if ! c_login?
26
+ c_set_html
27
+
28
+ if @config.test # Only for test.
29
+ @res.body = view_page_cache_generate(@req.base)
30
+ return
31
+ end
32
+
33
+ pagename = @req.base
34
+ dirpath = @site.cache_path
35
+ file = Action.html_page_cache_path(dirpath, pagename)
36
+
37
+ if view_page_cache_need_generate?(file)
38
+ view_page_cache_generate(pagename)
39
+ end
40
+
41
+ c_simple_send(file.to_s, 'text/html; charset=Shift_JIS')
42
+ return
43
+ end
44
+
45
+ #c_make_log('view') # do not check.
46
+ #c_monitor('view')
47
+ surface_view(@req.base) # common-surface.rb
48
+
49
+ users = @config[:wysiwyg_users]
50
+ if users && users.split(/,\s/).include?(@req.user)
51
+ head = @res.body.get_path('//head')
52
+ head << [:meta, {'http-equiv'=>'Refresh',
53
+ :content=>"0; url=#{@req.base}.wysiwyg"}]
54
+ end
55
+ end
56
+
57
+ def self.private_page?(pagename)
58
+ return pagename[0] == ?_
59
+ end
60
+
61
+ def view_page_cache_need_generate?(file)
62
+ return true if ! file.exist?
63
+ return true if file.mtime < @site.last_page_time
64
+ return true if @req.header['cache-control'] == ['no-cache']
65
+ return false
66
+ end
67
+
68
+ # called from act-archive
69
+ def view_page_cache_generate(pagename)
70
+ w = surface_view_generate(pagename)
71
+ str = w.format_xml # format xml with "\n"
72
+ dirpath = @site.cache_path
73
+ Action.html_page_cache_store(dirpath, pagename, str)
74
+ return w
75
+ end
76
+
77
+ def self.html_page_cache_store(dirpath, pagename, str)
78
+ Action.html_page_cache_path(dirpath, pagename).write(str) # Write to file.
79
+ end
80
+
81
+ def self.html_page_cache_path(dirpath, pagename)
82
+ return (dirpath+"#{pagename}.html").cleanpath
83
+ end
84
+ end
85
+ end
86
+
87
+ if $0 == __FILE__
88
+ require 'qwik/test-common'
89
+ $test = true
90
+ end
91
+
92
+ if defined?($test) && $test
93
+ class TestActHtml < Test::Unit::TestCase
94
+ include TestSession
95
+
96
+ def test_private_page?
97
+ eq false, Qwik::Action.private_page?('t')
98
+ eq true, Qwik::Action.private_page?('_t')
99
+ end
100
+
101
+ def test_protect_underbar
102
+ t_add_user
103
+
104
+ page = @site.create '_t'
105
+ page.store '*t'
106
+
107
+ res = session '/test/_t.html' # with login
108
+ ok_title 't'
109
+
110
+ res = session('/test/_t.html') {|req|
111
+ req.cookies.clear
112
+ }
113
+ ok_title 'Login'
114
+ end
115
+
116
+ def test_ext_html
117
+ t_add_user
118
+ t_site_open
119
+
120
+ page = @site['1']
121
+ eq nil, page
122
+
123
+ res = session '/test/1.html'
124
+ eq 404, @res.status
125
+ ok_title 'Page not found.'
126
+
127
+ page = @site.create_new
128
+ page.store 't'
129
+
130
+ res = session '/test/1.html'
131
+ ok_in ['t'], "//div[@class='section']/p"
132
+
133
+ # test_cache
134
+ res = session('/test/') {|req|
135
+ req.cookies.clear
136
+ }
137
+ # You can see the page.
138
+ ok_title 'FrontPage'
139
+ # But you are not logged in.
140
+ ok_in ['Login'], "//div[@class='adminmenu']//a"
141
+ eq 'text/html; charset=Shift_JIS', @res.headers['Content-Type']
142
+
143
+ t_without_testmode {
144
+ res = session('/test/') {|req| # Do it again
145
+ req.cookies.clear
146
+ }
147
+ assert_instance_of(File, res.body) # The body is a cached content.
148
+ str = res.body.read
149
+ res.body.close # Important.
150
+ assert_match(/FrontPage/, str)
151
+ eq 'text/html; charset=Shift_JIS', res.headers['Content-Type']
152
+ }
153
+ end
154
+
155
+ def test_wysiwyg_users
156
+ t_add_user
157
+ t_site_open
158
+
159
+ page = @site.create_new
160
+
161
+ res = session '/test/1.html'
162
+ ok_xp nil, '//meta'
163
+
164
+ @config[:wysiwyg_users] = "a@e.com, #{DEFAULT_USER}, b@e.com"
165
+
166
+ res = session('/test/1.html')
167
+ ok_xp [:meta, {:content=>'0; url=1.wysiwyg', 'http-equiv'=>'Refresh'}],
168
+ '//meta'
169
+ end
170
+
171
+ def test_guest_in_public_mode
172
+ t_site_open
173
+
174
+ page = @site.create_new
175
+
176
+ res = session('/test/1.html') {|req| req.cookies.clear }
177
+ ok_title '1'
178
+
179
+ res = session('/test/1.html') {|req| req.cookies.clear }
180
+ ok_title '1'
181
+
182
+ end
183
+
184
+ def test_big_page
185
+ t_site_open
186
+
187
+ page = @site.create_new
188
+ page.store("a" * (100 * 1024 + 1))
189
+
190
+ res = session('/test/1.html') {|req| req.cookies.clear }
191
+ ok_title "Page too big."
192
+ end
193
+
194
+ def test_superpre_sharp_mark
195
+ t_add_user
196
+ page = @site.create_new
197
+ page.store '{{{
198
+ #t
199
+ }}}'
200
+ session '/test/1.html'
201
+ ok_in ["#t\n"], "//div[@class='section']/pre"
202
+ end
203
+ end
204
+ end