rack_warden 0.0.9 → 0.0.10

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 (39) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +2 -0
  3. data/Gemfile +13 -10
  4. data/README.md +115 -53
  5. data/config.ru +1 -0
  6. data/lib/rack_warden.rb +33 -5
  7. data/lib/rack_warden/app.rb +73 -58
  8. data/lib/rack_warden/core_patches.rb +20 -0
  9. data/lib/rack_warden/env.rb +27 -0
  10. data/lib/rack_warden/frameworks.rb +34 -36
  11. data/lib/rack_warden/frameworks/rack.rb +36 -0
  12. data/lib/rack_warden/frameworks/rails.rb +29 -9
  13. data/lib/rack_warden/frameworks/sinatra.rb +15 -11
  14. data/lib/rack_warden/helpers.rb +197 -29
  15. data/lib/rack_warden/mail.rb +26 -0
  16. data/lib/rack_warden/models.rb +79 -40
  17. data/lib/rack_warden/models/user.rb +180 -22
  18. data/lib/rack_warden/routes.rb +159 -83
  19. data/lib/rack_warden/sinatra/decompile.rb +127 -0
  20. data/lib/rack_warden/sinatra/json.rb +131 -0
  21. data/lib/rack_warden/sinatra/namespace.rb +285 -0
  22. data/lib/rack_warden/sinatra/respond_with.rb +277 -0
  23. data/lib/rack_warden/version.rb +1 -1
  24. data/lib/rack_warden/views/rw_account_widget.html.erb +8 -0
  25. data/lib/rack_warden/views/rw_activation.email.erb +3 -0
  26. data/lib/rack_warden/views/rw_admin.html.erb +7 -5
  27. data/lib/rack_warden/views/rw_dbinfo.html.erb +5 -4
  28. data/lib/rack_warden/views/rw_error.html.erb +1 -0
  29. data/lib/rack_warden/views/rw_flash_widget.html.erb +12 -0
  30. data/lib/rack_warden/views/rw_index.html.erb +1 -1
  31. data/lib/rack_warden/views/rw_layout.html.erb +13 -19
  32. data/lib/rack_warden/views/rw_layout_admin.html.erb +6 -6
  33. data/lib/rack_warden/views/rw_login.html.erb +18 -5
  34. data/lib/rack_warden/views/rw_new_user.html.erb +22 -6
  35. data/lib/rack_warden/views/rw_protected.xml.erb +10 -0
  36. data/lib/rack_warden/views/rw_session.html.erb +34 -0
  37. data/lib/rack_warden/warden.rb +161 -30
  38. data/rack_warden.gemspec +16 -13
  39. metadata +84 -29
@@ -0,0 +1,26 @@
1
+ module RackWarden
2
+ class Mail < ::Mail::Message
3
+ def initialize(*args)
4
+ App.logger.debug "RW creating new mail message with args: #{args.inspect}"
5
+
6
+ mail_options = App.mail_options.dup
7
+
8
+ options = args.last.is_a?(Hash) ? args.pop : {}
9
+ super( *[args, mail_options[:delivery_options].merge(options)].flatten )
10
+
11
+ _delivery_method = mail_options.delete(:via) || mail_options.delete(:delivery_method) || :test
12
+ _delivery_options = mail_options.delete(:via_options) || mail_options.delete(:delivery_options) || {:from=>'test@localhost'}
13
+
14
+ if _delivery_method.is_a?(Array)
15
+ delivery_method *_delivery_method
16
+ delivery_method.settings.merge _delivery_options
17
+ else
18
+ delivery_method _delivery_method, _delivery_options
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+
25
+
26
+
@@ -1,45 +1,84 @@
1
1
  # Setup the database connection, schema, etc.
2
2
  module RackWarden
