Wiki2Go 1.17.5 → 1.22.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/Wiki2Go_firewall_blacklist.rb +8 -0
- data/bin/Wiki2Go_make_cvs_repository.rb +1 -0
- data/bin/Wiki2Go_make_site.rb +1 -2
- data/bin/Wiki2Go_update_site.rb +1 -2
- data/lib/Web2Go/CGIRequest.rb +8 -2
- data/lib/Web2Go/CGIResponse.rb +17 -14
- data/lib/Web2Go/MockRequest.rb +12 -2
- data/lib/Web2Go/MockResponse.rb +10 -7
- data/lib/Web2Go/WebrickRequest.rb +106 -101
- data/lib/Web2Go/WebrickResponse.rb +4 -8
- data/lib/Wiki2Go/BlackList.rb +48 -25
- data/lib/Wiki2Go/DotGraphics.rb +1 -1
- data/lib/Wiki2Go/FileStorage.rb +266 -266
- data/lib/Wiki2Go/HTMLFormatter.rb +28 -0
- data/lib/Wiki2Go/Install/config/chonqed_blacklist.txt +418 -0
- data/lib/Wiki2Go/Install/config/passwords +1 -1
- data/lib/Wiki2Go/Install/config/url_blacklist.txt +3855 -0
- data/lib/Wiki2Go/Install/make_repository.rb +32 -26
- data/lib/Wiki2Go/Install/make_site.rb +197 -111
- data/lib/Wiki2Go/Install/site/error.html +1 -1
- data/lib/Wiki2Go/Install/site/robots.txt +10 -1
- data/lib/Wiki2Go/Install/site/style.css +129 -64
- data/lib/Wiki2Go/Install/templates/admin.htm +1 -1
- data/lib/Wiki2Go/Install/templates/admin_pages/edit.txt +2 -1
- data/lib/Wiki2Go/Install/templates/admin_pages/format_for_fck.txt +31 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/passwords.txt +1 -1
- data/lib/Wiki2Go/Install/templates/edit.htm +62 -46
- data/lib/Wiki2Go/Install/templates/full_footer.htm +31 -33
- data/lib/Wiki2Go/Install/templates/header.htm +0 -1
- data/lib/Wiki2Go/Install/templates/menu.htm +29 -0
- data/lib/Wiki2Go/Install/templates/pagelist.htm +46 -43
- data/lib/Wiki2Go/Install/templates/simple_footer.htm +20 -16
- data/lib/Wiki2Go/Install/templates/versionlist.htm +52 -40
- data/lib/Wiki2Go/Install/templates/view.htm +46 -29
- data/lib/Wiki2Go/Install/templates/wikiedit.htm +63 -0
- data/lib/Wiki2Go/Install/wiki/delete.png +0 -0
- data/lib/Wiki2Go/Install/wiki/style.css +133 -63
- data/lib/Wiki2Go/LineFormatter.rb +345 -197
- data/lib/Wiki2Go/Page.rb +16 -3
- data/lib/Wiki2Go/PrivateWikiConfig.rb +5 -5
- data/lib/Wiki2Go/PublicWikiConfig.rb +83 -37
- data/lib/Wiki2Go/ReadWriteWikiConfig.rb +8 -8
- data/lib/Wiki2Go/Server.rb +6 -1
- data/lib/Wiki2Go/SpamFilter.rb +32 -41
- data/lib/Wiki2Go/Web.rb +10 -3
- data/lib/Wiki2Go/Wiki2Go.rb +301 -94
- data/lib/Wiki2Go/Wiki2GoConfig.rb +87 -6
- data/lib/Wiki2Go/Wiki2GoServlet.rb +66 -12
- data/lib/Wiki2Go/WikiFormatter.rb +60 -30
- data/lib/Wiki2Go/cgi/diff.rb +20 -0
- data/lib/Wiki2Go/cgi/secure/log_rss.rb +21 -0
- data/lib/Wiki2Go/cgi/sidebyside.rb +20 -0
- data/lib/Wiki2Go/cgi/wikiedit.rb +20 -0
- data/lib/Wiki2Go/firewall_blacklist.rb +88 -0
- data/test/All.rb +5 -2
- data/test/TestBlackList.rb +70 -14
- data/test/TestConfig.rb +5 -5
- data/test/TestDiff.rb +95 -0
- data/test/TestFormatter.rb +14 -16
- data/test/TestHTMLFormatter.rb +37 -0
- data/test/TestInstall.rb +70 -27
- data/test/TestLineFormatter.rb +71 -15
- data/test/TestRSS.rb +8 -7
- data/test/TestRepository.rb +50 -0
- data/test/TestServer.rb +3 -8
- data/test/TestSpamFilter.rb +33 -1
- data/test/TestStorage.rb +11 -0
- data/test/TestWeb.rb +2 -2
- data/test/TestWiki2Go.rb +766 -166
- data/test/TestWiki2GoServlet.rb +1122 -524
- data/test/UnitTestFiles.rb +7 -3
- data/test/Wiki2GoConfigForTest.rb +40 -6
- data/test/checksite.rb +17 -50
- data/test/test_firewall_blacklist.rb +131 -0
- data/test/test_page.rb +45 -0
- data/test/testdata/Registration.rbl.txt +7 -0
- data/test/testdata/config/url_blacklist.txt +38822 -0
- data/test/testdata/expected_changes.html +1 -2
- data/test/testdata/expected_edit.html +108 -59
- data/test/testdata/expected_full_rss.xml +2 -2
- data/test/testdata/expected_out.html +97 -61
- data/test/testdata/expected_put.html +88 -53
- data/test/testdata/expected_save.html +88 -52
- data/test/testdata/expected_savehtml.html +88 -52
- data/test/testdata/expected_search.html +68 -53
- data/test/testdata/expected_upload.html +88 -53
- data/test/testdata/expected_versions.html +97 -82
- data/test/testdata/expected_view.html +97 -61
- data/test/testdata/firewall/iptables.config +37 -0
- data/test/testdata/firewall/user_blacklist.txt +162 -0
- data/test/testdata/logs/wiki.log +652 -0
- data/test/testdata/logs/wiki.log.0 +113 -0
- data/test/testdata/logs/wiki.log.1 +113 -0
- data/test/testdata/logs/wiki.log.2 +113 -0
- data/test/testdata/logs/wiki.log.3 +115 -0
- data/test/testdata/logs/wiki.log.4 +5 -0
- data/test/testdata/logs/wiki.log.5 +7 -0
- data/test/testdata/logs/wiki.log.6 +5 -0
- data/test/testdata/logs/wiki.log.7 +118 -0
- data/test/testdata/logs/wiki.log.8 +12 -0
- data/test/testdata/site/html/Xpday/rss.xml +53 -103
- data/test/testdata/texts/Bugs/FrontPage.txt +6 -0
- data/test/testdata/texts/Bugs/NoHidden.spam +17850 -0
- data/test/testdata/texts/Bugs/PairProgrammingParties.spam +102 -0
- data/test/testdata/texts/Bugs/PairProgrammingParties.txt +99 -0
- metadata +53 -7
- data/test/TestMail.rb +0 -29
- 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,
|
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,
|
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 &&
|
28
|
-
res.body = wiki.perform(
|
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(
|
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
|
-
|
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 =
|
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 =
|
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
|
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
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
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">#{
|
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
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|