Wiki2Go 1.17.5 → 1.22.0

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 (108) hide show
  1. data/bin/Wiki2Go_firewall_blacklist.rb +8 -0
  2. data/bin/Wiki2Go_make_cvs_repository.rb +1 -0
  3. data/bin/Wiki2Go_make_site.rb +1 -2
  4. data/bin/Wiki2Go_update_site.rb +1 -2
  5. data/lib/Web2Go/CGIRequest.rb +8 -2
  6. data/lib/Web2Go/CGIResponse.rb +17 -14
  7. data/lib/Web2Go/MockRequest.rb +12 -2
  8. data/lib/Web2Go/MockResponse.rb +10 -7
  9. data/lib/Web2Go/WebrickRequest.rb +106 -101
  10. data/lib/Web2Go/WebrickResponse.rb +4 -8
  11. data/lib/Wiki2Go/BlackList.rb +48 -25
  12. data/lib/Wiki2Go/DotGraphics.rb +1 -1
  13. data/lib/Wiki2Go/FileStorage.rb +266 -266
  14. data/lib/Wiki2Go/HTMLFormatter.rb +28 -0
  15. data/lib/Wiki2Go/Install/config/chonqed_blacklist.txt +418 -0
  16. data/lib/Wiki2Go/Install/config/passwords +1 -1
  17. data/lib/Wiki2Go/Install/config/url_blacklist.txt +3855 -0
  18. data/lib/Wiki2Go/Install/make_repository.rb +32 -26
  19. data/lib/Wiki2Go/Install/make_site.rb +197 -111
  20. data/lib/Wiki2Go/Install/site/error.html +1 -1
  21. data/lib/Wiki2Go/Install/site/robots.txt +10 -1
  22. data/lib/Wiki2Go/Install/site/style.css +129 -64
  23. data/lib/Wiki2Go/Install/templates/admin.htm +1 -1
  24. data/lib/Wiki2Go/Install/templates/admin_pages/edit.txt +2 -1
  25. data/lib/Wiki2Go/Install/templates/admin_pages/format_for_fck.txt +31 -0
  26. data/lib/Wiki2Go/Install/templates/admin_pages/passwords.txt +1 -1
  27. data/lib/Wiki2Go/Install/templates/edit.htm +62 -46
  28. data/lib/Wiki2Go/Install/templates/full_footer.htm +31 -33
  29. data/lib/Wiki2Go/Install/templates/header.htm +0 -1
  30. data/lib/Wiki2Go/Install/templates/menu.htm +29 -0
  31. data/lib/Wiki2Go/Install/templates/pagelist.htm +46 -43
  32. data/lib/Wiki2Go/Install/templates/simple_footer.htm +20 -16
  33. data/lib/Wiki2Go/Install/templates/versionlist.htm +52 -40
  34. data/lib/Wiki2Go/Install/templates/view.htm +46 -29
  35. data/lib/Wiki2Go/Install/templates/wikiedit.htm +63 -0
  36. data/lib/Wiki2Go/Install/wiki/delete.png +0 -0
  37. data/lib/Wiki2Go/Install/wiki/style.css +133 -63
  38. data/lib/Wiki2Go/LineFormatter.rb +345 -197
  39. data/lib/Wiki2Go/Page.rb +16 -3
  40. data/lib/Wiki2Go/PrivateWikiConfig.rb +5 -5
  41. data/lib/Wiki2Go/PublicWikiConfig.rb +83 -37
  42. data/lib/Wiki2Go/ReadWriteWikiConfig.rb +8 -8
  43. data/lib/Wiki2Go/Server.rb +6 -1
  44. data/lib/Wiki2Go/SpamFilter.rb +32 -41
  45. data/lib/Wiki2Go/Web.rb +10 -3
  46. data/lib/Wiki2Go/Wiki2Go.rb +301 -94
  47. data/lib/Wiki2Go/Wiki2GoConfig.rb +87 -6
  48. data/lib/Wiki2Go/Wiki2GoServlet.rb +66 -12
  49. data/lib/Wiki2Go/WikiFormatter.rb +60 -30
  50. data/lib/Wiki2Go/cgi/diff.rb +20 -0
  51. data/lib/Wiki2Go/cgi/secure/log_rss.rb +21 -0
  52. data/lib/Wiki2Go/cgi/sidebyside.rb +20 -0
  53. data/lib/Wiki2Go/cgi/wikiedit.rb +20 -0
  54. data/lib/Wiki2Go/firewall_blacklist.rb +88 -0
  55. data/test/All.rb +5 -2
  56. data/test/TestBlackList.rb +70 -14
  57. data/test/TestConfig.rb +5 -5
  58. data/test/TestDiff.rb +95 -0
  59. data/test/TestFormatter.rb +14 -16
  60. data/test/TestHTMLFormatter.rb +37 -0
  61. data/test/TestInstall.rb +70 -27
  62. data/test/TestLineFormatter.rb +71 -15
  63. data/test/TestRSS.rb +8 -7
  64. data/test/TestRepository.rb +50 -0
  65. data/test/TestServer.rb +3 -8
  66. data/test/TestSpamFilter.rb +33 -1
  67. data/test/TestStorage.rb +11 -0
  68. data/test/TestWeb.rb +2 -2
  69. data/test/TestWiki2Go.rb +766 -166
  70. data/test/TestWiki2GoServlet.rb +1122 -524
  71. data/test/UnitTestFiles.rb +7 -3
  72. data/test/Wiki2GoConfigForTest.rb +40 -6
  73. data/test/checksite.rb +17 -50
  74. data/test/test_firewall_blacklist.rb +131 -0
  75. data/test/test_page.rb +45 -0
  76. data/test/testdata/Registration.rbl.txt +7 -0
  77. data/test/testdata/config/url_blacklist.txt +38822 -0
  78. data/test/testdata/expected_changes.html +1 -2
  79. data/test/testdata/expected_edit.html +108 -59
  80. data/test/testdata/expected_full_rss.xml +2 -2
  81. data/test/testdata/expected_out.html +97 -61
  82. data/test/testdata/expected_put.html +88 -53
  83. data/test/testdata/expected_save.html +88 -52
  84. data/test/testdata/expected_savehtml.html +88 -52
  85. data/test/testdata/expected_search.html +68 -53
  86. data/test/testdata/expected_upload.html +88 -53
  87. data/test/testdata/expected_versions.html +97 -82
  88. data/test/testdata/expected_view.html +97 -61
  89. data/test/testdata/firewall/iptables.config +37 -0
  90. data/test/testdata/firewall/user_blacklist.txt +162 -0
  91. data/test/testdata/logs/wiki.log +652 -0
  92. data/test/testdata/logs/wiki.log.0 +113 -0
  93. data/test/testdata/logs/wiki.log.1 +113 -0
  94. data/test/testdata/logs/wiki.log.2 +113 -0
  95. data/test/testdata/logs/wiki.log.3 +115 -0
  96. data/test/testdata/logs/wiki.log.4 +5 -0
  97. data/test/testdata/logs/wiki.log.5 +7 -0
  98. data/test/testdata/logs/wiki.log.6 +5 -0
  99. data/test/testdata/logs/wiki.log.7 +118 -0
  100. data/test/testdata/logs/wiki.log.8 +12 -0
  101. data/test/testdata/site/html/Xpday/rss.xml +53 -103
  102. data/test/testdata/texts/Bugs/FrontPage.txt +6 -0
  103. data/test/testdata/texts/Bugs/NoHidden.spam +17850 -0
  104. data/test/testdata/texts/Bugs/PairProgrammingParties.spam +102 -0
  105. data/test/testdata/texts/Bugs/PairProgrammingParties.txt +99 -0
  106. metadata +53 -7
  107. data/test/TestMail.rb +0 -29
  108. data/test/gc.log +0 -2
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  require "Wiki2Go/FileStorage.rb"
5
+ require "Wiki2Go/Install/make_repository.rb"
5
6
  require 'fileutils'
