caboose-cms 0.3.32 → 0.3.33

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGE4OWQ5MjhhZTk1ZDM2MTBhNjU0MzQyNjc0ZjExNDcwMGE5ZmMxYw==
4
+ N2U2MzU1ZGVlMDI2MjBmNzdkYjhkNjcxYWI5YzY4ZTNiNTEyYjkwNA==
5
5
  data.tar.gz: !binary |-
6
- Y2Q1YjRkYzUwY2EzNzIyMzRhY2U2NWZkM2ExN2VmOGM0YjExM2MyYw==
6
+ ZTczYjRkOTRhZWFjYmNkYmEzM2Y2MWIyZDkwZmM1ZTFlYWFkNGI0NQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OTZlMTgxNzY0MjgwNjEzNDVhMGU2ZGM1YWI2YWYxY2FmYzhmZTUzNzVkNWU3
10
- ODA4MzE3YTI0YWRkNzgzOGFhNGUzY2MxZDA2MTliYjMxMjVmYmJhMzRjYTI4
11
- NTg5MzYyN2NmZWI0YWY5ZmNlN2NmYzJjYzg5YzlkNzkxYTUwMzI=
9
+ ODYyZjU0Y2IzZWE2YmZhNTYxNmQ2ZWM4OTZlNjc4ZDIyMzA5NmIwZWJiZDQ5
10
+ NzgxYjU0YzgxZmM5MTZiNTgzMWY0OWVkZjYyOTVkN2Y5ZTJmNGVlNzM2YmUx
11
+ ZGY1MDJkZDE4OGQzZGI3ODQyZGZmMTIwMDdjYjE4MzEyNGZiMzk=
12
12
  data.tar.gz: !binary |-
13
- MzMyZTk4MTc3ZjQ2MzQ2N2E5ZjIzZDU4YzYxYTgxMTI1MDM4OGY4MzdmMGIy
14
- NzBkZWYwZWZmMTI1MmU1MTdkNmI3M2UzN2NlMWM4MWZlMThkMzY0MjdjNGFm
15
- YjhlMDBiNWYxMzYxMmQyNzY3YTViY2YxNmFmOTFlZjkyOGZkNzk=
13
+ NDEwNTIzNDk0MTRjOTVlZTA1NWE0ZjE1YTU0MzU3NzRlODMwN2ZlNGMxNzBm
14
+ ZDEwMjk1Mjc5OWQxZWQ2OTI0Y2FiYzljYzlmNzVhMjQ1NWQ4YzkxMzZlNjYw
15
+ N2U1MThhNWJhMzBhNGEwNzRmODg4NTBmNDE1ZDQzZmU4NjU4YmE=
@@ -84,14 +84,18 @@ function caboose_modal_url(url)
84
84
  }
85
85
 
86
86
  function caboose_fix_colorbox() {
87
+ var color = '#111';
88
+ if (typeof COLORBOX_COLOR !== 'undefined')
89
+ color = COLORBOX_COLOR;
90
+
87
91
  var padding = 21; // 21 is default
88
- $("#cboxTopLeft" ).css('background', '#111');
89
- $("#cboxTopRight" ).css('background', '#111');
90
- $("#cboxBottomLeft" ).css('background', '#111');
91
- $("#cboxBottomRight" ).css('background', '#111');
92
- $("#cboxMiddleLeft" ).css('background', '#111');
93
- $("#cboxMiddleRight" ).css('background', '#111');
94
- $("#cboxTopCenter" ).css('background', '#111');
95
- $("#cboxBottomCenter" ).css('background', '#111');
92
+ $("#cboxTopLeft" ).css('background', color);
93
+ $("#cboxTopRight" ).css('background', color);
94
+ $("#cboxBottomLeft" ).css('background', color);
95
+ $("#cboxBottomRight" ).css('background', color);
96
+ $("#cboxMiddleLeft" ).css('background', color);
97
+ $("#cboxMiddleRight" ).css('background', color);
98
+ $("#cboxTopCenter" ).css('background', color);
99
+ $("#cboxBottomCenter" ).css('background', color);
96
100
  $("#cboxClose" ).hide();
97
101
  }
