caboose-cms 0.9.193 → 0.9.194

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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/caboose/main.js +35 -34
  3. data/app/assets/stylesheets/caboose/login.scss +95 -0
  4. data/app/controllers/caboose/application_controller.rb +1 -1
  5. data/app/controllers/caboose/block_type_categories_controller.rb +25 -2
  6. data/app/controllers/caboose/block_types_controller.rb +34 -35
  7. data/app/controllers/caboose/login_controller.rb +33 -37
  8. data/app/controllers/caboose/pages_controller.rb +2 -7
  9. data/app/controllers/caboose/register_controller.rb +12 -14
  10. data/app/controllers/caboose/users_controller.rb +40 -46
  11. data/app/mailers/caboose/login_mailer.rb +3 -2
  12. data/app/models/caboose/authenticator.rb +2 -2
  13. data/app/models/caboose/block_type_category.rb +4 -2
  14. data/app/models/caboose/schema.rb +4 -2
  15. data/app/views/caboose/block_type_categories/admin_edit.html.erb +43 -0
  16. data/app/views/caboose/block_type_categories/admin_index.html.erb +23 -0
  17. data/app/{assets/javascripts/caboose/testing.js → views/caboose/block_type_categories/admin_new.html.erb} +0 -0
  18. data/app/views/caboose/block_types/admin_edit.html.erb +8 -8
  19. data/app/views/caboose/extras/error.html.erb +1 -1
  20. data/app/views/caboose/login/forgot_password_form.html.erb +38 -51
  21. data/app/views/caboose/login/index.html.erb +41 -64
  22. data/app/views/caboose/login/reset_password_form.html.erb +35 -35
  23. data/app/views/caboose/register/index.html.erb +51 -44
  24. data/lib/caboose/version.rb +1 -1
  25. metadata +6 -8
  26. data/app/assets/javascripts/caboose/cart_old.js +0 -184
  27. data/app/assets/javascripts/caboose/checkout_old.js +0 -151
  28. data/app/assets/javascripts/caboose/product_new.js +0 -306
  29. data/app/assets/javascripts/caboose/product_old.js +0 -324
  30. data/app/assets/stylesheets/caboose/login.css +0 -134
@@ -11,37 +11,34 @@ module Caboose
11
11
  end
12
12
  @return_url = params[:return_url].nil? ? "/" : params[:return_url]
13
13
  @modal = params[:modal].nil? ? false : params[:modal]
14
+ @page.title = "Login" if @page
14
15
  redirect_to @return_url and return if logged_in?
15
- render :layout => Caboose::login_layout
16
+ render :layout => "caboose/application"
16
17
  end
17
18
 
18
19
  # @route POST /login
19
20
  def login
20
21
  resp = StdClass.new('error' => '', 'redirect' => '')
21
22
  return_url = params[:return_url].nil? ? "/" : params[:return_url]
22
-
23
23
  if logged_in?
24
24
  resp.redirect = return_url
25
+ elsif params[:username].blank?
26
+ resp.error = "Please provide a username."
27
+ elsif params[:password].blank?
28
+ resp.error = "Please provide a password."
25
29
  else
26
30
  username = params[:username].downcase
27
31
  password = params[:password]
28
-
29
- if username.nil? || password.nil? || password.strip.length == 0
30
- resp.error = "Invalid credentials"
31
- else
32
- bouncer_class = Caboose::authenticator_class.constantize
33
- bouncer = bouncer_class.new
34
- login_resp = bouncer.authenticate(username, password, @site, request)
35
-
36
- if login_resp.error
37
- resp.error = login_resp.error
38
- else
39
- remember = params[:remember] && (params[:remember] == 1 || params[:remember] == "1")
40
- login_user(login_resp.user, remember)
41
- #resp.redirect = return_url
42
- resp.redirect = Caboose.plugin_hook('login_success', return_url, login_resp.user)
43
- resp.modal = false
44
- end
32
+ bouncer_class = Caboose::authenticator_class.constantize
33
+ bouncer = bouncer_class.new
34
+ login_resp = bouncer.authenticate(username, password, @site, request)
35
+ if login_resp.error
36
+ resp.error = login_resp.error
37
+ else
38
+ remember = params[:remember] && (params[:remember] == 1 || params[:remember] == "1")
39
+ login_user(login_resp.user, remember)
40
+ resp.redirect = Caboose.plugin_hook('login_success', return_url, login_resp.user)
41
+ resp.modal = false
45
42
  end
46
43
  end
47
44
  render :json => resp
@@ -51,29 +48,28 @@ module Caboose
51
48
  def forgot_password_form