6
7
  require 'logger'
7
8
 
@@ -18,6 +19,9 @@ module Wiki2Go
18
19
  attr_accessor :root_directory
19
20
  attr_accessor :site_directory
20
21
 
22
+ attr_accessor :user
23
+ attr_accessor :group
24
+
21
25
  attr_accessor :generate_html
22
26
  attr_accessor :debug
23
27
  attr_accessor :multi_wiki
@@ -27,6 +31,16 @@ module Wiki2Go
27
31
  attr_accessor :subsite
28
32
  attr_accessor :blog_style
29
33
  attr_accessor :maximum_urls
34
+ attr_accessor :pages_in_recent_changes
35
+ attr_accessor :pages_in_rss
36
+ attr_accessor :editor
37
+ attr_accessor :delete_spam
38
+ # User must submit a checksum of the original page when saving
39
+ attr_accessor :checksum_required
40
+ # Salt to make checksum unique and unguessable
41
+ attr_accessor :checksum_salt
42
+ # When a document is submitted without a checksum, blacklist the sender (default = false)
43
+ attr_accessor :blacklist_when_no_checksum
30
44
 
31
45
  # directory = base directory of the wiki. Current directory by default
32
46
  def initialize(directory=nil)
@@ -50,8 +64,25 @@ module Wiki2Go
50
64
  @subsite = ''