3
-
4
- # Best guess at framework database settings.
5
- def self.get_database_config
6
- #puts ActiveRecord::Base.configurations[(RackWarden::App.environment || :development).to_s].to_yaml
7
- #conf = case
8
- case
9
- when App.database_config.to_s.downcase == 'file'; "sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db"
10
- when App.database_config.to_s.downcase == 'auto';
11
- (ActiveRecord::Base.connection_config rescue nil) ||
12
- (ActiveRecord::Base.configurations[(RackWarden::App.environment || :development).to_s] rescue nil) ||
13
- (DataMapper.repository(:default).adapter[:options] rescue nil) ||
14
- App.database_default
15
- when App.database_config; App.database_config
16
- else App.database_default
17
- end
18
- #... sort out environment HERE
19
- #conf = RackWarden::App.environment || :development).to_s
20
- end
21
-
22
- #puts "RW DataMapper using log_path #{App.log_path}"
23
- ### CAUTION - There may be a file conflict between this and rack::commonlogger.
24
- DataMapper::Logger.new(settings.log_file) #$stdout) #App.log_path)
25
-
26
-
27
- DataMapper.setup(:default, get_database_config)
28
- # Do DataMapper.repository.adapter to get connection info for this connection.
29
- puts "RW DataMapper.setup #{DataMapper.repository.adapter}"
30
-
31
- #puts "RW requiring model files in #{File.join(File.dirname(__FILE__), 'models/*')}"
32
- Dir.glob(File.join(File.dirname(__FILE__), 'models/*')).each {|f| require f}
33
-
34
- #puts "RW DataMapper.finalize"
35
- # Tell DataMapper the models are done being defined
36
- DataMapper.finalize
3
+ module Model
4
+
5
+ # Any modles used by RackWarden should inherit from Base.
6
+ class Base
7
+ def self.inherited(model)
8
+ model.instance_eval do
9
+
10
+ App.logger.debug "RW #{self}.inherited with #{model}"
11
+ include DataMapper::Resource
12
+ include BCrypt
13
+ def self.default_repository_name; App.repository_name; end
14
+
15
+ end
16
+ end
17
+ end
37
18
 
38
- puts "RW DataMapper.auto_upgrade!"
39
- # Update the database to match the properties of User.
40
- DataMapper.auto_upgrade!
19
+ # Load models, setup database adapter, setup db repository.
20
+ def self.initialize_models
21
+
22
+ # Select existing datamapper repository, create a new one, or create a default.
23
+ begin
24
+ DataMapper.repository(App.repository_name).adapter
25
+ if not App.database_config.to_s.downcase[/auto|existing/]
26
+ App.repository_name = :rack_warden
27
+ DataMapper.setup(App.repository_name, get_database_config)
28
+ end
29
+ rescue DataMapper::RepositoryNotSetupError
30
+ DataMapper.setup(App.repository_name, get_database_config)
31
+ end
32
+
33
+ # Careful! This could expose sensitive db login info in the log files.
34
+ App.logger.debug "RW selected DataMapper repository #{DataMapper.repository(App.repository_name).adapter.inspect}"
35
+
36
+ # Careful! This could expose sensitive db login info in the log files.
37
+ App.logger.warn "RW using DataMapper repository #{DataMapper.repository(App.repository_name).adapter.options.dup.tap{|o| o.delete(:password); o.delete('password')}.inspect}"
38
+
39
+ App.logger.warn "RW DataMapper logging to #{DataMapper.logger.log} (level #{DataMapper.logger.level})"
40
+
41
+
42
+ # Load all models.
43
+ App.logger.debug "RW requiring model files in #{File.join(File.dirname(__FILE__), 'models/*')}"
44
+ Dir.glob(File.join(File.dirname(__FILE__), 'models/*')).each {|f| require f}
45
+
46
+ # DataMapper finalize
47
+ App.logger.debug "RW DataMapper.finalize"
48
+ # Tell DataMapper the models are done being defined
49
+ DataMapper.finalize
50
+
51
+ # DataMapper auto upgrade.
52
+ App.logger.warn "RW User.auto_upgrade!"
53
+ # Update the database to match the properties of User.
54
+ #DataMapper.auto_upgrade!
55
+ User.auto_upgrade!
56
+ end
57
+
58
+
59
+ # Best guess at framework database settings.
60
+ def self.get_database_config
61
+ #App.logger.debug ActiveRecord::Base.configurations[(RackWarden::App.environment || :development).to_s].to_yaml
62
+ conf = case
63
+ when App.database_config.to_s.downcase == 'memory'; "sqlite3::memory:?cache=shared"
64
+ when App.database_config.to_s.downcase == 'file'; "sqlite3:///#{Dir.pwd}/rack_warden.sqlite3.db"
65
+ when App.database_config.to_s.downcase == 'auto';
66
+ (ActiveRecord::Base.connection_config rescue nil) ||
67
+ (ActiveRecord::Base.configurations rescue nil) ||
68
+ #(DataMapper.repository(App.repository_name).adapter[:options] rescue nil) ||
69
+ App.database_default
70
+ when App.database_config; App.database_config
71
+ else App.database_default
72
+ end
73
+ #... sort out environment HERE
74
+ rslt = conf[(RackWarden::App.environment || :development).to_s] || conf
75
+ rslt[:adapter] = 'mysql' if rslt && [:adapter]=='mysql2'
76
+ App.logger.debug "RW get_database_config rslt: #{rslt.inspect}"
77
+ return rslt
78
+ end
79
+
80
+ initialize_models
41
81
 