@@ -83,7 +83,7 @@ BoundImage = BoundControl.extend({
83
83
  if (resp.error)
84
84
  this.error(resp.error);
85
85
  else
86
- $('#'+this.el+'_container img').attr('src', this.attribute.value);
86
+ $('#'+this.el+'_container img').attr('src', this.attribute.value + '?' + Math.random());
87
87
  },
88
88
 
89
89
  error: function(str) {
@@ -25,7 +25,7 @@ module Caboose
25
25
  @is_real_page = false
26
26
 
27
27
  # Sets an instance variable of the logged in user
28
- @logged_in_user = logged_in_user
28
+ @logged_in_user = logged_in_user
29
29
 
30
30
  before_action
31
31
  end
@@ -39,5 +39,91 @@ module Caboose
39
39
  end
40
40
  render :json => resp
41
41
  end
42
- end
42
+
43
+ # GET /login/forgot-password
44
+ def forgot_password_form
45
+ @return_url = params[:return_url].nil? ? "/" : params[:return_url]
46
+ @modal = params[:modal].nil? ? false : params[:modal]
47
+ redirect_to @return_url if logged_in?
48
+ end
49
+
50
+ # POST /login/forgot-password
51
+ def send_reset_email
52
+ @return_url = params[:return_url].nil? ? "/" : params[:return_url]
53
+ redirect_to @return_url if logged_in?
54
+
55
+ resp = Caboose::StdClass.new
56
+ username = params[:username]
57
+
58
+ if username.nil? || username.strip.length == 0
59
+ resp.error = "You must enter a username."
60
+ render :json => resp
61
+ return
62
+ end
63
+
64
+ bob = nil
65
+ bob = Caboose::User.where(:username => username).first if Caboose::User.where(:username => username).exists?
66
+ bob = Caboose::User.where(:email => username).first if bob.nil? && bob = Caboose::User.where(:email => username)
67
+
68
+ if bob.nil?
69
+ resp.error = "The given username is not in our system."
70
+ render :json => resp
71
+ return
72
+ end
73
+
74
+ rand = Array.new(20){rand(36).to_s(36)}.join
75
+ bob.password_reset_id = rand
76
+ bob.password_reset_sent = DateTime.now
77
+ bob.save
78
+
79
+ LoginMailer.forgot_password_email(bob).deliver
80
+
81
+ resp.success = "We just sent you an email. The reset link inside is good for 3 days."
82
+ render :json => resp
83
+ end
84
+
85
+ # GET /login/reset-password/:reset_id
86
+ def reset_password_form
87
+ @return_url = params[:return_url].nil? ? "/" : params[:return_url]
88
+ redirect_to @return_url if logged_in?
89
+
90
+ @reset_id = params[:reset_id]
91
+ @user = Caboose::User.user_for_reset_id(@reset_id)
92
+ end
93
+
94
+ # POST /login/reset-password
95
+ def reset_password
96
+ @return_url = params[:return_url].nil? ? "/" : params[:return_url]
97
+ redirect_to @return_url if logged_in?
98
+
99
+ resp = Caboose::StdClass.new
100
+
101
+ reset_id = params[:id]
102
+ pass1 = params[:pass1]
103
+ pass2 = params[:pass2]
104
+
105
+ if reset_id.nil? || reset_id.strip.length == 0
106
+ resp.error = "No reset ID was given."
107
+ else
108
+ user = Caboose::User.user_for_reset_id(reset_id)
109
+
110
+ if user.nil?
111
+ resp.error = "The given reset ID is invalid."
112
+ elsif pass1 != pass2
113
+ resp.error = "Passwords don't match."
114
+ elsif pass1.length < 8
115
+ resp.error = "Passwords must be at least 8 characters"
116
+ else
117
+ user.password = Digest::SHA1.hexdigest(Caboose::salt + pass1)
118
+ user.password_reset_id = ''
119
+ user.password_reset_sent = ''
120
+ user.save
121
+ resp.redirect = '/login'
122
+ end
123
+
124
+ end
125
+ render :json => resp
126
+ end
127
+
128
+ end
43
129
  end
@@ -0,0 +1,10 @@
1
+ module Caboose
2
+ class ModalController < Caboose::ApplicationController
3
+ layout 'caboose/application'
4
+
5
+ # GET /modal/:url
6
+ def index
7
+ @url = "/#{params[:url]}"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Caboose
2
+ class LoginMailer < ActionMailer::Base
3
+ default :from => Caboose::email_from
4
+
5
+ def forgot_password_email(user)
6
+ @user = user
7
+ mail(:to => user.email, :subject => "#{Caboose::website_name} Forgot Password")
8
+ end
9
+ end
10
+ end
@@ -54,4 +54,13 @@ class Caboose::User < ActiveRecord::Base
54
54
  end
55
55
  return false
56
56
  end
57
+
58
+ def self.user_for_reset_id(reset_id)
59
+ return nil if reset_id.nil?
60
+ d = DateTime.now - 3.days
61
+ if self.where("password_reset_id = ? and password_reset_sent > ?", reset_id, d).exists?
62
+ return self.where("password_reset_id = ? and password_reset_sent > ?", reset_id, d).first
63
+ end
64
+ return nil
65
+ end
57
66
  end
@@ -0,0 +1,59 @@
1
+
2
+ <form action='/login/forgot-password' method='post' id='forgot_form'>
3
+ <h1>Forgot Password</h1>
4
+ <div id='content3'>
5
+ <p>Enter your username or email address and we'll send you a link that lets you reset your password.</p>
6
+ <input type='hidden' name='return_url' value='<%= @return_url %>' />
7
+ <input type='text' name='username' id='username' placeholder='Login or email' />
8
+ <div id='message'></div>
9
+ <p>
10
+ <input type='button' id='btn_cancel' value='Cancel' onclick="parent.$.fn.colorbox.close();" />
11
+ <input type='submit' id='btn_login' value='Help Me Remember' onclick='send_forgot_password_link(); return false;' />
12
+ </p>
13
+ </div>
14
+ </form>
15
+
16
+ <% content_for :caboose_css do %>
17
+ <style type="text/css">
18
+ #modal_content input[type="checkbox"] { position: relative; }
19
+ </style>
20
+ <% end %>
21
+ <% content_for :caboose_js do %>
22
+ <script type='text/javascript'>
23
+
24
+ var modal = false;
25
+ $(window).load(function() {
26
+ modal = new CabooseModal(400);
27
+ });
28
+
29
+ function send_forgot_password_link()
30
+ {
31
+ modal.autosize("<p class='loading'>Retrieving info...</p>");
32
+ $.ajax({
33
+ url: '/login/forgot-password',
34
+ type: 'post',
35
+ data: $('#forgot_form').serialize(),
36
+ success: function(resp) {
37
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
38
+ if (resp.success)
39
+ {
40
+ //modal.autosize("<p class='note success'>" + resp.success + "</p>");
41
+ var div = $('<div/>')
42
+ .append($('<p/>').addClass('note success').html(resp.success))
43
+ .append($('<p/>').append($('<input/>').attr('type', 'button').val('Close').click(function() { modal.close(); })));
44
+ $('#content3').empty().append(div);
45
+ modal.autosize();
46
+ }
47
+ //if (resp.redirect != false) <%= @modal ? "" : "parent." %>window.location = resp.redirect;
48
+ //else parent.location.reload(true);
49
+ },
50
+ error: function() {
51
+ modal.autosize("<p class='note error'>Error</p>");
52
+ }
53
+ });
54
+ }
55
+ </script>
56
+ <% end %>
57
+ <%= content_for :caboose_css do %>
58
+ <%= stylesheet_link_tag "caboose/login", :media => "all" %>
59
+ <% end %>
@@ -1,15 +1,16 @@
1
1
 
2
2
  <form action='/login' method='post' id='login_form'>
3
- <p class='other_options'>
4
- <a href='/register?return_url=<%= @return_url %>'>Need to register?</a>
5
- </p>
6
3
  <h1>Login</h1>
7
4
  <input type='hidden' name='return_url' value='<%= @return_url %>' />
8
5
  <input type='text' name='username' id='username' placeholder='Login or email' />
9
6
  <input type='password' name='password' id='password' placeholder='Password' />
10
7
  <input type='checkbox' name='remember' id='remember' value='1' checked='true' /> Remember me
8
+ <ul class='other_options'>
9
+ <li><a href='/register?return_url=<%= @return_url %>'>Need to register?</a></li>
10
+ <li><a href='/login/forgot-password?return_url=<%= @return_url %>'>Forgot your password?</a></li>
11
+ </ul>
11
12
  <div id='message'></div>
12
- <p>
13
+ <p class='buttons'>
13
14
  <input type='button' id='btn_cancel' value='Cancel' onclick="parent.$.fn.colorbox.close();" />
14
15
  <input type='submit' id='btn_login' value='Login' onclick='login(); return false;' />
15
16
  </p>
@@ -22,7 +23,12 @@
22
23
  <% end %>
23
24
  <% content_for :caboose_js do %>
24
25
  <script type='text/javascript'>
25
- var modal = new CabooseModal(400);
26
+
27
+ var modal = false;
28
+ $(window).load(function() {
29
+ modal = new CabooseModal(400);
30
+ });
31
+
26
32
  function login()
27
33
  {
28
34
  modal.autosize("<p class='loading'>Logging in...</p>");
@@ -43,6 +49,7 @@ function login()
43
49
  }
44
50
  });