51
65
  @blog_style = false
52
66
  @maximum_urls = 5
53
-
67
+
68
+ @pages_in_recent_changes = 20
69
+ @pages_in_rss = 20
70
+ @editor = 'wikiedit'
71
+ @delete_spam = false
72
+
73
+ @checksum_required = false
74
+ @checksum_salt = '^$%wiki#§}'
75
+ @blacklist_when_no_checksum = false
76
+
54
77
  @logger = nil
78
+
79
+ @user = nil
80
+ @group = nil
81
+
82
+ @banned_users = nil
83
+ @banned_urls = nil
84
+ @chonqed_urls = nil
85
+ @greylist = nil
55
86
  end
56
87
 
57
88
  # return current Storage object.
@@ -68,6 +99,26 @@ module Wiki2Go
68
99
  @logger
69
100
  end
70
101
 
102
+ def banned_users
103
+ @banned_users ||= storage.load_blacklist('user')
104
+ @banned_users
105
+ end
106
+
107
+ def banned_urls
108
+ @banned_urls ||= storage.load_blacklist('url',true)
109
+ @banned_urls
110
+ end
111
+
112
+ def chonqed_urls
113
+ @chonqed_urls ||= storage.load_blacklist('chonqed')
114
+ @chonqed_urls
115
+ end
116
+
117
+ def greylist
118
+ @greylist ||= storage.load_greylist
119
+ @greylist
120
+ end
121
+
71
122
  # Discard configuration. Closes logger object, if present
72
123
  def close
73
124
  @logger.close unless @logger.nil?
@@ -126,8 +177,38 @@ module Wiki2Go
126
177
  true
127
178
  end
128
179
 