42
- # Careful! This will expose sensitive db login info.
43
- #puts "RW DataMapper repository #{DataMapper.repository.adapter.options}"
82
+ end # Model
44
83
 
45
- end # module
84
+ end # RackWarden
@@ -1,44 +1,202 @@
1
1
 
2
2
  module RackWarden
3
3
 
4
- class User
5
- include DataMapper::Resource
6
- include BCrypt
7
-
8
- storage_names[:default] = App.user_table_name if App.user_table_name
4
+ class User < Model::Base
5
+
6
+ # DataMapper will build a user table name from the containing modules: rack_warden_users.
7
+ storage_names[App.repository_name] = App.user_table_name if App.user_table_name
9
8
 
10
9
  property :id, Serial, :key => true
11
10
  property :username, String, :length => 128, :unique => true, :required => true, :default => lambda {|r,v| r.instance_variable_get :@email}
12
- property :email, String, :length => 128, :unique => true, :required => true #, :default => 'error'
13
-
14
- property :password, BCryptHash
11
+ property :email, String, :length => 128, :unique => true, :required => true, :format=>:email_address
12
+ property :encrypted_password, BCryptHash, :writer => :protected, :default => lambda {|r,v| BCrypt::Password.create(r.instance_variable_get :@password)}
13
+ property :remember_token, BCryptHash
14
+ property :remember_token_expires_at, EpochTime
15
+ property :activated_at, EpochTime
16
+ property :activation_code, BCryptHash
17
+ property :password_reset_code, BCryptHash
18
+
19
+
20
+ attr_accessor :password, :password_confirmation
21
+
22
+ before :create, :make_activation_code
23
+ after :create, :send_activation
15
24
 
16
- # before :valid?, :set_username
17
- # before :save, :set_username
25
+ ### VALIDATION ###
18
26
 