52
49
  @return_url = params[:return_url].nil? ? "/" : params[:return_url]
53
50
  @modal = params[:modal].nil? ? false : params[:modal]
54
- redirect_to @return_url if logged_in?
55
- render :layout => Caboose::login_layout
51
+ redirect_to @return_url and return if logged_in?
52
+ @page.title = "Forgot Password" if @page
53
+ render :layout => "caboose/application"
56
54
  end
57
55
 
58
56
  # @route POST /login/forgot-password
59
57
  def send_reset_email
60
58
  @return_url = params[:return_url].nil? ? "/" : params[:return_url]
61
59
  redirect_to @return_url if logged_in?
62
-
63
60
  resp = Caboose::StdClass.new
64
61
  username = params[:username]
65
-
66
- if username.nil? || username.strip.length == 0
67
- resp.error = "You must enter a username."
62
+ if username.blank?
63
+ resp.error = "You must enter a username or email address."
68
64
  render :json => resp
69
65
  return
70
66
  end
71
67
 
72
- bob = Caboose::User.where(:site_id => @site.id, :username => username).first
73
- bob = Caboose::User.where(:site_id => @site.id, :email => username).first if bob.nil?
68
+ bob = Caboose::User.where(:site_id => @site.id, :username => username.strip.downcase).first
69
+ bob = Caboose::User.where(:site_id => @site.id, :email => username.strip.downcase).first if bob.nil?
74
70
 
75
71
  if bob.nil?
76
- resp.error = "The given email or username is not in our system."
72
+ resp.error = "The given username or email address does not exist."
77
73
  render :json => resp
78
74
  return
79
75
  end
@@ -85,7 +81,7 @@ module Caboose
85
81
 
86
82
  LoginMailer.configure_for_site(@site.id).forgot_password_email(bob).deliver
87
83
 
88
- resp.success = "We just sent you an email. The reset link inside is good for 3 days."
84
+ resp.success = "Please check your email for a link to reset your password. This link is good for 3 days."
89
85
  render :json => resp
90
86
  end
91
87
 
@@ -98,7 +94,8 @@ module Caboose
98
94
  end
99
95
  @reset_id = params[:reset_id]
100
96
  @user = Caboose::User.user_for_reset_id(@reset_id)
101
- render :layout => Caboose::login_layout
97
+ @page.title = "Reset Password" if @page
98
+ render :layout => "caboose/application"
102
99
  end
103
100
 
104
101
  # @route POST /login/reset-password
@@ -112,17 +109,16 @@ module Caboose
112
109
  pass1 = params[:pass1]
113
110
  pass2 = params[:pass2]
114
111
 
115
- if reset_id.nil? || reset_id.strip.length == 0
116
- resp.error = "No reset ID was given."
112
+ if reset_id.blank?
113
+ resp.error = "This password reset link is invalid."
117
114
  else
118
115
  user = Caboose::User.user_for_reset_id(reset_id)
119
-
120
116
  if user.nil?
121
- resp.error = "The given reset ID is invalid."
122
- elsif pass1 != pass2
123
- resp.error = "Passwords don't match."
117
+ resp.error = "This password reset link is invalid."
124
118
  elsif pass1.length < 8
125
- resp.error = "Passwords must be at least 8 characters"
119
+ resp.error = "Passwords must be at least 8 characters."
120
+ elsif pass1 != pass2
121
+ resp.error = "Your passwords don't match."
126
122
  else
127
123
  user.password = Digest::SHA1.hexdigest(Caboose::salt + pass1)
128
124
  user.password_reset_id = ''
@@ -58,12 +58,11 @@ module Caboose
58
58
  asset
59
59
  return
60
60
  end
61
-
62
61
 
63
62
  user = logged_in_user
64
63
  if !user.is_allowed(page, 'view')
65
64
  if user.id == User.logged_out_user_id(@site.id)
66
- redirect_to "/modal/login?return_url=" + URI.encode(request.fullpath)
65
+ redirect_to "/login?return_url=" + URI.encode(request.fullpath)
67
66
  return
68
67
  else
69
68
  # go to 404 page
@@ -81,11 +80,7 @@ module Caboose
81
80
  @user = user
82
81
  @editing = false
83
82
  @preview = false
84
- # @editmode = !params['edit'].nil? && user.is_allowed('pages', 'edit') ? true : false
85
- # @crumb_trail = Caboose::Page.crumb_trail(@page)
86
- # @subnav = Caboose::Page.subnav(@page, session['use_redirect_urls'], @user)
87
- #@subnav.links = @tasks.collect {|href, task| {'href' => href, 'text' => task, 'is_current' => uri == href}}
88
-
83
+
89
84
  end