180
+ # Check if we want to accept calls from the user before doing anything
181
+ # web:: a Web object describing the request
182
+ # true by default, subclasses can override
183
+ def accept_user?(web)
184
+ true
185
+ end
186
+
187
+ # Check if the edit is correct (not by a spammer, no editing clash)
188
+ # old_page:: the page as it is on disk
189
+ # checksum:: the checksum submitted with the edit
190
+ def accept_edit?(web,old_page,checksum)
191
+ checksum = checksum.strip
192
+ if @checksum_required then
193
+ check = old_page.checksum(@checksum_salt)
194
+ if check != checksum then
195
+ author = web.user
196
+ pagename = web.name.length > 0 ? "#{web.name}/#{web.current_page}" : web.current_page
197
+
198
+ log("User #{author} gave wrong checksum when editing '#{pagename}': #{checksum} vs #{check}.")
199
+ end
200
+ return check == checksum
201
+ end
202
+ true
203
+ end
204
+
205
+ # Add the spammer IP address to the blacklist
206
+ def blacklist_user(spammer)
207
+
208
+ end
209
+
129
210
  def redirect_to_html?(web)
130
- @generate_html && !web.secure
211
+ @generate_html && !web.secure?
131
212
  end
132
213
 
133
214
  def add_processor(type,proc)
@@ -180,7 +261,7 @@ module Wiki2Go
180
261
  require 'Wiki2Go/Install/make_repository'
181
262
 
182
263
  def update_from_repository
183
- cvs = RepositoryMaker.new(@root,logger)
264
+ cvs = Wiki2Go::RepositoryMaker.new(@root,logger)
184
265
  updated,clashed = cvs.update(@root_directory,@modulename)
185
266
  log("UPDATE: Updated files : #{updated.join(', ')}")
186
267
  log("UPDATE: Clashed files : #{clashed.join(', ')}")
@@ -188,14 +269,14 @@ module Wiki2Go
188
269
  end
189
270
 
190
271
  def commit_to_repository(comment='No Comment')
191
- cvs = RepositoryMaker.new(@root,logger)
272
+ cvs = Wiki2Go::RepositoryMaker.new(@root,logger)
192
273
  report = cvs.add_wiki(@root_directory,@modulename,comment)
193
274
  log("COMMIT: #{report.join}")
194
275
  return report
195
276
  end
196
277
 
197
278
  def instant_commit_to_repository(comment='No Comment')
198
- cvs = RepositoryMaker.new(@root,logger)
279
+ cvs = Wiki2Go::RepositoryMaker.new(@root,logger)
199
280
  if cvs.is_local?(@root_directory,@modulename) then
200
281
  report = cvs.add_wiki(@root_directory,@modulename,comment)
201
282
  log("COMMIT: #{report.join}")
@@ -229,7 +310,7 @@ module Wiki2Go
229
310
  def make_logger
230
311
  dir = File.dirname(logfile)
231
312
  FileUtils::mkdir_p(dir, { :mode => 0775 }) unless File.exists?(dir)
232
- @logger = Logger.new(logfile, 10, 64000)
313
+ @logger = Logger.new(logfile, 10, 256000)
233
314
  @logger.datetime_format = "%Y-%m-%d %H:%M:%S"
234
315
  @logger
235
316
  end
@@ -20,14 +20,17 @@ module Wiki2Go
20
20
  result
21
21
  end
22
22
 
23
- def perform_view(req,res,wikiweb)
23
+ def perform_view(req,res,web)
24
24
  wiki = Wiki2Go::Wiki.new(@config)
25
25
 
26
+ version = -1
27
+ version = web.request.parameter('version',-1).to_i unless web.request.nil?
28
+
26
29
  res.content_type = 'text/html'
27
- if @config.allow_dynamic_pages && wikiweb.current_page =~ /\.rbl$/i then
28
- res.body = wiki.perform(wikiweb,req)
30
+ if @config.allow_dynamic_pages && web.current_page =~ /\.rbl$/i then
31
+ res.body = wiki.perform(web,req)
29
32
  else
30
- res.body = wiki.view(wikiweb)
33
+ res.body = wiki.view(web,version)
31
34
  end
32
35
  true
33
36
  end
@@ -39,15 +42,46 @@ module Wiki2Go
39
42
  res.body = wiki.perform(wikiweb,req)
40
43
  true
41
44
  end