19
- # def set_username
20
- # puts "SETTING USERNAME"
21
- # @username = @email unless @username
22
- # end
27
+ validates_presence_of :password, :password_confirmation, :if => :password_required?
28
+ validates_confirmation_of :password, :if => :password_required?
29
+ validates_length_of :password, :min => 8, :if => :password
30
+ validates_with_method :password, :method => :valid_password_elements, :if => :password
31
+ validates_length_of :password_confirmation, :within => 8..40, :when => [:require_password, :user]
32
+
33
+
34
+ # check validity of password if we have a new resource, or there is a plaintext password provided
35
+ def password_required?
36
+ password || new?
37
+ end
38
+
39
+ # Validation returns nil if valid
40
+ def valid_password_elements
41
+ unless password_element_count >= 2
42
+ message = "Passwords must be minimum 8 characters in length
43
+ and contain at least two of the following character types: uppercase,
44
+ lowercase, numbers, symbols."
45
+ [false, message]
46
+ else
47
+ true
48
+ end
49
+ end
50
+
51
+ # Returns number of specified character classes found in pwd
52
+ def password_element_count(pwd=password, character_classes = %w[upper lower digit punct])
53
+ character_classes.find_all{|c| pwd.to_s[/[[:#{c}:]]/]}.size
54
+ rescue
55
+ 0
56
+ end
57
+
58
+
59
+ ### CLASS ###
60
+
61
+ # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
62
+ # This is not currently used in RackWarden (has it's own auth logic section).
63
+ def self.authenticate(login, password)
64
+ # hides records with a nil activated_at
65
+ #u = find :first, :conditions => ['login = ? and activated_at IS NOT NULL', login]
66
+ u = first(:conditions => ['(username = ? or email = ?) and activated_at IS NOT NULL', login, login])
67
+ if u && u.authenticate(password)
68
+ # This bit clears a password_reset_code (this assumes it's not needed, cuz user just authenticated successfully).
69
+ (u.update_attributes(:password_reset_code => nil)) if u.password_reset_code
70
+ u
71
+ else
72
+ nil
73
+ end
74
+ end
75
+
76
+ def self.find_for_forget(email) #, question, answer)
77
+ first(:conditions => ['email = ? AND (activation_code IS NOT NULL or activated_at IS NOT NULL)', email])
78
+ #find :first, :conditions=>{:email=>email, :security_question=>question, :security_answer=>answer}
79
+ end
80
+
81
+ def self.find_for_activate(code)
82
+ decoded = App.uri_decode(code)
83
+ App.logger.debug "RW find_for_activate with #{decoded}"
84
+ User.first :activation_code => "#{decoded}"
85
+ end
86
+
87
+
88
+
89
+ ### INSTANCE ###
23
90
 
24
91
  def authenticate(attempted_password)
25
- if self.password == attempted_password
92
+ if self.encrypted_password == attempted_password
26
93
  true
27
94
  else
28
95
  false
29
96
  end
30
97
  end
31
98
 
32
- def authorized?(options)
33
- (options[:request].is_a?(Rack::Request) && options[:request].script_name[/login|new|create|logout/]) ||
34
- username[/wbr/i]
99
+ def authorized?(options={})
100
+ #options[:request].script_name[/login|new|create|logout/] ||
101
+ self.id==1
102
+ end
103
+
104
+ def remember_token?
105
+ remember_token_expires_at && Time.now.utc < remember_token_expires_at
106
+ end
107
+
108
+ # These create and unset the fields required for remembering users between browser closes
109
+ def remember_me
110
+ self.remember_token_expires_at = Time.now+(60*60*24*14) #2.weeks.from_now.utc
111
+ self.remember_token = "#{email}--#{remember_token_expires_at}"
112
+ save! && remember_token
113
+ end
114
+
115
+ def forget_me
116
+ self.remember_token_expires_at = nil
117
+ self.remember_token = nil
118
+ save! #(false)
119
+ end
120
+
121
+ def activate
122
+ @activated = true
123
+ self.activated_at = Time.now
124
+ self.activation_code = nil
125
+ # added by wbr for auto-password generation from blank activation
126
+ self.encrypted_password.to_s.empty? ? self.new_random_password : nil
127
+ self.save!
128
+ end
129
+
130
+ # Returns true if the user has just been activated.
131
+ def recently_activated?
132
+ @activated
133
+ end
134
+
135
+ def make_activation_code
136
+ self.activation_code = (Time.now.to_s.split(//).sort_by {rand}.join)
137
+ App.logger.debug "RW make_activation_code result #{activation_code}"
138
+ activation_code
139
+ end
140
+
141
+ def send_activation
142
+ RackWarden::Mail.new({
143
+ :to => email,
144
+ :subject => "Signup confirmation",
145
+ :body => App.render_template('rw_activation.email.erb', :user=>self)
146
+ }).deliver!
147
+ end
148
+
149
+
150
+ ### Reset Password ###
151
+
152
+ def forgot_password
153
+ @forgotten_password = true
154
+ self.make_password_reset_code
155
+ end
156
+
157
+ def reset_password
158
+ # First update the password_reset_code before setting the
159
+ # reset_password flag to avoid duplicate email notifications.
160
+ update_attributes(:password_reset_code => nil)
161
+ @reset_password = true
162
+ # These steps will activate an account that hasn't been activated yet, allowing the user to activate when lost/forgotten activation email.
163
+ if activated_at == nil and activation_code != nil
164
+ activate
165
+ end
166
+ end
167
+
168
+ def recently_reset_password?
169
+ @reset_password
170
+ end
171
+
172
+ def recently_forgot_password?
173
+ @forgotten_password
174
+ end
175
+
176
+ # wbr - to resend activation email from existing record
177
+ def recent_manual_activation?
178
+ @manual_activation
179
+ end
180
+
181
+ def make_password_reset_code
182
+ self.password_reset_code = ( Time.now.to_s.split(//).sort_by {rand}.join )
183
+ end
184
+
185
+ ### ###
186
+
187
+ def new_random_password # should maybe be private?
188
+ self.make_password_reset_code # added by wbr for blank activation
189
+ @recently_generated_password = self.password_reset_code #added by wbr for blank activation
190
+ self.password = Digest::SHA1.hexdigest("--#{rand.to_s}--#{username}--")[0,10]
191
+ self.password_confirmation = self.password
35
192
  end
36
193
 
37
- # def username
38
- # @username.downcase if @username.is_a?(String)
39
- # end
194
+ # returns password_reset_code if recently generated password
195
+ def recently_generated_password
196
+ @recently_generated_password
197
+ end
40
198
 
41
- end
199
+ end # User
42
200
 
43
201
 
44
202
  # # Create a test User
@@ -2,98 +2,174 @@ module RackWarden
2
2
  module Routes
3
3
  def self.included(base)
4
4
  base.instance_eval do
5
-
5
+
6
+ App.logger.debug "RW loading routes"
7
+
8
+ respond_to :xml, :json, :js, :txt, :html, :yaml
9
+
10
+ # Before does not have access to uri-embedded params yet.
11
+ #before do
12
+ #end
13
+
6
14
  if defined? ::RACK_WARDEN_STANDALONE
7
15
  get '/?' do
8
16
  default_page
9
17
  end
10
18
  end
19
+
20
+ namespace settings.rw_prefix do
11
21
 
12
- get '/auth/?' do
13
- default_page
14
- end
15
-
16
- get '/auth/login' do
17
- if User.count > 0
18
- erb :'rw_login.html', :layout=>settings.layout
19
- else
20
- flash(:rwarden)[:error] = warden.message || "Please create an admin account"
21
- redirect url('/auth/new', false)
22
- end
23
- end
24
-
25
- post '/auth/login' do
26
- warden.authenticate!
27
-
28
- flash(:rwarden)[:success] = warden.message || "Successful login"
29
-
30
- return_to
31
- end
32
-
33
- get '/auth/logout' do
34
- warden.raw_session.inspect
35
- warden.logout
36
- flash(:rwarden)[:success] = 'You have been logged out'
37
- redirect url(settings.default_route, false)
38
- end
39
-
40
- get '/auth/new' do
41
- halt 403 unless settings.allow_public_signup or !(User.count > 0)
42
- erb :'rw_new_user.html', :layout=>settings.layout, :locals=>{:recaptcha_sitekey=>settings.recaptcha['sitekey']}
43
- end
44
-
45
- post '/auth/create' do
46
- verify_recaptcha if settings.recaptcha[:secret]
47
- Halt "Could not create account", :layout=>settings.layout unless params[:user]
48
- params[:user].delete_if {|k,v| v.nil? || v==''}
49
- @user = User.new(params['user'])
50
- if @user.save
51
- warden.set_user(@user)
52
- flash(:rwarden)[:success] = warden.message || "Account created"
53
- #redirect session[:return_to] || url(settings.default_route, false)
54
- return_to
55
- else
56
- flash(:rwarden)[:error] = "#{warden.message} => #{@user.errors.entries.join('. ')}"
57
- puts "RW /auth/create #{@user.errors.entries}"
58
- redirect back #url('/auth/new', false)
59
- end
60
- end
61
-
62
- post '/auth/unauthenticated' do
63
- # I had to remove the condition, since it was not updating return path when it should have.
64
- session[:return_to] = env['warden.options'][:attempted_path] if !request.xhr? && !env['warden.options'][:attempted_path][/login|new|create/]
65
- puts "RW attempted path: #{env['warden.options'][:attempted_path]}"
66
- puts "RW will return-to #{session[:return_to]}"
67
- puts warden
68
- # if User.count > 0
69
- flash(:rwarden)[:error] = warden.message || "Please login to continue"
70
- redirect url('/auth/login', false)
71
- # else
72
- # flash(:rwarden)[:error] = warden.message || "Please create an admin account"
73
- # redirect url('/auth/new', false)
74
- # end
75
- end
22
+ # This is necessary for sinatra-namespace to do nested stuff,
23
+ # due to the namespace module only being half-baked.
24
+ helpers do
25
+ def settings
26
+ App.settings
27
+ end
28
+ end
29
+
30
+
31
+ ### CORE ###
32
+
33
+ get '/?' do
34
+ default_page
35
+ end
36
+
37
+ get '/login' do
38
+ logger.debug "RW /login action"
39
+ # Trigger authentication on remember_me, in case they haven't hit a protected page yet.
40
+ warden.authenticate :remember_me
41
+ if User.count > 0
42
+ respond_with :'rw_login'
43
+ else
44
+ flash.rw_error = warden.message || "Please create an admin account"
45
+ redirect url_for('/new')
46
+ end
47
+ end
48
+
49
+ post '/login' do
50
+ warden.authenticate!
51
+
52
+ flash.rw_success = warden.message || "Successful login"
53
+
54
+ return_to
55
+ end
56
+
57
+ get '/logout' do
58
+ #warden.raw_session.inspect
59
+ warden.authenticated? # Hack so warden will log out. See https://github.com/hassox/warden/issues/76.
60
+ warden.logout
61
+ flash.rw_success = 'You have been logged out'
62
+ redirect url(settings.default_route, false)
63
+ end
64
+
65
+ get '/new' do
66
+ halt(403, "Not authorized") unless settings.allow_public_signup || !(User.count > 0) || authorized?
67
+ respond_with :'rw_new_user', :recaptcha_sitekey=>settings.recaptcha['sitekey']
68
+ end
69
+
70
+ post '/create' do
71
+ verify_recaptcha if settings.recaptcha[:secret]
72
+ Halt("Could not create account") unless params[:user]
73
+ params[:user].delete_if {|k,v| v.nil? || v==''}
74
+ @user = User.new(params['user'])
75
+ if @user.save
76
+ warden.set_user(@user) if settings.login_on_create
77
+ # TODO: maybe put this line in the user model?
78
+ @user.activate if settings.mail_options[:delivery_method] == :test
79
+ flash.rw_success = warden.message || "Account created"
80
+ App.logger.info "RW /auth/create succeeded for '#{@user.username rescue nil}' #{@user.errors.entries}"
81
+ #redirect session[:return_to] || url(settings.default_route, false)
82
+ return_to url_for(logged_in? ? '/' : '/login')
83
+ else
84
+ flash.rw_error = "#{warden.message} => #{@user.errors.entries.join('. ')}"
85
+ App.logger.info "RW /auth/create failed for '#{@user.username rescue nil}' #{@user.errors.entries}"
86
+ redirect back #url('/auth/new', false)
87
+ end
88
+ end
89
+
90
+ get '/activate/:code' do
91
+ redirect settings.default_route unless params[:code]
92
+ # TODO: move this logic into User. This should only be 'user = User.activate(params[:code])'
93
+ @user = User.find_for_activate(params[:code])
94
+ if @user.is_a? User #&& user.activated_at == nil
95
+ @user.activate
96
+ warden.set_user(@user) if settings.login_on_activate
97
+ flash.rw_success = "Account activated"
98
+ App.logger.info "RW /auth/activate succeeded for '#{@user.username rescue nil}' #{@user.errors.entries}"
99
+ #redirect "/auth/login"
100
+ return_to url_for(logged_in? ? '/' : '/login')
101
+ else
102
+ App.logger.info "RW /auth/activate failed for '#{@user}' with errors: #{$!}"
103
+ #halt "Could not activate"
104
+ redirect_error "The activation code was not valid"
105
+ end
106
+ end
107
+
108
+ post '/unauthenticated' do
109
+ # I had to remove the condition, since it was not updating return path when it should have.
110
+ session[:return_to] = warden_options[:attempted_path] if !request.xhr? && !warden_options[:attempted_path][Regexp.new(settings.exclude_from_return_to)]
111
+ App.logger.info "RW attempted path unauthenticated: #{warden_options[:attempted_path]}"
112
+ App.logger.debug "RW will return-to #{session[:return_to]}"
113
+ App.logger.debug warden
114
+ # if User.count > 0
115
+ flash.rw_error = warden.message || "Please login to continue"
116
+ redirect url_for('/login')
117
+ # else
118
+ # flash[:rwarden][:error] = warden.message || "Please create an admin account"
119
+ # redirect url('/auth/new', false)
120
+ # end
121
+ end
122
+
123
+ get "/error" do
124
+ respond_with :'rw_error'
125
+ end
126
+
127
+
128
+
129
+ ### UTILITY ###
76
130
 
77
- get '/auth/protected' do
78
- warden.authenticate!
79
- #authorized?
80
- erb :'rw_protected.html', :layout=>settings.layout
81
- #wrap_with(){erb :'rw_protected.html'}
82
- end
131
+ get "/testing.?:format?" do
132
+ logger.debug "RW /auth/testing request.cookies" + request.cookies.to_yaml
133
+ logger.debug "RW /auth/testing response" + response.to_yaml
134
+ logger.debug "RW request headers #{headers.inspect}"
135
+ logger.debug "RW request.accept #{request.accept}"
136
+ logger.debug "RW env['sinatra.accept'] #{env['sinatra.accept']}"
137
+ logger.debug "RW mime_type(ext) #{mime_type(params[:ext])}"
138
+ response.set_cookie '_auth_testing_cookie', :value=>"Hi Im a Cookie", :expires=>Time.now+60, :path=>'/'
139
+ respond_with :'rw_protected' do |f|
140
+ f.yaml { "key: dat"}
141
+ end
142
+ #erb :'rw_protected.html'
143
+ end
83
144
 
84
- get "/auth/dbinfo" do
85
- warden.authenticate!
86
- authorized?
87
- #erb :'rw_dbinfo.html', :layout=>settings.layout
88
- nested_erb :'rw_dbinfo.html', :'rw_layout_admin.html', settings.layout
89
- end
145
+ get "/is_running" do
146
+ "YES"
147
+ end
148
+
149
+ get '/protected' do
150
+ require_login
151
+ respond_with :'rw_protected'
152
+ end
153
+
154
+ get "/dbinfo" do
155
+ require_authorization
156
+ #erb :'rw_dbinfo.html'
157
+ nested_erb :'rw_dbinfo.html', :'rw_layout_admin.html', settings.layout
158
+ end
159
+
160
+ get '/admin' do
161
+ require_authorization
162
+ #erb :'rw_admin.html', :layout=>settings.layout
163
+ nested_erb :'rw_admin.html', :'rw_layout_admin.html', settings.layout
164
+ #respond_with :rw_admin
165
+ end
166
+
167
+ get '/sessinfo' do
168
+ require_authorization
169
+ nested_erb :'rw_session.html', :'rw_layout_admin.html', settings.layout
170
+ end
90
171
 
91
- get '/auth/admin' do
92
- warden.authenticate!
93
- authorized?
94
- #erb :'rw_admin.html', :layout=>settings.layout
95
- nested_erb :'rw_admin.html', :'rw_layout_admin.html', settings.layout
96
- end
172
+ end # namespace
97
173
 
98
174
  end
99
175
  end