caboose-cms 0.3.32 → 0.3.33
Sign up to get free protection for your applications and to get access to all the features.
- 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
|