45
+
46
+ def perform_diff(req,res,wikiweb)
47
+ from = -1
48
+ from = wikiweb.request.parameter('from',-1).to_i unless wikiweb.request.nil?
49
+
50
+ to = -1
51
+ to = wikiweb.request.parameter('to',-1).to_i unless wikiweb.request.nil?
52
+
53
+ wiki = Wiki2Go::Wiki.new(@config)
54
+
55
+ res.content_type = 'text/html'
56
+ res.body = wiki.diff(wikiweb,from,to)
57
+ true
58
+ end
42
59
 
60
+ def perform_sidebyside(req,res,wikiweb)
61
+ from = -1
62
+ from = wikiweb.request.parameter('from',-1).to_i unless wikiweb.request.nil?
63
+
64
+ to = -1
65
+ to = wikiweb.request.parameter('to',-1).to_i unless wikiweb.request.nil?
66
+
67
+ wiki = Wiki2Go::Wiki.new(@config)
68
+
69
+ res.content_type = 'text/html'
70
+ res.body = wiki.sidebyside(wikiweb,from,to)
71
+ true
72
+ end
73
+
43
74
  def perform_save(req,res,wikiweb)
44
75
 
76
+ return false if req.request_method != 'POST'
77
+
45
78
  content = req.parameter('text','')
46
79
  name = req.parameter('title',wikiweb.current_page)
47
80
  author = req.parameter('author')
48
81
  remember_me = req.parameter('remember_me')
49
-
50
- if !author.nil? && author.length > 0 then # !wikiweb.secure &&
82
+ checksum = req.parameter('iznorobot','')
83
+
84
+ if !author.nil? && author.length > 0 then # !wikiweb.secure? &&
51
85
  wikiweb.alias = author
52
86
  timeout = Time.now + 7 * 24 * 3600
53
87
  res.add_cookie(USER_COOKIE,author,nil,'/',timeout) unless remember_me.nil?
@@ -57,7 +91,7 @@ module Wiki2Go
57
91
 
58
92
  wikiweb.title = name
59
93
 
60
- redirect_to = wiki.save(wikiweb,content)
94
+ redirect_to = wiki.save(wikiweb,content,checksum)
61
95
  res.redirect_to = redirect_to
62
96
  res.content_type = "text/html"
63
97
  res.body = "Redirect to #{redirect_to}"
@@ -98,6 +132,14 @@ module Wiki2Go
98
132
  true
99
133
  end
100
134
 
135
+ def perform_wikiedit(req,res,wikiweb)
136
+ wiki = Wiki2Go::Wiki.new(@config)
137
+
138
+ res.content_type = "text/html"
139
+ res.body = wiki.wikiedit(wikiweb)
140
+ true
141
+ end
142
+
101
143
  def perform_redirect(req,res,wikiweb)
102
144
  redirect_to = req.parameter('url')
103
145
 
@@ -128,8 +170,11 @@ module Wiki2Go
128
170
  wiki.blacklist(user)
129
171
  end
130
172
 
173
+ redirect_to = wiki.remove_spam(wikiweb)
174
+ res.redirect_to = redirect_to
131
175
  res.content_type = "text/html"
132
- res.body = wiki.remove_spam(wikiweb)
176
+ res.body = "Redirect to #{redirect_to}"
177
+ @config.log("Remove spam done. Redirecting to #{redirect_to}")
133
178
  true
134
179
  end
135
180
 
@@ -175,6 +220,11 @@ module Wiki2Go
175
220
 
176
221
  def execute_command(req,res)
177
222
  wikiweb = Wiki2Go::Web.from_request(req,@config)
223
+ if !@config.accept_user?(wikiweb) then
224
+ res.failed
225
+ return false
226
+ end
227
+
178
228
  command = wikiweb.verb
179
229
  begin
180
230
  if command =~ /^([^\.]+)\./ then
@@ -191,18 +241,19 @@ module Wiki2Go
191
241
  end
192
242
  end
