/
siniki.rb
executable file
·138 lines (109 loc) · 2.35 KB
/
siniki.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env ruby
require 'rubygems'
require 'dm-core'
require 'sinatra'
require 'unicode'
require 'redcloth'
require 'activesupport'
require 'models'
require 'helpers'
require 'monkeypatches'
enable :sessions
before do
unless request.env['PATH_INFO'] == '/setup'
@header = Page.header.html_body
@menu = Page.menu.html_body
end
end
error do
"Sorry there was a error - #{request.env['sinatra.error']}"
end
get '/setup' do
if File.exists?("./siniki.db")
throw :halt, "Wiki is up and running, setup could not be executed"
end
DataMapper.auto_migrate!
page = Page.new
page.attributes = { :title => 'Welcome' }
page.save
page = Page.new
page.attributes = { :title => 'Menu', :body => erb(:menu) }
page.save
page = Page.new
page.attributes = { :title => 'Header', :body => erb(:header) }
page.save
# TODO change admin password
user = User.new
user.attributes = { :username => 'admin', :password => 'aaa123' }
user.save
"<p>siniki is ready to run!</p><a href='/'>Go to home</a>"
end
post '/save' do
if params[:title].nil?
if !params[:id].nil?
page = Page.get(params[:id])
params[:title] = page.title
params[:permalink] = page.permalink
end
end
page_id = params.delete('id')
page = Page.new
page.attributes = params
if page_id.to_i.nonzero?
page.page = Page.get(page_id)
end
if page.save
redirect "/#{page.permalink}"
else
redirect '/edit'
end
end
get '/new' do
require_login
haml :new
end
get '/login' do
haml :login
end
post '/login' do
user = User.login(params[:username], params[:password])
if user
session[:username] = user.username
redirect session.delete(:redirect_back_to) || '/'
else
haml :login
end
end
get '/logout' do
session.delete(:username)
redirect '/welcome'
end
get '/:permalink' do
@page = Page.current(params[:permalink])
if @page
haml :page
else
redirect "/#{params[:permalink]}/new"
end
end
get '/:permalink/new' do
require_login
@permalink = params[:permalink]
haml :new
end
get '/:permalink/edit' do
require_login
@page = Page.current(params[:permalink])
haml :edit
end
get '/:permalink/history' do
@pages = Page.all_versions(params[:permalink])
haml :history
end
get '/:permalink/version/:id' do
@page = Page.get(params[:id])
haml :page
end
get '/' do
redirect '/welcome'
end