45
51
  }
52
+
46
53
  </script>
47
54
  <% end %>
48
55
  <%= content_for :caboose_css do %>
@@ -0,0 +1,46 @@
1
+ <h1>Reset Password</h1>
2
+
3
+ <% if @user.nil? %>
4
+ <p class='note error'>The given reset ID is invalid.</p>
5
+ <p class='buttons'><input type='button' value='Close' onclick="parent.window.location='/';" /></p>
6
+ <% else %>
7
+ <form action='/login/reset-password' method='post' id='reset_password_form'>
8
+ <input type='hidden' name='id' id='id' value='<%= @reset_id %>' />
9
+ <table cellpadding='4' cellspacing='0' border='0'>
10
+ <tr><td>New Password: </td><td><input type='password' name='pass1' id='pass1' style='width: 250px;' /></td></tr>
11
+ <tr><td>Confirm: </td><td><input type='password' name='pass2' id='pass2' style='width: 250px;' /></td></tr>
12
+ </table><br />
13
+ <div id='message'></div>
14
+ <p class='buttons'>
15
+ <input type='submit' value='Reset Password' onclick='reset_password(); return false;' />
16
+ <input type='button' value='Cancel' onclick="window.location='/';" />
17
+ </p>
18
+ </form>
19
+ <% end %>
20
+
21
+ <%= content_for :caboose_js do %>
22
+ <script type='text/javascript'>
23
+
24
+ var modal = false;
25
+ $(window).load(function() {
26
+ modal = new CabooseModal(400);
27
+ });
28
+
29
+ <% if !@user.nil? %>
30
+ function reset_password()
31
+ {
32
+ $.ajax({
33
+ url: '/login/reset-password',
34
+ type: 'post',
35
+ data: $('#reset_password_form').serialize(),
36
+ success: function(resp) {
37
+ if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
38
+ if (resp.redirect) window.location = resp.redirect;
39
+ }
40
+ });
41
+ }
42
+ <% end %>
43
+
44
+ </script>
45
+ <% end %>
46
+
@@ -0,0 +1,8 @@
1
+ <% if @user %>
2
+ <%
3
+ url = "#{Caboose::website_domain}/modal/login/reset-password/#{@user.password_reset_id}"
4
+ %>
5
+ <p>To reset your <%= Caboose::website_name %> website password, click the link below:</p>
6
+ <p><a href='<%= url %>'><%= url %></p>
7
+ <% end %>
8
+
@@ -0,0 +1,9 @@
1
+ <%= content_for :caboose_js do %>
2
+ <script type='text/javascript'>
3
+
4
+ $(document).ready(function() {
5
+ caboose_modal_url(<%= raw Caboose.json(@url) %>);
6
+ });
7
+
8
+ </script>
9
+ <% end %>
@@ -19,6 +19,9 @@
19
19
  </div>