193
243
  end
244
+
194
245
  return false
195
246
  end
196
247
 
197
248
  def perform(method,req,res,wikiweb)
198
- @config.log(">> #{method} #{req.cookies.inspect}")
249
+ @config.log(">> #{method}(#{wikiweb.name},#{wikiweb.current_page}) #{req.cookies.inspect}")
199
250
  start_time = Time.now.to_f
200
251
  begin
201
252
  cookie = req.cookie(USER_COOKIE)
202
-
253
+
203
254
  author = cookie.value.to_s unless cookie.nil?
204
255
 
205
- if !author.nil? && author.length > 0 then # !wikiweb.secure &&
256
+ if !author.nil? && author.length > 0 then # !wikiweb.secure? &&
206
257
  wikiweb.alias = author
207
258
  end
208
259
 
@@ -210,9 +261,12 @@ module Wiki2Go
210
261
  return result
211
262
  rescue WEBrick::HTTPStatus::Redirect => redirect then
212
263
  raise redirect
264
+ rescue Wiki2Go::SpamException then
265
+ res.failed
266
+ return false
213
267
  rescue Exception => e then
214
268
  @config.errorlog("Caught exception in #{method}: #{e.inspect}" + $/ + "Stack: #{$@}")
215
- redirect_url = "#{wikiweb.base_url}error.html"
269
+ redirect_url = wikiweb.error_page
216
270
 
217
271
  res.redirect_to = redirect_url
218
272
  res.body = "redirect to view <a href=\"#{redirect_url}\">view</a><br>"
@@ -17,6 +17,8 @@ module Wiki2Go
17
17
  attr_reader :searchtopic
18
18
  attr_reader :config
19
19
  attr_accessor :title
20
+ attr_reader :from
21
+ attr_reader :to
20
22
 
21
23
  def initialize(config,formatter,text,page,web,pages,searchtopic,title)
22
24
  @config = config
@@ -26,7 +28,19 @@ module Wiki2Go
26
28
  @text = text
27
29
  @pages = pages
28
30
  @searchtopic = searchtopic
29
- @title = title
31
+ @title = title
32
+ @from = -1
33
+ @to = -1
34
+ end
35
+
36
+ def versions(from,to)
37
+ if to > 0 then
38
+ @to = to
39
+ @from = from
40
+ else
41
+ @from = -1
42
+ @to = -1
43
+ end
30
44
  end
31
45
  end
32
46
 
@@ -38,11 +52,12 @@ module Wiki2Go
38
52
 
39
53
  public
40
54
 
41
- def format_page_in_template(template,page)
55
+ def format_page_in_template(template,page,version=-1)
42
56
  formatted_page = format_page(page.content)
43
57
  template = splice_variable_values(template,page,formatted_page)
44
58
  erb = ERB.new(template)
45
59
  context = PageContext.new(@config,self,formatted_page,page,@web,nil,nil,nil)
60
+ context.versions(version-1,version)
46
61
  template = evaluate(erb,context)
47
62
  return template
48
63
  end
@@ -56,7 +71,7 @@ module Wiki2Go
56
71
  end
57
72
 
58
73
  def put_page_in_template(template,page)
