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 +8 -8
- data/app/assets/javascripts/caboose/modal_integration.js +12 -8
- data/app/assets/javascripts/caboose/model/bound_image.js +1 -1
- data/app/controllers/caboose/application_controller.rb +1 -1
- data/app/controllers/caboose/login_controller.rb +87 -1
- data/app/controllers/caboose/modal_controller.rb +10 -0
- data/app/mailers/caboose/login_mailer.rb +10 -0
- data/app/models/caboose/user.rb +9 -0
- data/app/views/caboose/login/forgot_password_form.html.erb +59 -0
- data/app/views/caboose/login/index.html.erb +12 -5
- data/app/views/caboose/login/reset_password_form.html.erb +46 -0
- data/app/views/caboose/login_mailer/forgot_password_email.html.erb +8 -0
- data/app/views/caboose/modal/index.html.erb +9 -0
- data/app/views/layouts/caboose/modal.html.erb +3 -0
- data/config/routes.rb +11 -5
- data/lib/caboose.rb +12 -0
- data/lib/caboose/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2U2MzU1ZGVlMDI2MjBmNzdkYjhkNjcxYWI5YzY4ZTNiNTEyYjkwNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTczYjRkOTRhZWFjYmNkYmEzM2Y2MWIyZDkwZmM1ZTFlYWFkNGI0NQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODYyZjU0Y2IzZWE2YmZhNTYxNmQ2ZWM4OTZlNjc4ZDIyMzA5NmIwZWJiZDQ5
|
10
|
+
NzgxYjU0YzgxZmM5MTZiNTgzMWY0OWVkZjYyOTVkN2Y5ZTJmNGVlNzM2YmUx
|
11
|
+
ZGY1MDJkZDE4OGQzZGI3ODQyZGZmMTIwMDdjYjE4MzEyNGZiMzk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
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',
|
89
|
-
$("#cboxTopRight" ).css('background',
|
90
|
-
$("#cboxBottomLeft" ).css('background',
|
91
|
-
$("#cboxBottomRight" ).css('background',
|
92
|
-
$("#cboxMiddleLeft" ).css('background',
|
93
|
-
$("#cboxMiddleRight" ).css('background',
|
94
|
-
$("#cboxTopCenter" ).css('background',
|
95
|
-
$("#cboxBottomCenter" ).css('background',
|
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) {
|
@@ -39,5 +39,91 @@ module Caboose
|
|
39
39
|
end
|
40
40
|
render :json => resp
|
41
41
|
end
|
42
|
-
|
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
|
data/app/models/caboose/user.rb
CHANGED
@@ -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
|
-
|
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
|
+
|
data/config/routes.rb
CHANGED
@@ -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 "
|
9
|
-
|
10
|
-
get "
|
11
|
-
|
12
|
-
|
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"
|
data/lib/caboose.rb
CHANGED
@@ -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
|
data/lib/caboose/version.rb
CHANGED
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.
|
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
|
+
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
|