90
85
 
91
86
  def asset
@@ -6,36 +6,34 @@ module Caboose
6
6
  def index
7
7
  @return_url = params[:return_url].nil? ? "/" : params[:return_url];
8
8
  @modal = params[:modal].nil? ? false : params[:modal]
9
- redirect_to @return_url if logged_in?
10
- render :layout => Caboose::register_layout
9
+ redirect_to @return_url and return if logged_in?
10
+ @page.title = "Create an Account" if @page
11
+ render :layout => "caboose/application"
11
12
  end
12
13
 
13
14
  # @route POST /register
14
15
  def register
15
-
16
16
  resp = StdClass.new('error' => '', 'redirect' => '')
17
17
  return_url = params[:return_url].nil? ? "/" : params[:return_url];
18
-
19
18
  if logged_in?
20
19
  resp.error = "Already logged in"
21
20
  elsif !@site.allow_self_registration
22
21
  resp.error = "This site doesn't allow self registration."
23
22
  else
24
-
25
23
  first_name = params[:first_name]
26
24
  last_name = params[:last_name]
27
25
  email = params[:email]
28
26
  phone = params[:phone]
29
27
  pass1 = params[:pass1]
30
- pass2 = params[:pass2]
31
-
32
- if first_name.nil? || first_name.strip.length == 0 then resp.error = "Your first name is required."
33
- elsif last_name.nil? || last_name.strip.length == 0 then resp.error = "Your last name is required."
34
- elsif email.nil? || email.strip.length == 0 then resp.error = "Your email address is required."
28
+ pass2 = params[:pass2]
29
+ if first_name.blank? then resp.error = "Your first name is required."
30
+ elsif last_name.blank? then resp.error = "Your last name is required."
31
+ elsif !(email.strip.downcase).match(URI::MailTo::EMAIL_REGEXP).present? then resp.error = "Email address is invalid."
32
+ elsif email.blank? then resp.error = "Your email address is required."
35
33
  elsif User.where(:site_id => @site.id, :email => email.strip.downcase).exists? then resp.error = "A user with that email address already exists."
36
- elsif phone.nil? || phone.strip.length < 10 then resp.error = "Your phone number is required. Please include your area code."
37
- elsif pass1.nil? || pass1.strip.length < 8 then resp.error = "Your password must be at least 8 characters."
38
- elsif pass2.nil? || pass1 != pass2 then resp.error = "Your passwords don't match."
34
+ # elsif phone.nil? || phone.strip.length < 10 then resp.error = "Your phone number is required. Please include your area code."
35
+ elsif pass1.blank? || pass1.strip.length < 8 then resp.error = "Your password must be at least 8 characters."
36
+ elsif pass2.blank? || pass1 != pass2 then resp.error = "Your passwords don't match."
39
37
  else
40
38
 
41
39
  u = Caboose::User.new
@@ -52,7 +50,7 @@ module Caboose
52
50
  u = Caboose::User.find(u.id)
53
51
  login_user(u, true)
54
52
 
55
- resp.redirect = "/login?return_url=#{return_url}"
53
+ resp.redirect = return_url
56
54
 
57
55
  end
58
56
  end
@@ -12,7 +12,6 @@ module Caboose
12
12
  # Non-admin actions
13
13
  #===========================================================================
14
14
 
15
-
16
15
 
17
16
  #===========================================================================
18
17
  # Admin actions
@@ -27,7 +26,6 @@ module Caboose
27
26
  # @route GET /admin/users/json
28
27
  def admin_json
29
28
  return if !user_is_allowed('users', 'view')