20
20
  </div>
21
21
  <%= javascript_include_tag "caboose/modal" %>
22
+ <% if File.exists?("#{Rails.root}/app/assets/javascripts/modal.js") %>
23
+ <%= javascript_include_tag "modal" %>
24
+ <% end %>
22
25
  <%= yield :caboose_js %>
23
26
  </body>
24
27
  </html>
@@ -5,11 +5,17 @@ Caboose::Engine.routes.draw do
5
5
  get "station" => "station#index"
6
6
  get "station/plugin-count" => "station#plugin_count"
7
7
 
8
- get "login" => "login#index"
9
- post "login" => "login#login"
10
- get "logout" => "logout#index"
11
- get "register" => "register#index"
12
- post "register" => "register#register"
8
+ get "modal/:url" => "modal#index", :constraints => {:url => /.*/}
9
+
10
+ get "login/forgot-password" => "login#forgot_password_form"
11
+ post "login/forgot-password" => "login#send_reset_email"
12
+ get "login/reset-password/:reset_id" => "login#reset_password_form"
13
+ post "login/reset-password" => "login#reset_password"
14
+ get "login" => "login#index"
15
+ post "login" => "login#login"
16
+ get "logout" => "logout#index"
17
+ get "register" => "register#index"
18
+ post "register" => "register#register"
13
19
 
