-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhalo.rb
145 lines (116 loc) · 3.06 KB
/
halo.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
139
140
141
142
143
144
145
require 'rubygems'
require 'sinatra'
require 'haml'
require 'sass'
require 'rack-flash'
require 'data_mapper'
require 'json'
require "#{Dir.pwd}/model/user"
require "#{Dir.pwd}/model/account"
require "#{Dir.pwd}/model/category"
require "#{Dir.pwd}/model/transaction"
require "#{Dir.pwd}/model/query"
require "#{Dir.pwd}/controller/status"
require "#{Dir.pwd}/controller/user"
require "#{Dir.pwd}/controller/transaction"
require "#{Dir.pwd}/controller/account"
require "#{Dir.pwd}/controller/category"
# API controller
require "#{Dir.pwd}/controller/api"
DataMapper::Logger.new($stdout, :debug)
DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/data.db")
DataMapper::finalize
DataMapper::auto_upgrade!
use Rack::Flash, :sweep => true
set :public_folder, File.dirname(__FILE__) + '/static'
# For keeping compatibility with older sinatra versions
#set :public, File.dirname(__FILE__) + '/static'
enable :sessions
# The main application class
module Sinatra
module Halo
# Makes an attempt to authenticate the current user with the given credentials
def authenticate!(username, password)
user = User.find_user(username)
if user.nil?
logger.warn "Invalid authentication attempt with username: #{username}"
elsif user.password? password
user.update(:login_count => user.login_count + 1)
session[:user_id] = user.id
session[:render_mode] = :static_fragments
else
logger.info "Authenticated user with id: #{user.id}"
user.update(:login_count => 0)
session[:user_id] = user.id
session[:render_mode] = :static_fragments
end
return user
end
# Indicated if the current session has a valid authentication
def authenticated?
!session[:user_id].nil?
end
def invalidate_session
session[:user_id] = nil
session.clear
end
# Returns the user object assigned to the current session
def current_user
user = User.first(:id => current_user_id)
if user.nil?
user = User.new
user.name = ""
user.display_name = "Anonymous"
user.id = -1
end
return user
end
def current_user_id
session[:user_id]
end
def render_mode
session[:render_mode]
end
def number_format(n)
n.to_s.reverse.gsub(/...(?=.)/,'\& ').reverse
end
end
helpers Halo
end
# Those URL patterns that does not need authentication
unauthenticated_pages = [
"/user/login",
"/user/register",
/\/c\/.*/,
/\/j\/.*/,
/\/f\/.*/,
/\/g\/.*/
]
before do
may_access = false
if authenticated?
may_access = true
else
unauthenticated_pages.each do |page|
if page.kind_of? Regexp and request.path =~ page
may_access = true
elsif page.kind_of? String and request.path == page
may_access = true
end
end
end
redirect to '/user/login' unless may_access
end
get '/' do
@user = current_user
haml :'/home/index'
end
get '/c/*' do |stylesheet|
sass stylesheet.to_sym
end
get '/init' do
user = User.new
end
get '/sitebuild' do
haml :'/sitebuild/index', :layout => :layout_sb
end