30
-
31
29
  pager = PageBarGenerator.new(params, {
32
30
  'site_id' => @site.id,
33
31
  'first_name_like' => '',
@@ -50,7 +48,7 @@ module Caboose
50
48
  # @route GET /admin/users/:id/json
51
49
  def admin_json_single
52
50
  return if !user_is_allowed('users', 'view')
53
- u = User.find(params[:id])
51
+ u = get_edit_user(params[:id], @site.id)
54
52
  render :json => u.as_json(:include => :roles)
55
53
  end
56
54
 
@@ -58,7 +56,7 @@ module Caboose
58
56
  def admin_stripe_json_single
59
57
  return if !user_is_allowed('users', 'view')
60
58
  sc = @site.store_config
61
- u = User.find(params[:id])
59
+ u = get_edit_user(params[:id], @site.id)
62
60
  render :json => {
63
61
  :stripe_key => sc.stripe_publishable_key.strip,
64
62
  :customer_id => u.stripe_customer_id,
@@ -83,17 +81,19 @@ module Caboose
83
81
  # @route GET /admin/users/:id
84
82
  def admin_edit
85
83
  return if !user_is_allowed('users', 'edit')
86
- @edituser = User.find(params[:id])
84
+ @edituser = get_edit_user(params[:id], @site.id)
87
85
  @all_roles = Role.tree(@site.id)
88
- @roles = Role.roles_with_user(@edituser.id)
86
+ @roles = Role.roles_with_user(@edituser.id) if @edituser
87
+ redirect_to '/admin/users' if @edituser.nil?
89
88
  end
90
89
 
91
90
  # @route GET /admin/users/:id/roles
92
91
  def admin_edit_roles
93
92
  return if !user_is_allowed('users', 'edit')
94
- @edituser = User.find(params[:id])
93
+ @edituser = get_edit_user(params[:id], @site.id)
95
94
  @all_roles = Role.tree(@site.id)
96
- @roles = Role.roles_with_user(@edituser.id)
95
+ @roles = Role.roles_with_user(@edituser.id) if @edituser
96
+ redirect_to '/admin/users' if @edituser.nil?
97
97
  end
98
98
 
99
99
  # @route GET /admin/users/exports/:id/json
@@ -123,13 +123,14 @@ module Caboose
123
123
  # @route GET /admin/users/:id/payment-method
124
124
  def admin_edit_payment_method
125
125
  return if !user_is_allowed('users', 'edit')
126
- @edituser = User.find(params[:id])
126
+ @edituser = get_edit_user(params[:id], @site.id)
127
127
  end
128
128
 
129
129
  # @route GET /admin/users/:id/password
130
130
  def admin_edit_password
131
131
  return if !user_is_allowed('users', 'edit')
132
- @edituser = User.find(params[:id])
132
+ @edituser = get_edit_user(params[:id], @site.id)
133
+ redirect_to '/admin/users' if @edituser.nil?
133
134
  end
134
135
 
135
136
  def random_string(length)
@@ -140,7 +141,8 @@ module Caboose
140
141
  # @route GET /admin/users/:id/delete
141
142
  def admin_delete_form
142
143
  return if !user_is_allowed('users', 'edit')
143
- @edituser = User.find(params[:id])
144
+ @edituser = get_edit_user(params[:id], @site.id)
145
+ redirect_to '/admin/users' if @edituser.nil?
144
146
  end
145
147
 
146
148
  # @route POST /admin/users/import
@@ -237,7 +239,7 @@ module Caboose
237
239
  return if !user_is_allowed('users', 'edit')
238
240
 
239
241
  resp = StdClass.new
240
- user = User.find(params[:id])
242
+ user = get_edit_user(params[:id], @site.id)
241
243
 
242
244
  save = true
243
245
  params.each do |name,value|
@@ -318,18 +320,12 @@ module Caboose
318
320
  resp.success = save && user.save
319
321
  render json: resp
320
322
  end
321
-
322
- # @route POST /admin/users/:id/update-pic
323
- def admin_update_pic
324
- @edituser = User.find(params[:id])
325
- @new_value = "Testing"
326
- end
327
323
 
328
324
  # @route DELETE /admin/users/bulk
329
325
  def admin_bulk_delete
330
326
  return unless user_is_allowed_to 'delete', 'users'
331
327
  params[:model_ids].each do |user_id|
332
- user = User.where(:id => user_id).first
328
+ user = get_edit_user(user_id, @site.id)
333
329
  user.destroy if user
334
330
  end
335
331
  resp = Caboose::StdClass.new('success' => true)
@@ -339,9 +335,8 @@ module Caboose
339
335
  # @route DELETE /admin/users/:id
340
336
  def admin_delete
341
337
  return if !user_is_allowed('users', 'delete')
342
- user = User.find(params[:id])
338
+ user = get_edit_user(params[:id], @site.id)
343
339
  user.destroy
344
-
345
340
  resp = StdClass.new({
346
341
  'redirect' => '/admin/users'
347
342
  })
@@ -351,8 +346,10 @@ module Caboose
351
346
  # @route POST /admin/users/:id/roles/:role_id
352
347
  def admin_add_to_role
353
348
  return if !user_is_allowed('users', 'edit')
354
- if !RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).exists?
355
- RoleMembership.create(:user_id => params[:id], :role_id => params[:role_id])
349
+ user = get_edit_user(params[:id], @site.id)
350
+ role = Role.where(:id => params[:role_id], :site_id => @site.id).first
351
+ if user && role && !RoleMembership.where(:user_id => user.id, :role_id => role.id).exists?
352
+ RoleMembership.create(:user_id => user.id, :role_id => role.id)
356
353
  end
357
354
  render :json => true
358
355
  end
@@ -360,7 +357,11 @@ module Caboose
360
357
  # @route DELETE /admin/users/:id/roles/:role_id
361
358
  def admin_remove_from_role
362
359
  return if !user_is_allowed('users', 'edit')
363
- RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).destroy_all
360
+ user = get_edit_user(params[:id], @site.id)
361
+ role = Role.where(:id => params[:role_id], :site_id => @site.id).first
362
+ if user && role
363
+ RoleMembership.where(:user_id => user.id, :role_id => role.id).destroy_all
364
+ end
364
365
  render :json => true
365
366
  end
366
367
 
@@ -377,33 +378,18 @@ module Caboose
377
378
  # @route GET /admin/users/:id/su
378
379
  def admin_su
379
380
  return if !user_is_allowed('users', 'sudo')
380
- user = User.find(params[:id])
381
-
382
- ## See if we're on the default domain
383
- #d = Caboose::Domain.where(:domain => request.host_with_port).first
384
- #
385
- #if d.primary == true
386
- # logout_user
387
- # login_user(user, false) # Login the new user
388
- # redirect_to "/"
389
- #end
390
- #
391
- ## Set a random token for the user
392
- #user.token = (0...20).map { ('a'..'z').to_a[rand(26)] }.join
393
- #user.save
394
- #
395
- #redirect_to "http://#{d.site.primary_domain.domain}/admin/users/#{params[:id]}/su/#{user.token}"
396
-
397
- logout_user
398
- login_user(user, false) # Login the new user
399
- redirect_to "/"
381
+ user = get_edit_user(params[:id], @site.id)
382
+ if user
383
+ logout_user
384
+ login_user(user, false)
385
+ redirect_to "/"
386
+ end
400
387
  end
401
388
 
402
389
  # @route GET /admin/users/:id/su/:token
403
390
  def admin_su_token
404
391
  return if params[:token].nil?
405
- user = User.find(params[:id])
406
-
392
+ user = get_edit_user(params[:id], @site.id)
407
393
  token = params[:token]
408
394
  if user.token == params[:token]
409
395
  if logged_in? || logged_in_user.id == User::LOGGED_OUT_USER_ID
@@ -420,6 +406,14 @@ module Caboose
420
406
  render :json => false
421
407
  end
422
408
  end
409
+
410
+ private
411
+
412
+ def get_edit_user(user_id, site_id)
413
+ user = User.find(user_id)
414
+ return user if user && (user.site_id == site_id || logged_in_user.is_super_admin?)
415
+ return nil
416
+ end
423
417
 
424
418
  end
425
419
  end
@@ -8,8 +8,9 @@ module Caboose
8
8
 
9
9
  def locked_account(user)
10
10
  @user = user
11
- mail(:to => user.email, :subject => "#{user.site.description} Locked Account")
12
- end
11
+ admin_email = user.site.contact_email
12
+ mail(:to => admin_email, :subject => "#{user.site.description} Locked Account") if !admin_email.blank?
13
+ end
13
14
 
14
15
  end
15
16
  end
@@ -51,12 +51,12 @@ module Caboose
51
51
  resp.user = user
52
52
  ll.success = true
53
53
  else
54
- resp.error = "Invalid credentials"
54
+ resp.error = "Your username or password is incorrect."
55
55
  ll.success = false
56
56
  end
57
57
 
58
58
  else
59
- resp.error = "Invalid credentials"
59
+ resp.error = "Your username or password is incorrect."
60
60
  ll.success = false
61
61
  end
62
62
 
@@ -3,11 +3,13 @@ class Caboose::BlockTypeCategory < ActiveRecord::Base
3
3
  self.table_name = "block_type_categories"
4
4
 
5
5
  belongs_to :parent, :foreign_key => 'parent_id', :class_name => 'Caboose::BlockTypeCategory'
6
- has_many :children, :foreign_key => 'parent_id', :class_name => 'Caboose::BlockTypeCategory', :dependent => :destroy, :order => :name
6
+ has_many :children, :foreign_key => 'parent_id', :class_name => 'Caboose::BlockTypeCategory', :dependent => :destroy, :order => :sort_order
7
7
  has_many :block_types
8
8
  attr_accessible :id,
9
9
  :parent_id,
10
- :name
10
+ :name,
11
+ :sort_order,
12
+ :show_in_sidebar
11
13
 
12
14
  def self.layouts
13
15
  self.where("name = ? and parent_id is null", 'Layouts').reorder(:name).all