Wiki2Go 1.14.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.
- data/bin/Wiki2GoServer.rb +11 -0
- data/bin/Wiki2Go_make_site.rb +10 -0
- data/bin/Wiki2Go_make_wiki.rb +10 -0
- data/bin/Wiki2Go_update_site.rb +10 -0
- data/lib/Web2Go/CGIRequest.rb +99 -0
- data/lib/Web2Go/CGIResponse.rb +64 -0
- data/lib/Web2Go/ERB_Interpreter.rb +47 -0
- data/lib/Web2Go/MockCookie.rb +17 -0
- data/lib/Web2Go/MockRequest.rb +131 -0
- data/lib/Web2Go/MockResponse.rb +35 -0
- data/lib/Web2Go/Web2Go.rb +0 -0
- data/lib/Web2Go/WebrickRequest.rb +124 -0
- data/lib/Web2Go/WebrickResponse.rb +50 -0
- data/lib/Wiki2Go.rb +2 -0
- data/lib/Wiki2Go/BlackList.rb +52 -0
- data/lib/Wiki2Go/DotGraphics.rb +69 -0
- data/lib/Wiki2Go/FileStorage.rb +267 -0
- data/lib/Wiki2Go/GreyList.rb +88 -0
- data/lib/Wiki2Go/Install/config/chonqed_blacklist.txt +4743 -0
- data/lib/Wiki2Go/Install/config/passwords +1 -0
- data/lib/Wiki2Go/Install/make_site.rb +515 -0
- data/lib/Wiki2Go/Install/site/error.html +77 -0
- data/lib/Wiki2Go/Install/site/html/admin.css +135 -0
- data/lib/Wiki2Go/Install/site/html/xml.gif +0 -0
- data/lib/Wiki2Go/Install/site/robots.txt +13 -0
- data/lib/Wiki2Go/Install/site/style.css +135 -0
- data/lib/Wiki2Go/Install/templates/admin.htm +48 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/admin.txt +1 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/greylist.txt +72 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/passwords.txt +67 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/regenerate.txt +26 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/removespam.txt +19 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/update.txt +13 -0
- data/lib/Wiki2Go/Install/templates/edit.htm +74 -0
- data/lib/Wiki2Go/Install/templates/pagelist.htm +82 -0
- data/lib/Wiki2Go/Install/templates/rss.xml +11 -0
- data/lib/Wiki2Go/Install/templates/versionlist.htm +84 -0
- data/lib/Wiki2Go/Install/templates/view.htm +72 -0
- data/lib/Wiki2Go/Install/wiki/style.css +135 -0
- data/lib/Wiki2Go/Page.rb +69 -0
- data/lib/Wiki2Go/PrivateWikiConfig.rb +27 -0
- data/lib/Wiki2Go/PublicWikiConfig.rb +52 -0
- data/lib/Wiki2Go/ReadWriteWikiConfig.rb +23 -0
- data/lib/Wiki2Go/Server.rb +94 -0
- data/lib/Wiki2Go/SpamFilter.rb +95 -0
- data/lib/Wiki2Go/UrlFinder.rb +26 -0
- data/lib/Wiki2Go/Web.rb +185 -0
- data/lib/Wiki2Go/WebrickServlet.rb +211 -0
- data/lib/Wiki2Go/WhiteList.rb +29 -0
- data/lib/Wiki2Go/Wiki2Go.rb +274 -0
- data/lib/Wiki2Go/Wiki2GoConfig.rb +144 -0
- data/lib/Wiki2Go/Wiki2GoServlet.rb +197 -0
- data/lib/Wiki2Go/WikiFormatter.rb +597 -0
- data/lib/Wiki2Go/WikiLogFile.rb +43 -0
- data/lib/Wiki2Go/cgi/changes.rb +20 -0
- data/lib/Wiki2Go/cgi/display.rb +20 -0
- data/lib/Wiki2Go/cgi/edit.rb +20 -0
- data/lib/Wiki2Go/cgi/redirect.rb +20 -0
- data/lib/Wiki2Go/cgi/save.rb +20 -0
- data/lib/Wiki2Go/cgi/search.rb +20 -0
- data/lib/Wiki2Go/cgi/secure/admin.rb +20 -0
- data/lib/Wiki2Go/cgi/secure/generate_static.rb +20 -0
- data/lib/Wiki2Go/cgi/secure/removespam.rb +20 -0
- data/lib/Wiki2Go/cgi/upload.rb +20 -0
- data/lib/Wiki2Go/cgi/versions.rb +20 -0
- data/lib/Wiki2Go/cgi/view.rb +20 -0
- metadata +113 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Wiki2Go
|
|
2
|
+
|
|
3
|
+
class UrlFinder
|
|
4
|
+
def old_number_of_urls_in( content )
|
|
5
|
+
counter = 0
|
|
6
|
+
content.scan( /((http|ftp|gopher|news|https)\:\/\/((\w|\/|\.|_|-|\?|\=|&|;|\~)+))/ ) {
|
|
7
|
+
puts $1 + " => " + $3
|
|
8
|
+
counter+=1
|
|
9
|
+
}
|
|
10
|
+
return counter
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def number_of_urls_in(content)
|
|
14
|
+
urls_in(content).size
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def urls_in( content )
|
|
18
|
+
urls = []
|
|
19
|
+
content.scan( /((http|ftp|gopher|news|https)\:\/\/((\w|\/|\.|_|-|\?|\=|&|;|\~)+))/ ) {
|
|
20
|
+
urls << $1
|
|
21
|
+
}
|
|
22
|
+
urls
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
data/lib/Wiki2Go/Web.rb
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
require "uri"
|
|
4
|
+
require "resolv"
|
|
5
|
+
|
|
6
|
+
module Wiki2Go
|
|
7
|
+
|
|
8
|
+
# A Wiki2Go::Web object contains all the information about the (sub)wiki we're working in
|
|
9
|
+
# The different fields are to be filled in by the webserver interface (Webrick or CGI or...)
|
|
10
|
+
|
|
11
|
+
class Web
|
|
12
|
+
# The name of the subwiki
|
|
13
|
+
attr_reader :name
|
|
14
|
+
# The page of the subwiki
|
|
15
|
+
attr_accessor :current_page
|
|
16
|
+
# The 'verb' (action) that was executed
|
|
17
|
+
attr_reader :verb
|
|
18
|
+
# URL to be used as the base for all URLs
|
|
19
|
+
attr_reader :server
|
|
20
|
+
attr_reader :port
|
|
21
|
+
# extension for scripts
|
|
22
|
+
attr_reader :script_extension
|
|
23
|
+
# directory containing scripts
|
|
24
|
+
attr_reader :script_prefix
|
|
25
|
+
|
|
26
|
+
MARKER = "#-#"
|
|
27
|
+
|
|
28
|
+
def initialize(server,port,before,verb,web,page,request=nil)
|
|
29
|
+
@name = Web.clean(web)
|
|
30
|
+
@current_page = Web.clean(page)
|
|
31
|
+
@server = server
|
|
32
|
+
@port = port
|
|
33
|
+
|
|
34
|
+
@verb = verb
|
|
35
|
+
@script_extension = Web.extension_of(verb)
|
|
36
|
+
@script_prefix = Web.clean(before)
|
|
37
|
+
|
|
38
|
+
@request = request
|
|
39
|
+
@alias = nil
|
|
40
|
+
@title = nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def user
|
|
44
|
+
@request.nil? ? 'unknown' : @request.user
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def secure
|
|
48
|
+
@request.nil? ? false : @request.authenticated
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def alias=(name)
|
|
52
|
+
@alias = name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def alias
|
|
56
|
+
@alias || user
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def title=(name)
|
|
60
|
+
@title = name
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def title
|
|
64
|
+
@title || @current_page
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def base_url
|
|
68
|
+
if @port.nil? || @port.to_s.empty? || @port.to_s == "80" then
|
|
69
|
+
url = "http://#{@server}/"
|
|
70
|
+
elsif port.to_s == "443" then
|
|
71
|
+
url = "https://#{@server}/"
|
|
72
|
+
else
|
|
73
|
+
url = "http://#{@server}:#{@port}/"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def path
|
|
78
|
+
if @name.empty? then
|
|
79
|
+
@current_page
|
|
80
|
+
else
|
|
81
|
+
File.join(@name,@current_page)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def Web.page_url(server,port,url,verb,multiwiki=true)
|
|
86
|
+
before,verb,web,page = Web.parse_url(url,verb,multiwiki)
|
|
87
|
+
if !web.nil? && !page.nil? then
|
|
88
|
+
return Web.new(server,port,before,verb,web,page)
|
|
89
|
+
else
|
|
90
|
+
return Web.new(server,port,before,verb,"Wiki2go","Frontpage")
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def Web.from_page_url(url,verb)
|
|
95
|
+
uri = URI::parse(url)
|
|
96
|
+
return Web.page_url(uri.host,uri.port,uri.path,verb)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def Web.from_request(request,multiwiki)
|
|
101
|
+
server = request.host
|
|
102
|
+
port = request.port
|
|
103
|
+
before,verb = Web.parse_scriptpath(request.server_variable['SCRIPT_NAME'])
|
|
104
|
+
web,page = Web.parse_path(request.path,multiwiki)
|
|
105
|
+
web = Web.new(server,port,before,verb,web,page,request)
|
|
106
|
+
return web
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def Web.extension_of(verb)
|
|
110
|
+
verb =~ /(\.[^\.]*)$/
|
|
111
|
+
return ($1.nil? ? "" : $1)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def read_env(env)
|
|
115
|
+
@secure = env.has_key?("AUTH_TYPE")
|
|
116
|
+
|
|
117
|
+
user = env['REMOTE_USER']
|
|
118
|
+
if user.nil? or user.empty? then
|
|
119
|
+
user = env['REMOTE_ADDR']
|
|
120
|
+
begin
|
|
121
|
+
# addr = Resolv.getname(user)
|
|
122
|
+
if !addr.nil? and !addr.empty? then
|
|
123
|
+
user = addr
|
|
124
|
+
end
|
|
125
|
+
rescue
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
@user = user
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
private
|
|
133
|
+
|
|
134
|
+
def Web.parse_url(path,verb,multiwiki)
|
|
135
|
+
scriptprefix , webpath = path.split(verb)
|
|
136
|
+
web, name = parse_path(webpath,multiwiki)
|
|
137
|
+
return scriptprefix , verb, web, name
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def Web.parse_path(path,multi_wiki=true)
|
|
141
|
+
path = Web.clean(path)
|
|
142
|
+
if multi_wiki then
|
|
143
|
+
Web.separate_subwiki_and_page(path)
|
|
144
|
+
else
|
|
145
|
+
return "",path
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def Web.separate_subwiki_and_page(path)
|
|
150
|
+
if path =~ /\// then
|
|
151
|
+
path =~ /^([^\/]+)\/(.*)$/
|
|
152
|
+
return $1,$2
|
|
153
|
+
else
|
|
154
|
+
return path,""
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def Web.parse_scriptpath(path)
|
|
159
|
+
if path =~ /\// then
|
|
160
|
+
path =~ /^(.*)(\/+)([^\/]*)$/
|
|
161
|
+
return $1,$3
|
|
162
|
+
else
|
|
163
|
+
return "",path
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def Web.parse_host(host)
|
|
168
|
+
host =~ /^([^:]*)\:?(.*)$/
|
|
169
|
+
|
|
170
|
+
return $1,$2
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def Web.clean(path)
|
|
174
|
+
if path.nil? then
|
|
175
|
+
return ""
|
|
176
|
+
else
|
|
177
|
+
return path.squeeze('/').gsub(/^\//,'').gsub(/\/$/,'')
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
end
|
|
185
|
+
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
require 'webrick'
|
|
2
|
+
require 'webrick/httpservlet/filehandler'
|
|
3
|
+
require 'webrick/httpstatus'
|
|
4
|
+
require 'webrick/cgi'
|
|
5
|
+
include WEBrick
|
|
6
|
+
|
|
7
|
+
require "Wiki2Go/Web"
|
|
8
|
+
require "Wiki2Go/Wiki2Go"
|
|
9
|
+
|
|
10
|
+
require 'Web2Go/WebrickRequest'
|
|
11
|
+
require 'Web2Go/WebrickResponse'
|
|
12
|
+
require 'Wiki2Go/Wiki2GoServlet'
|
|
13
|
+
|
|
14
|
+
class WikiServlet < HTTPServlet::AbstractServlet
|
|
15
|
+
|
|
16
|
+
def initialize(server,config)
|
|
17
|
+
super(server)
|
|
18
|
+
@server = server
|
|
19
|
+
@config = config
|
|
20
|
+
@file_servlet = WEBrick::HTTPServlet::FileHandler.new(@server,@config.site_directory)
|
|
21
|
+
@servlet = Wiki2Go::Servlet.new(config)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def do_GET(req, res)
|
|
25
|
+
request = Web2Go::WebrickRequest.new(req)
|
|
26
|
+
response = Web2Go::WebrickResponse.new(res)
|
|
27
|
+
if !@servlet.execute(request,response) then
|
|
28
|
+
@file_servlet.do_GET(req,res)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def do_POST(req, res)
|
|
33
|
+
request = Web2Go::WebrickRequest.new(req)
|
|
34
|
+
response = Web2Go::WebrickResponse.new(res)
|
|
35
|
+
if !@servlet.execute(request,response) then
|
|
36
|
+
@file_servlet.do_GET(req,res)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def perform_save(req,res,wikiweb)
|
|
43
|
+
|
|
44
|
+
content = get_parameter(req,'text')
|
|
45
|
+
name = get_parameter(req,'title') || wikiweb.current_page
|
|
46
|
+
|
|
47
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
48
|
+
wiki.title = name
|
|
49
|
+
|
|
50
|
+
redirect_to = wiki.save(wikiweb,content)
|
|
51
|
+
res.body = "Redirect to #{redirect_to}"
|
|
52
|
+
res['Content-Type'] = "text/html"
|
|
53
|
+
res.set_redirect(WEBrick::HTTPStatus[300],redirect_to)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def perform_removespam(req,res,wikiweb)
|
|
57
|
+
|
|
58
|
+
user = get_parameter(req,'user')
|
|
59
|
+
|
|
60
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
61
|
+
|
|
62
|
+
if !user.nil? && !user.empty? then
|
|
63
|
+
wiki.blacklist(user)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
res.body = wiki.remove_spam(wikiweb)
|
|
67
|
+
res['Content-Type'] = "text/html"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def perform_upload(req,res,wikiweb)
|
|
71
|
+
|
|
72
|
+
uploaded_file = req.query['FILE']
|
|
73
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
74
|
+
|
|
75
|
+
res.body = wiki.upload(wikiweb,uploaded_file.filename,uploaded_file.list[0])
|
|
76
|
+
res['Content-Type'] = "text/html"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def perform_view(req,res,wikiweb)
|
|
80
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
81
|
+
|
|
82
|
+
res.body = wiki.view(wikiweb)
|
|
83
|
+
res['Content-Type'] = "text/html"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def perform_versions(req,res,wikiweb)
|
|
87
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
88
|
+
|
|
89
|
+
res.body = wiki.versions(wikiweb)
|
|
90
|
+
res['Content-Type'] = "text/html"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def perform_changes(req,res,wikiweb)
|
|
94
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
95
|
+
|
|
96
|
+
res.body = wiki.changes(wikiweb)
|
|
97
|
+
res['Content-Type'] = "text/html"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def perform_search(req,res,wikiweb)
|
|
101
|
+
topic = get_parameter(req,'text')
|
|
102
|
+
|
|
103
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
104
|
+
|
|
105
|
+
res.body = wiki.search(wikiweb,topic)
|
|
106
|
+
res['Content-Type'] = "text/html"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def perform_redirect(req,res,wikiweb)
|
|
110
|
+
redirect_to = get_parameter(req,'url')
|
|
111
|
+
|
|
112
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
113
|
+
|
|
114
|
+
res.body = "Redirect to #{redirect_to}"
|
|
115
|
+
res['Content-Type'] = "text/html"
|
|
116
|
+
res.set_redirect(WEBrick::HTTPStatus[300],redirect_to)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def perform_generate_static(req,res,wikiweb)
|
|
120
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
121
|
+
|
|
122
|
+
res.body = wiki.generate_html(wikiweb)
|
|
123
|
+
res['Content-Type'] = "text/html"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def perform_edit(req,res,wikiweb)
|
|
128
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
129
|
+
|
|
130
|
+
res.body = wiki.edit(wikiweb)
|
|
131
|
+
res['Content-Type'] = "text/html"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def perform_stop(req,res,wikiweb)
|
|
135
|
+
res.body = "<HTML>STOPPING...</HTML>"
|
|
136
|
+
res['Content-Type'] = "text/html"
|
|
137
|
+
@server.shutdown
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def perform_admin(req,res,wikiweb)
|
|
141
|
+
request = Web2Go::WebrickRequest.new(req)
|
|
142
|
+
wiki = Wiki2Go::Wiki.new(@config)
|
|
143
|
+
result = wiki.admin(request)
|
|
144
|
+
|
|
145
|
+
res.body = result
|
|
146
|
+
res['Content-Type'] = "text/html"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def perform_unknown_verb(req,res,wikiweb)
|
|
150
|
+
res.body = "<HTML><BODY>Unknown command #{wikiweb.verb}</BODY></HTML>"
|
|
151
|
+
res['Content-Type'] = "text/html"
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
private
|
|
155
|
+
|
|
156
|
+
def get_parameter(req,name)
|
|
157
|
+
form = WEBrick::HTTPUtils::parse_query(req.body)
|
|
158
|
+
value = form[name]
|
|
159
|
+
if value.nil? || value.empty? then
|
|
160
|
+
form = WEBrick::HTTPUtils::parse_query(req.query_string)
|
|
161
|
+
value = form[name]
|
|
162
|
+
end
|
|
163
|
+
value
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def execute_command(req,res)
|
|
167
|
+
if req.path =~ /\/([^\/\?]*)(\/|\?|$)/ then
|
|
168
|
+
command = $1
|
|
169
|
+
method = 'perform_' + command
|
|
170
|
+
if self.private_methods.include?(method) then
|
|
171
|
+
wikiweb = Wiki2Go::Web.page_url(req.host,req.port,req.path,command,@config.multi_wiki)
|
|
172
|
+
find_user(req,wikiweb)
|
|
173
|
+
return self.send(method,req,res,wikiweb)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
execute_default_command(req,res)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def execute_default_command(req,res)
|
|
180
|
+
if req.path == "" or req.path == "/" then
|
|
181
|
+
wikiweb = @config.default_wiki
|
|
182
|
+
perform_view(req,res,wikiweb)
|
|
183
|
+
else
|
|
184
|
+
@file_servlet.do_GET(req,res)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def execute_default_command(req,res)
|
|
189
|
+
if req.path == "" or req.path == "/" then
|
|
190
|
+
wikiweb = @config.default_wiki
|
|
191
|
+
perform_view(req,res,wikiweb)
|
|
192
|
+
else
|
|
193
|
+
@file_servlet.do_GET(req,res)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def find_user(req,wikiweb)
|
|
198
|
+
user = ENV['USER'] || ENV['USERNAME']
|
|
199
|
+
if user.nil? or user.length == 0 then
|
|
200
|
+
user = req.peeraddr[2]
|
|
201
|
+
if user.nil? or user.length == 0 then
|
|
202
|
+
user = req.peeraddr[3]
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
wikiweb.user = user
|
|
207
|
+
wikiweb.secure = true
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
module Wiki2Go
|
|
3
|
+
|
|
4
|
+
class WhiteList
|
|
5
|
+
|
|
6
|
+
def initialize(items)
|
|
7
|
+
@allowed = items.collect {|line| line.chomp }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def all
|
|
11
|
+
return @allowed
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add(item)
|
|
15
|
+
@allowed << item
|
|
16
|
+
@allowed = @allowed.sort.uniq
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def length
|
|
20
|
+
return @allowed.length
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def contains(url)
|
|
24
|
+
match = @allowed.find { |allowed| url =~ Regexp.new(allowed) }
|
|
25
|
+
! match.nil?
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|