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.
Files changed (67) hide show
  1. data/bin/Wiki2GoServer.rb +11 -0
  2. data/bin/Wiki2Go_make_site.rb +10 -0
  3. data/bin/Wiki2Go_make_wiki.rb +10 -0
  4. data/bin/Wiki2Go_update_site.rb +10 -0
  5. data/lib/Web2Go/CGIRequest.rb +99 -0
  6. data/lib/Web2Go/CGIResponse.rb +64 -0
  7. data/lib/Web2Go/ERB_Interpreter.rb +47 -0
  8. data/lib/Web2Go/MockCookie.rb +17 -0
  9. data/lib/Web2Go/MockRequest.rb +131 -0
  10. data/lib/Web2Go/MockResponse.rb +35 -0
  11. data/lib/Web2Go/Web2Go.rb +0 -0
  12. data/lib/Web2Go/WebrickRequest.rb +124 -0
  13. data/lib/Web2Go/WebrickResponse.rb +50 -0
  14. data/lib/Wiki2Go.rb +2 -0
  15. data/lib/Wiki2Go/BlackList.rb +52 -0
  16. data/lib/Wiki2Go/DotGraphics.rb +69 -0
  17. data/lib/Wiki2Go/FileStorage.rb +267 -0
  18. data/lib/Wiki2Go/GreyList.rb +88 -0
  19. data/lib/Wiki2Go/Install/config/chonqed_blacklist.txt +4743 -0
  20. data/lib/Wiki2Go/Install/config/passwords +1 -0
  21. data/lib/Wiki2Go/Install/make_site.rb +515 -0
  22. data/lib/Wiki2Go/Install/site/error.html +77 -0
  23. data/lib/Wiki2Go/Install/site/html/admin.css +135 -0
  24. data/lib/Wiki2Go/Install/site/html/xml.gif +0 -0
  25. data/lib/Wiki2Go/Install/site/robots.txt +13 -0
  26. data/lib/Wiki2Go/Install/site/style.css +135 -0
  27. data/lib/Wiki2Go/Install/templates/admin.htm +48 -0
  28. data/lib/Wiki2Go/Install/templates/admin_pages/admin.txt +1 -0
  29. data/lib/Wiki2Go/Install/templates/admin_pages/greylist.txt +72 -0
  30. data/lib/Wiki2Go/Install/templates/admin_pages/passwords.txt +67 -0
  31. data/lib/Wiki2Go/Install/templates/admin_pages/regenerate.txt +26 -0
  32. data/lib/Wiki2Go/Install/templates/admin_pages/removespam.txt +19 -0
  33. data/lib/Wiki2Go/Install/templates/admin_pages/update.txt +13 -0
  34. data/lib/Wiki2Go/Install/templates/edit.htm +74 -0
  35. data/lib/Wiki2Go/Install/templates/pagelist.htm +82 -0
  36. data/lib/Wiki2Go/Install/templates/rss.xml +11 -0
  37. data/lib/Wiki2Go/Install/templates/versionlist.htm +84 -0
  38. data/lib/Wiki2Go/Install/templates/view.htm +72 -0
  39. data/lib/Wiki2Go/Install/wiki/style.css +135 -0
  40. data/lib/Wiki2Go/Page.rb +69 -0
  41. data/lib/Wiki2Go/PrivateWikiConfig.rb +27 -0
  42. data/lib/Wiki2Go/PublicWikiConfig.rb +52 -0
  43. data/lib/Wiki2Go/ReadWriteWikiConfig.rb +23 -0
  44. data/lib/Wiki2Go/Server.rb +94 -0
  45. data/lib/Wiki2Go/SpamFilter.rb +95 -0
  46. data/lib/Wiki2Go/UrlFinder.rb +26 -0
  47. data/lib/Wiki2Go/Web.rb +185 -0
  48. data/lib/Wiki2Go/WebrickServlet.rb +211 -0
  49. data/lib/Wiki2Go/WhiteList.rb +29 -0
  50. data/lib/Wiki2Go/Wiki2Go.rb +274 -0
  51. data/lib/Wiki2Go/Wiki2GoConfig.rb +144 -0
  52. data/lib/Wiki2Go/Wiki2GoServlet.rb +197 -0
  53. data/lib/Wiki2Go/WikiFormatter.rb +597 -0
  54. data/lib/Wiki2Go/WikiLogFile.rb +43 -0
  55. data/lib/Wiki2Go/cgi/changes.rb +20 -0
  56. data/lib/Wiki2Go/cgi/display.rb +20 -0
  57. data/lib/Wiki2Go/cgi/edit.rb +20 -0
  58. data/lib/Wiki2Go/cgi/redirect.rb +20 -0
  59. data/lib/Wiki2Go/cgi/save.rb +20 -0
  60. data/lib/Wiki2Go/cgi/search.rb +20 -0
  61. data/lib/Wiki2Go/cgi/secure/admin.rb +20 -0
  62. data/lib/Wiki2Go/cgi/secure/generate_static.rb +20 -0
  63. data/lib/Wiki2Go/cgi/secure/removespam.rb +20 -0
  64. data/lib/Wiki2Go/cgi/upload.rb +20 -0
  65. data/lib/Wiki2Go/cgi/versions.rb +20 -0
  66. data/lib/Wiki2Go/cgi/view.rb +20 -0
  67. 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
@@ -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