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,135 @@
1
+ body
2
+ {
3
+ margin-top: 10px;
4
+ margin-left: 2em ;
5
+ margin-right: 2em ;
6
+ font-size: 11pt;
7
+ color: black;
8
+ font-family: verdana, helvetica, arial, sans-serif, sans;
9
+ background-color: #f1f1f1;
10
+ text-align: justify;
11
+ }
12
+
13
+ ul
14
+ {
15
+ margin-left:0.5em;
16
+ padding-top : 0.5em ;
17
+ padding-left : 0em ;
18
+ padding-right : 0em ;
19
+ padding-bottom : 0.5em ;
20
+ margin-right:1em
21
+ }
22
+
23
+ li
24
+ {
25
+ margin-left:0.5em;
26
+ margin-right:1em ;
27
+ padding : 0em 0em 0em 0em ;
28
+ }
29
+
30
+ h1
31
+ {
32
+ font-weight: bold;
33
+ font-size: 28pt;
34
+ color: black;
35
+ margin : 0em ;
36
+ }
37
+
38
+ h2,h3,h4,h5,h6
39
+ {
40
+ color:black
41
+ }
42
+
43
+ h2,h3.frontpage {
44
+ text-align: center ;
45
+ }
46
+
47
+ table.Header
48
+ {
49
+ padding-right: 0.1em;
50
+ padding-left: 0.5em;
51
+ padding-bottom: 0.1em;
52
+ padding-top: 0em;
53
+ color: black;
54
+ background-color: white;
55
+ text-align: left;
56
+ border-bottom: 1px solid #ccc;
57
+ }
58
+
59
+ table.Footer
60
+ {
61
+
62
+ clear: both;
63
+ margin: 100px 0 0 0;
64
+ padding: 6px;
65
+ color: #000;
66
+ background: #fff;
67
+ border-top: 1px solid #ccc;
68
+ }
69
+
70
+ hr {
71
+ color: #ccc;
72
+ }
73
+
74
+ table.Body
75
+ {
76
+ text-align: left;
77
+ }
78
+
79
+ td[class=search] {
80
+ text-align: right;
81
+ }
82
+
83
+ a:link
84
+ {
85
+ color: #a50a11;
86
+ font-weight: bolder ;
87
+ text-decoration: none;
88
+ }
89
+
90
+ a:visited {
91
+ color: #a50a11;
92
+ text-decoration: none;
93
+ font-weight: normal ;
94
+ }
95
+
96
+ a:hover {
97
+ text-decoration: underline;
98
+ }
99
+
100
+ #container {
101
+ width: 800px;
102
+ margin: 0;
103
+ margin-left: auto;
104
+ margin-right: auto;
105
+ margin-bottom: 40px;
106
+ margin-top: 5px;
107
+ padding-left: 15px;
108
+ padding-right: 15px;
109
+ padding-top: 5px;
110
+ padding-bottom: 5px;
111
+ background: #fff;
112
+ border-left: 1px solid #ccc;
113
+ border-right: 1px solid #ccc;
114
+ border-top: 1px solid #ccc;
115
+ border-bottom: 1px solid #ccc;
116
+ }
117
+
118
+ table.topiclist
119
+ {
120
+ width: 100%;
121
+ }
122
+
123
+ table.topiclist tr.date
124
+ {
125
+ font-weight: bold;
126
+ }
127
+
128
+ table.topiclist tr.odd
129
+ {
130
+ background-color: #ffffcc;
131
+ }
132
+
133
+ table.topiclist tr.even
134
+ {
135
+ }
@@ -0,0 +1,69 @@
1
+ module Wiki2Go
2
+
3
+ class Page
4
+
5
+ attr_reader :title
6
+ attr_reader :name
7
+ attr_accessor :author
8
+ attr_reader :alias
9
+ attr_reader :lines
10
+ attr_reader :lastmodified
11
+
12
+ def initialize(title,lines, author, time,name,aliasname=nil)
13
+ @title = title
14
+ @name = name
15
+ @lines = lines
16
+ @author = author
17
+ @lastmodified = time
18
+ @alias = aliasname || author
19
+ end
20
+
21
+ def Page.make_page(title, lines,default_time)
22
+ author = "unknown"
23
+ lastmodified = default_time
24
+ name = File.basename(title)
25
+
26
+ last = lines.last
27
+ while !last.nil? and last =~ /\$([^:]+):(.*)\$/ do
28
+ keyword = $1
29
+ value = $2
30
+ case keyword
31
+ when 'AUTHOR' then author = value
32
+ when 'LASTMODIFIED' then lastmodified = Time.at(value.to_i)
33
+ when 'NAME' then name = value
34
+ when 'ALIAS' then aliasname = value
35
+ end
36
+ lines.slice!(-1)
37
+ last = lines.last
38
+ end
39
+
40
+ return Page.new(title, lines, author, lastmodified,name,aliasname)
41
+ end
42
+
43
+ def Page.make_default(title, lines, author, time)
44
+ return Page.new(title, lines, author, time,File.basename(title))
45
+ end
46
+
47
+ def write(file)
48
+ file.puts @lines
49
+ file.puts "$ALIAS:#{@alias}$" unless @alias.nil?
50
+ file.puts "$NAME:#{@name}$"
51
+ file.puts "$LASTMODIFIED:#{@lastmodified.to_i}$"
52
+ file.puts "$AUTHOR:#{@author}$"
53
+ end
54
+
55
+ def length
56
+ return @lines.length
57
+ end
58
+
59
+ def content
60
+ return @lines.join
61
+ end
62
+
63
+ def set_modified(author,date)
64
+ @author = author
65
+ @lastmodified = date
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "Wiki2Go/FileStorage.rb"
4
+ require "Wiki2Go/Wiki2GoConfig.rb"
5
+
6
+ class PrivateWikiConfig < Wiki2Go::Config
7
+
8
+ def initialize(directory)
9
+ super(directory)
10
+ @generate_html = true
11
+ end
12
+
13
+ def editable?(web)
14
+ true
15
+ end
16
+
17
+ def redirect_url?(web,url)
18
+ false
19
+ end
20
+
21
+ def redirect_to_html?(web)
22
+ @generate_html
23
+ end
24
+
25
+ end
26
+
27
+
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "Wiki2Go/FileStorage.rb"
4
+ require "Wiki2Go/Wiki2GoConfig.rb"
5
+
6
+ require 'Wiki2Go/SpamFilter'
7
+
8
+ class PublicWikiConfig < Wiki2Go::Config
9
+
10
+ def initialize(directory)
11
+ super(directory)
12
+ @generate_html = true
13
+ end
14
+
15
+ def accept_page?(web,content)
16
+
17
+ return true if web.secure
18
+
19
+ author = web.user
20
+ filter = Wiki2Go::SpamFilter.new(self)
21
+
22
+ if filter.edit_by_banned_user?(author) ||
23
+ filter.edit_contains_banned_url?(content) then
24
+
25
+ current_page = storage.load_page(web.name,web.current_page)
26
+ filter.blacklist_user_and_urls_added(author,current_page.content,content)
27
+
28
+ tarpit
29
+ false
30
+ else
31
+ current_page = storage.load_page(web.name,web.current_page)
32
+ filter.greylist_new_urls(author,current_page.content,content)
33
+ return true
34
+ end
35
+ end
36
+
37
+ def tarpit
38
+ sleep(60)
39
+ end
40
+
41
+ def editable?(web)
42
+ true
43
+ end
44
+
45
+ def redirect_url?(web,url)
46
+ return false if web.secure
47
+
48
+ greylist = storage.load_greylist
49
+ greylist.contains_url(url)
50
+ end
51
+
52
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "Wiki2Go/FileStorage.rb"
4
+ require "Wiki2Go/Wiki2GoConfig.rb"
5
+
6
+ class ReadWriteWikiConfig < Wiki2Go::Config
7
+
8
+ def initialize(directory)
9
+ super(directory)
10
+ @generate_html = true
11
+ end
12
+
13
+ def editable?(web)
14
+ web.secure
15
+ end
16
+
17
+ def redirect_url?(web,url)
18
+ false
19
+ end
20
+
21
+ end
22
+
23
+
@@ -0,0 +1,94 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ require 'webrick'
4
+ require 'webrick/httpservlet/filehandler'
5
+ require 'webrick/httpstatus'
6
+ require 'webrick/cgi'
7
+
8
+ require 'net/http'
9
+
10
+ require "Wiki2Go/WebrickServlet"
11
+ require "Wiki2Go/Wiki2GoConfig"
12
+ require "Wiki2Go/PublicWikiConfig"
13
+ require 'Wiki2Go/DotGraphics'
14
+
15
+ require 'optparse'
16
+
17
+ module Wiki2Go
18
+
19
+ class LocalConfig < PublicWikiConfig
20
+
21
+ def initialize(dir)
22
+ super(dir)
23
+ @generate_html = false
24
+ @multi_wiki = true
25
+ @debug = true
26
+ add_processor('GRAPH',Wiki2Go::DotGraphics.new('c:/Program Files/ATT/Graphviz/bin/'))
27
+ end
28
+
29
+ def redirect_url?(web,url)
30
+ result = super(web,url)
31
+ return result
32
+ end
33
+
34
+ end
35
+
36
+
37
+ class Server
38
+
39
+ def initialize(args)
40
+ puts "Args = #{args.inspect}"
41
+ opts = OptionParser.new
42
+ dir = Dir.pwd
43
+ port = 8081
44
+ wiki = 'Wiki2Go'
45
+ single = false
46
+ opts.on("-d",'--dir <directory>','(default is current directory)',String) { |val| dir = val }
47
+ opts.on("-p",'--port <nb>',"(default is port 8081)",String) { |val| port = val }
48
+ opts.on("-w",'--wiki <wikiname>',"(default is 'Wiki2Go')",String) { |val| wiki = val }
49
+ opts.on("-s","--single","Single or multi-wiki (default)") { |val|
50
+ puts "In -s option"
51
+ single = true
52
+ }
53
+ opts.on_tail("-h", "--help", "Show this message") do
54
+ puts opts
55
+ exit
56
+ end
57
+ opts.parse(args)
58
+
59
+ @config = LocalConfig.new(dir)
60
+ @config.port = port
61
+ @config.default_web = wiki
62
+ @config.generate_html = false
63
+ @config.multi_wiki = !single
64
+ puts "Multi wiki = #{@config.multi_wiki}"
65
+ end
66
+
67
+ def start
68
+ begin
69
+
70
+ yield @config if block_given?
71
+
72
+ web_thread = Thread.new(@config) do |config|
73
+ s = WEBrick::HTTPServer.new( :Port => config.port)
74
+
75
+ s.mount("/", WikiServlet,config)
76
+
77
+ trap("INT"){ s.shutdown }
78
+ s.start
79
+ end
80
+ web_thread
81
+ rescue
82
+ puts "Error during startup: #{$!}"
83
+ puts $@
84
+ end
85
+ end
86
+
87
+ def stop
88
+ Net::HTTP.start( @config.server, @config.port) { |http|
89
+ response = http.get('/stop/' + @config.default_web + '/')
90
+ page = response.body
91
+ }
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,95 @@
1
+ require 'Wiki2Go/UrlFinder'
2
+
3
+ require "uri"
4
+
5
+ module Wiki2Go
6
+ class SpamFilter
7
+
8
+ def initialize(config)
9
+ @config = config
10
+ end
11
+
12
+ def edit_by_banned_user?(author)
13
+ banned_users.contains(author)
14
+ end
15
+
16
+ def edit_contains_banned_url?(content)
17
+ banned_urls.found_in(content) || chonqed_urls.found_in(content)
18
+ end
19
+
20
+ def too_many_new_urls?(original_content, modified_content,max_new_urls)
21
+ return added_urls(original_content,modified_content).size > max_new_urls
22
+ end
23
+
24
+ def added_urls(original_content, modified_content)
25
+ url_finder = Wiki2Go::UrlFinder.new
26
+
27
+ old_urls = url_finder.urls_in(original_content)
28
+ new_urls = url_finder.urls_in(modified_content)
29
+ urls = new_urls - old_urls
30
+ urls
31
+ end
32
+
33
+ def blacklist_user(author)
34
+ bad_users = banned_users
35
+ bad_users.add(author)
36
+ @config.storage.save_list(bad_users)
37
+ end
38
+
39
+ def blacklist_url(url)
40
+ banned_urls.add(host_of(url))
41
+ @config.storage.save_list(banned_urls)
42
+ end
43
+
44
+ def blacklist_urls(urls)
45
+ urls.each do |url|
46
+ banned_urls.add(url)
47
+ end
48
+ @config.storage.save_list(banned_urls)
49
+ end
50
+
51
+ def blacklist_user_and_urls_added(author,original,new_content)
52
+ blacklist_user(author)
53
+ new_urls = added_urls(original,new_content)
54
+ blacklist_urls(new_urls)
55
+ end
56
+
57
+ def greylist_new_urls(author,original,new_content)
58
+ new_urls = added_urls(original,new_content)
59
+ if new_urls.length > 0 then
60
+ list = greylist
61
+ new_urls.each do |url|
62
+ list.add(author,host_of(url))
63
+ end
64
+ @config.storage.save_list(list)
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def host_of(url)
71
+ return '://' + URI::parse(url).host
72
+ end
73
+
74
+ def banned_users
75
+ @banned_users ||= @config.storage.load_blacklist('user')
76
+ @banned_users
77
+ end
78
+
79
+ def banned_urls
80
+ @banned_urls ||= @config.storage.load_blacklist('url')
81
+ @banned_urls
82
+ end
83
+
84
+ def chonqed_urls
85
+ @chonqed_urls ||= @config.storage.load_blacklist('chonqed')
86
+ @chonqed_urls
87
+ end
88
+
89
+ def greylist
90
+ @greylist ||= @config.storage.load_greylist
91
+ @greylist
92
+ end
93
+
94
+ end
95
+ end