14
20
  get "my-account" => "users#my_account"
15
21
  put "my-account" => "users#update_my_account"
@@ -29,5 +29,17 @@ module Caboose
29
29
  # Whether or not to use URL parameters (parameters embedded in the URL before the querystring)
30
30
  mattr_accessor :use_url_params
31
31
  @@use_url_params = true
32
+
33
+ # Website name
34
+ mattr_accessor :website_name
35
+ @@website_name = "Website"
36
+
37
+ # Website domain name (with the protocol)
38
+ mattr_accessor :website_domain
39
+ @@website_domain = "http://www.google.com"
40
+
41
+ # Email settings
42
+ mattr_accessor :email_from
43
+ @@email_from = "webmaster@caboosecms.com"
32
44
 
33
45
  end
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.3.32'
2
+ VERSION = '0.3.33'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.32
4
+ version: 0.3.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-11 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -173,6 +173,7 @@ files:
173
173
  - app/controllers/caboose/application_controller.rb
174
174
  - app/controllers/caboose/login_controller.rb
175
175
  - app/controllers/caboose/logout_controller.rb
176
+ - app/controllers/caboose/modal_controller.rb
176
177
  - app/controllers/caboose/page_block_field_values_controller.rb
177
178
  - app/controllers/caboose/page_block_fields_controller.rb
178
179
  - app/controllers/caboose/page_block_types_controller.rb
@@ -189,6 +190,7 @@ files:
189
190
  - app/helpers/caboose/pages_helper.rb
190
191
  - app/helpers/caboose/permissions_helper.rb
191
192
  - app/helpers/caboose/products_helper.rb
193
+ - app/mailers/caboose/login_mailer.rb
192
194
  - app/models/caboose/ab_option.rb
193
195
  - app/models/caboose/ab_testing.rb
194
196
  - app/models/caboose/ab_value.rb
@@ -235,7 +237,11 @@ files:
235
237
  - app/views/caboose/application/show.html.erb
236
238
  - app/views/caboose/extras/error.html.erb
237
239
  - app/views/caboose/extras/error404.html.erb
240
+ - app/views/caboose/login/forgot_password_form.html.erb
238
241
  - app/views/caboose/login/index.html.erb
242
+ - app/views/caboose/login/reset_password_form.html.erb
243
+ - app/views/caboose/login_mailer/forgot_password_email.html.erb
244
+ - app/views/caboose/modal/index.html.erb
239
245
  - app/views/caboose/page_block_fields/admin_edit.html.erb
240
246
  - app/views/caboose/page_block_fields/admin_new.html.erb
241
247
  - app/views/caboose/page_block_types/admin_edit.html.erb