59
- formatted_page = page.content.gsub(/&/n, '&amp;').gsub(/\"/n, '&quot;').gsub(/>/n, '&gt;').gsub(/</n, '&lt;')
74
+ formatted_page = CGI::escapeHTML(page.content)
60
75
 
61
76
  template = splice_variable_values(template,page,formatted_page)
62
77
  erb = ERB.new(template)
@@ -65,6 +80,17 @@ module Wiki2Go
65
80
  return template
66
81
  end
67
82
 
83
+ def dump_page_in_template(template,page,from,to)
84
+ formatted_page = page.content
85
+
86
+ template = splice_variable_values(template,page,formatted_page)
87
+ erb = ERB.new(template)
88
+ context = PageContext.new(@config,self,formatted_page,page,@web,nil,nil,nil)
89
+ context.versions(from,to)
90
+ template = evaluate(erb,context)
91
+ return template
92
+ end
93
+
68
94
  def format_page(content)
69
95
  result = format_page_content(content)
70
96
  result += formatting_done
@@ -73,41 +99,45 @@ module Wiki2Go
73
99
 
74
100
 
75
101
  def generate_rss(template,changes)
76
-
77
- # RSS must contain absolute URLs because some feedreaders don't honor the relative
78
- # URLs to the content of the <link> tag
79
- old_absolute_urls = @absolute_urls
80
- @absolute_urls = true
81
-
82
- template_after_items = <<-END_OF_AFTER_ITEMS_XML
102
+
103
+ # RSS must contain absolute URLs because some feedreaders don't honor the relative
104
+ # URLs to the content of the <link> tag
105
+ old_absolute_urls = @absolute_urls
106
+ @absolute_urls = true
107
+
108
+ template_after_items = <<-END_OF_AFTER_ITEMS_XML
83
109
  </channel>
84
110
  </rss>
85
111
  END_OF_AFTER_ITEMS_XML
86
-
87
- items = ""
88
-
89
- changes.each do |page|
90
- items = items + <<-END_OF_ITEMS
112
+
113
+ items = ""
114
+
115
+ changes.each do |page|
116
+ items = items + <<-END_OF_ITEMS
91
117
  <item>
92
118
  <title>#{CGI::escapeHTML(page.name)}</title>
93
119
  <author>#{page.alias}</author>
94
120
  <pubDate>#{@config.blog_style ? page.created_on.strftime("%d %B %Y %H:%M GMT") : page.lastmodified.strftime("%d %B %Y %H:%M GMT")}</pubDate>
95
121
  <link>#{absolute_url_of_topic(page.filename)}</link>
96
- <guid isPermaLink="true">#{@web.name}/#{page.filename}</guid>
97
- <description><![CDATA[#{format_page(page.content).strip}]]></description>
98
- </item>
122
+ <guid isPermaLink="true">#{absolute_url_of_topic(page.filename)}</guid>
99
123
  END_OF_ITEMS
100
- end
101
-
102
- template = template + items + template_after_items
103
-
104
- # We're using hard coded GMT, because %Z returns something strange
105
- time = Time.new.gmtime.strftime("%d %B %Y %H:%M GMT")
106
- template.gsub!(/\$DATE\$/, time)
107
- template = splice_web_values(template)
108
-
109
- @absolute_urls = old_absolute_urls
110
- return template
124
+
125
+ if !Page.is_dynamic?(page.filename) then
126
+ items += "<description><![CDATA[#{format_page(page.content).strip}]]></description>\n"
127
+ end
128
+ items += "</item>\n"
129
+
130
+ end
131
+
132
+ template = template + items + template_after_items
133
+
134
+ # We're using hard coded GMT, because %Z returns something strange
135
+ time = Time.new.gmtime.strftime("%d %B %Y %H:%M GMT")
136
+ template.gsub!(/\$DATE\$/, time)
137
+ template = splice_web_values(template)
138
+
139
+ @absolute_urls = old_absolute_urls
140
+ return template
111
141
  end
112
142
 
113
143
  def generate_rss_from_log(log)
@@ -143,7 +173,7 @@ END_OF_HEADER
143
173
  <link>#{File.join(@web.base_url,'scripts/secure/admin/show_log')}</link>
144
174
  <author>Wiki2Go</author>
145
175
  <pubDate>#{parse_log_date(datetime).strftime("%d %B %Y %H:%M GMT")}</pubDate>
146
- <description><![CDATA[#{message}]]></description>
176
+ <description><![CDATA[#{CGI::escapeHTML(message)}]]></description>
147
177
  </item>
148
178
  END_OF_ITEMS
149
179
  end