kryptonite 0.0.1
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.
- data/Gemfile +1 -0
- data/MIT-LICENSE +20 -0
- data/PUBLIC_VERSION.yml +4 -0
- data/README.rdoc +209 -0
- data/Rakefile +40 -0
- data/app/controllers/kryptonite/kryptonite_controller.rb +72 -0
- data/app/controllers/kryptonite/password_resets_controller.rb +66 -0
- data/app/controllers/kryptonite/user_sessions_controller.rb +40 -0
- data/app/controllers/kryptonite/users_controller.rb +102 -0
- data/app/helpers/kryptonite/kryptonite_helper.rb +200 -0
- data/app/mailers/kryptonite/kryptonite_notification.rb +39 -0
- data/app/models/kryptonite/user.rb +55 -0
- data/app/models/kryptonite/user_session.rb +8 -0
- data/app/views/kryptonite/kryptonite/blank.html.erb +1 -0
- data/app/views/kryptonite/kryptonite_notification/generate_new_password.erb +12 -0
- data/app/views/kryptonite/kryptonite_notification/new_user_information.erb +12 -0
- data/app/views/kryptonite/kryptonite_notification/password_reset_instructions.erb +11 -0
- data/app/views/kryptonite/password_resets/edit.html.erb +48 -0
- data/app/views/kryptonite/user_sessions/new.html.erb +66 -0
- data/app/views/kryptonite/users/index.html.erb +35 -0
- data/app/views/kryptonite/users/new.html.erb +46 -0
- data/app/views/kryptonite/users/show.html.erb +94 -0
- data/app/views/layouts/kryptonite_auth.html.erb +24 -0
- data/app/views/layouts/kryptonite_main.html.erb +67 -0
- data/config/routes.rb +20 -0
- data/lib/generators/kryptonite/install/USAGE +1 -0
- data/lib/generators/kryptonite/install/install_generator.rb +37 -0
- data/lib/generators/kryptonite/install/templates/app/helpers/kryptonite/config_helper.rb +46 -0
- data/lib/generators/kryptonite/install/templates/app/views/kryptonite/layouts/_left_navigation.html.erb +2 -0
- data/lib/generators/kryptonite/install/templates/app/views/kryptonite/layouts/_right_navigation.html.erb +1 -0
- data/lib/generators/kryptonite/install/templates/db/migrate/kryptonite_create_users.rb +30 -0
- data/lib/generators/kryptonite/install/templates/public/casein/javascripts/custom.js +2 -0
- data/lib/generators/kryptonite/install/templates/public/casein/stylesheets/custom.css +2 -0
- data/lib/generators/kryptonite/install/templates/public/robots.txt +5 -0
- data/lib/generators/kryptonite/scaffold/USAGE +1 -0
- data/lib/generators/kryptonite/scaffold/scaffold_generator.rb +99 -0
- data/lib/generators/kryptonite/scaffold/templates/controller.rb +60 -0
- data/lib/generators/kryptonite/scaffold/templates/migration.rb +13 -0
- data/lib/generators/kryptonite/scaffold/templates/model.rb +3 -0
- data/lib/generators/kryptonite/scaffold/templates/views/_form.html.erb +9 -0
- data/lib/generators/kryptonite/scaffold/templates/views/_table.html.erb +17 -0
- data/lib/generators/kryptonite/scaffold/templates/views/index.html.erb +11 -0
- data/lib/generators/kryptonite/scaffold/templates/views/new.html.erb +18 -0
- data/lib/generators/kryptonite/scaffold/templates/views/show.html.erb +18 -0
- data/lib/generators/kryptonite/update/USAGE +1 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/casein.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/header.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/add.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/delete.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/table.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/alertBg.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/background.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/bottom.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxBg.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxBottom.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxTop.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginSubmit.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/recoverSubmit.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/top.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/nav.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/rightNav.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/rightNavButton.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/images/visitSiteNav.png +0 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/jquery.js +154 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/kryptonite.js +25 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/login.js +24 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/rails.js +132 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/elements.css +307 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/login.css +137 -0
- data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/screen.css +224 -0
- data/lib/generators/kryptonite/update/update_generator.rb +40 -0
- data/lib/kryptonite.rb +3 -0
- data/lib/kryptonite/engine.rb +22 -0
- data/lib/railties/tasks.rake +31 -0
- metadata +169 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
module Kryptonite
|
|
2
|
+
class UsersController < Kryptonite::KryptoniteController
|
|
3
|
+
|
|
4
|
+
unloadable
|
|
5
|
+
|
|
6
|
+
before_filter :needs_admin, :except => [:show, :destroy, :update, :update_password]
|
|
7
|
+
before_filter :needs_admin_or_current_user, :only => [:show, :destroy, :update, :update_password]
|
|
8
|
+
|
|
9
|
+
def index
|
|
10
|
+
@kryptonite_page_title = "Users"
|
|
11
|
+
@users = Kryptonite::User.paginate :order => "login", :page => params[:page]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def new
|
|
15
|
+
@kryptonite_page_title = "Add a new user"
|
|
16
|
+
@kryptonite_user = Kryptonite::User.new
|
|
17
|
+
@kryptonite_user.time_zone = Rails.configuration.time_zone
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create
|
|
21
|
+
@kryptonite_user = Kryptonite::User.new params[:kryptonite_user]
|
|
22
|
+
|
|
23
|
+
if @kryptonite_user.save
|
|
24
|
+
flash[:notice] = "An email has been sent to " + @kryptonite_user.name + " with the new account details"
|
|
25
|
+
redirect_to kryptonite_users_path
|
|
26
|
+
else
|
|
27
|
+
flash.now[:warning] = "There were problems when trying to create a new user"
|
|
28
|
+
render :action => :new
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def show
|
|
33
|
+
@kryptonite_user = Kryptonite::User.find params[:id]
|
|
34
|
+
@kryptonite_page_title = @kryptonite_user.name + " | View User"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def update
|
|
38
|
+
@kryptonite_user = Kryptonite::User.find params[:id]
|
|
39
|
+
@kryptonite_page_title = @kryptonite_user.name + " | Update User"
|
|
40
|
+
|
|
41
|
+
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
|
42
|
+
flash[:notice] = @kryptonite_user.name + " has been updated"
|
|
43
|
+
else
|
|
44
|
+
flash.now[:warning] = "There were problems when trying to update this user"
|
|
45
|
+
render :action => :show
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if @session_user.is_admin?
|
|
50
|
+
redirect_to kryptonite_users_path
|
|
51
|
+
else
|
|
52
|
+
redirect_to :controller => :kryptonite, :action => :index
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def update_password
|
|
57
|
+
@kryptonite_user = Kryptonite::User.find params[:id]
|
|
58
|
+
@kryptonite_page_title = @kryptonite_user.name + " | Update Password"
|
|
59
|
+
|
|
60
|
+
if @kryptonite_user.valid_password? params[:form_current_password]
|
|
61
|
+
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
|
62
|
+
flash.now[:notice] = "Your password has been changed"
|
|
63
|
+
else
|
|
64
|
+
flash.now[:warning] = "There were problems when trying to change the password"
|
|
65
|
+
end
|
|
66
|
+
else
|
|
67
|
+
flash.now[:warning] = "The current password is incorrect"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
render :action => :show
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def reset_password
|
|
74
|
+
@kryptonite_user = Kryptonite::User.find params[:id]
|
|
75
|
+
@kryptonite_page_title = @kryptonite_user.name + " | Reset Password"
|
|
76
|
+
|
|
77
|
+
@kryptonite_user.notify_of_new_password = true unless @kryptonite_user.id == @session_user.id
|
|
78
|
+
|
|
79
|
+
if @kryptonite_user.update_attributes params[:kryptonite_user]
|
|
80
|
+
if @kryptonite_user.id == @session_user.id
|
|
81
|
+
flash.now[:notice] = "Your password has been reset"
|
|
82
|
+
else
|
|
83
|
+
flash.now[:notice] = "Password has been reset and " + @kryptonite_user.name + " has been notified by email"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
else
|
|
87
|
+
flash.now[:warning] = "There were problems when trying to reset this user's password"
|
|
88
|
+
end
|
|
89
|
+
render :action => :show
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def destroy
|
|
93
|
+
user = Kryptonite::User.find params[:id]
|
|
94
|
+
if user.is_admin? == false || Kryptonite::User.has_more_than_one_admin
|
|
95
|
+
user.destroy
|
|
96
|
+
flash[:notice] = user.name + " has been deleted"
|
|
97
|
+
end
|
|
98
|
+
redirect_to kryptonite_users_path
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
module Kryptonite
|
|
2
|
+
module KryptoniteHelper
|
|
3
|
+
|
|
4
|
+
def kryptonite_get_version_info
|
|
5
|
+
YAML::load_file File.join(File.dirname(__FILE__), '..', '..', '..', 'PUBLIC_VERSION.yml')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def kryptonite_get_full_version_string
|
|
9
|
+
version_info = kryptonite_get_version_info
|
|
10
|
+
"v.#{version_info['major']}.#{version_info['minor']}.#{version_info['patch']}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def kryptonite_get_short_version_string
|
|
14
|
+
version_info = kryptonite_get_version_info
|
|
15
|
+
"v.#{version_info['major']}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def kryptonite_generate_page_title
|
|
19
|
+
|
|
20
|
+
if @kryptonite_page_title.nil?
|
|
21
|
+
return kryptonite_config_website_name
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@kryptonite_page_title + " > " + kryptonite_config_website_name
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def kryptonite_get_access_level_text level
|
|
28
|
+
case level
|
|
29
|
+
when $KRYPTONITE_USER_ACCESS_LEVEL_ADMIN
|
|
30
|
+
return "Administrator"
|
|
31
|
+
when $KRYPTONITE_USER_ACCESS_LEVEL_USER
|
|
32
|
+
return "User"
|
|
33
|
+
else
|
|
34
|
+
return "Unknown"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def kryptonite_get_access_level_array
|
|
39
|
+
[["Administrator", $KRYPTONITE_USER_ACCESS_LEVEL_ADMIN], ["User", $KRYPTONITE_USER_ACCESS_LEVEL_USER]]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def kryptonite_table_cell_link contents, link, options = {}
|
|
43
|
+
|
|
44
|
+
if options.key? :kryptonite_truncate
|
|
45
|
+
contents = truncate(contents, :length => options[:kryptonite_truncate], :omission => "...")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
link_to "#{contents}".html_safe, link, options
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def kryptonite_table_cell_no_link contents, options = {}
|
|
52
|
+
|
|
53
|
+
if options.key? :kryptonite_truncate
|
|
54
|
+
contents = truncate(contents, :length => options[:kryptonite_truncate], :omission => "...")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
"<div class='noLink'>#{contents}</div>".html_safe
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def kryptonite_show_icon icon_name
|
|
61
|
+
"<div class='icon'><img src='/kryptonite/images/icons/#{icon_name}.png' alt='' /></div>".html_safe
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def kryptonite_show_row_icon icon_name
|
|
65
|
+
"<div class='iconRow'><img src='/kryptonite/images/icons/#{icon_name}.png' alt='' /></div>".html_safe
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Styled form tag helpers
|
|
69
|
+
|
|
70
|
+
def kryptonite_text_field form, obj, attribute, options = {}
|
|
71
|
+
kryptonite_form_tag_wrapper(form.text_field(attribute, strip_kryptonite_options(options_hash_with_merged_classes(options, 'kryptoniteTextField'))), form, obj, attribute, options).html_safe
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def kryptonite_password_field form, obj, attribute, options = {}
|
|
75
|
+
kryptonite_form_tag_wrapper(form.password_field(attribute, strip_kryptonite_options(options_hash_with_merged_classes(options, 'kryptoniteTextField'))), form, obj, attribute, options).html_safe
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def kryptonite_text_area form, obj, attribute, options = {}
|
|
79
|
+
kryptonite_form_tag_wrapper(form.text_area(attribute, strip_kryptonite_options(options_hash_with_merged_classes(options, 'kryptoniteTextArea'))), form, obj, attribute, options).html_safe
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def kryptonite_text_area_big form, obj, attribute, options = {}
|
|
83
|
+
kryptonite_form_tag_wrapper(form.text_area(attribute, strip_kryptonite_options(options_hash_with_merged_classes(options, 'kryptoniteTextAreaBig'))), form, obj, attribute, options).html_safe
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def kryptonite_check_box form, obj, attribute, options = {}
|
|
87
|
+
form_tag = form.check_box(attribute, strip_kryptonite_options(options))
|
|
88
|
+
|
|
89
|
+
if options.key? :kryptonite_box_label
|
|
90
|
+
form_tag = "<div>" + form_tag + "<span class=\"rcText\">#{options[:kryptonite_box_label]}</span></div>".html_safe
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
kryptonite_form_tag_wrapper(form_tag, form, obj, attribute, options).html_safe
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def kryptonite_check_box_group form, obj, check_boxes = {}
|
|
97
|
+
form_tags = ""
|
|
98
|
+
|
|
99
|
+
for check_box in check_boxes
|
|
100
|
+
form_tags += kryptonite_check_box form, obj, check_box[0], check_box[1]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
kryptonite_form_tag_wrapper form_tag, form, obj, attribute, options
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def kryptonite_radio_button form, obj, attribute, tag_value, options = {}
|
|
107
|
+
form_tag = form.radio_button(obj, attribute, tag_value, strip_kryptonite_options(options))
|
|
108
|
+
|
|
109
|
+
if options.key? :kryptonite_button_label
|
|
110
|
+
form_tag = "<div>" + form_tag + "<span class=\"rcText\">#{options[:kryptonite_button_label]}</span></div>".html_safe
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
kryptonite_form_tag_wrapper(form_tag, form, obj, attribute, options).html_safe
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def kryptonite_radio_button_group form, obj, radio_buttons = {}
|
|
117
|
+
form_tags = ""
|
|
118
|
+
|
|
119
|
+
for radio_button in radio_buttons
|
|
120
|
+
form_tags += kryptonite_radio_button form, obj, check_box[0], check_box[1], check_box[2]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
kryptonite_form_tag_wrapper(form_tag, form, obj, attribute, options).html_safe
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def kryptonite_select form, obj, attribute, option_tags, options = {}
|
|
127
|
+
kryptonite_form_tag_wrapper(form.select(attribute, option_tags, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteSelect')), form, obj, attribute, options).html_safe
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def kryptonite_time_zone_select form, obj, attribute, option_tags, options = {}
|
|
131
|
+
kryptonite_form_tag_wrapper(form.time_zone_select(attribute, option_tags, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteSelect')), form, obj, attribute, options).html_safe
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def kryptonite_collection_select form, obj, object, attribute, collection, value_method, text_method, options = {}
|
|
135
|
+
kryptonite_form_tag_wrapper(collection_select(object, attribute, collection, value_method, text_method, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteSelect')), form, obj, attribute, options).html_safe
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def kryptonite_date_select form, obj, attribute, options = {}
|
|
139
|
+
kryptonite_form_tag_wrapper(form.date_select(attribute, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteDateTimeSelect')), form, obj, attribute, options).html_safe
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def kryptonite_time_select form, obj, attribute, options = {}
|
|
143
|
+
kryptonite_form_tag_wrapper(form.time_select(attribute, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteDateTimeSelect')), form, obj, attribute, options).html_safe
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def kryptonite_datetime_select form, obj, attribute, options = {}
|
|
147
|
+
kryptonite_form_tag_wrapper(form.datetime_select(attribute, strip_kryptonite_options(options), merged_class_hash(options, 'kryptoniteDateTimeSelect')), form, obj, attribute, options).html_safe
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def kryptonite_file_field form, obj, object_name, attribute, options = {}
|
|
151
|
+
class_hash = merged_class_hash(options, 'kryptoniteFileFieldContainer')
|
|
152
|
+
contents = "<div class='#{class_hash[:class]}'>" + file_field(object_name, attribute, strip_kryptonite_options(options)) + '</div>'
|
|
153
|
+
kryptonite_form_tag_wrapper(contents, form, obj, attribute, options).html_safe
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def kryptonite_hidden_field form, obj, attribute, options = {}
|
|
157
|
+
form.hidden_field(attribute, strip_kryptonite_options(options)).html_safe
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
protected
|
|
161
|
+
|
|
162
|
+
def strip_kryptonite_options options
|
|
163
|
+
options.reject {|key, value| key.to_s.include? "kryptonite_" }
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def merged_class_hash options, new_class
|
|
167
|
+
if options.key? :class
|
|
168
|
+
new_class += " #{options[:class]}"
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
{:class => new_class}
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def options_hash_with_merged_classes options, new_class
|
|
175
|
+
if options.key? :class
|
|
176
|
+
new_class += " #{options[:class]}"
|
|
177
|
+
end
|
|
178
|
+
options[:class] = new_class
|
|
179
|
+
options
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def kryptonite_form_tag_wrapper form_tag, form, obj, attribute, options = {}
|
|
183
|
+
unless options.key? :kryptonite_label
|
|
184
|
+
human_attribute_name = attribute.to_s.humanize
|
|
185
|
+
else
|
|
186
|
+
human_attribute_name = options[:kryptonite_label]
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
html = "<p>"
|
|
190
|
+
|
|
191
|
+
if obj && obj.errors[attribute].any?
|
|
192
|
+
html += "<span class='formError'>#{human_attribute_name} #{obj.errors[attribute].first}</span>".html_safe
|
|
193
|
+
else
|
|
194
|
+
html += form.label(attribute, human_attribute_name)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
html += "</p>\n<p>#{form_tag}</p>"
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Kryptonite
|
|
2
|
+
|
|
3
|
+
class KryptoniteNotification < ActionMailer::Base
|
|
4
|
+
|
|
5
|
+
self.prepend_view_path File.join(File.dirname(__FILE__), '..', 'views', 'kryptonite')
|
|
6
|
+
|
|
7
|
+
def generate_new_password from, kryptonite_user, host, pass
|
|
8
|
+
@name = kryptonite_user.name
|
|
9
|
+
@host = host
|
|
10
|
+
@login = kryptonite_user.login
|
|
11
|
+
@pass = pass
|
|
12
|
+
@from_text = kryptonite_config_website_name
|
|
13
|
+
|
|
14
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => "[#{kryptonite_config_website_name}] New password")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def new_user_information from, kryptonite_user, host, pass
|
|
18
|
+
@name = kryptonite_user.name
|
|
19
|
+
@host = host
|
|
20
|
+
@login = kryptonite_user.login
|
|
21
|
+
@pass = pass
|
|
22
|
+
@from_text = kryptonite_config_website_name
|
|
23
|
+
|
|
24
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => "[#{kryptonite_config_website_name}] New user account")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def password_reset_instructions from, kryptonite_user, host
|
|
28
|
+
ActionMailer::Base.default_url_options[:host] = host.gsub("http://", "")
|
|
29
|
+
@name = kryptonite_user.name
|
|
30
|
+
@host = host
|
|
31
|
+
@login = kryptonite_user.login
|
|
32
|
+
@reset_password_url = edit_kryptonite_password_reset_url + "/?token=#{kryptonite_user.perishable_token}"
|
|
33
|
+
@from_text = kryptonite_config_website_name
|
|
34
|
+
|
|
35
|
+
mail(:to => kryptonite_user.email, :from => from, :subject => "[#{kryptonite_config_website_name}] Password reset instructions")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
include Kryptonite::ConfigHelper
|
|
2
|
+
|
|
3
|
+
$KRYPTONITE_USER_ACCESS_LEVEL_ADMIN = 0
|
|
4
|
+
$KRYPTONITE_USER_ACCESS_LEVEL_USER = 10
|
|
5
|
+
|
|
6
|
+
module Kryptonite
|
|
7
|
+
class User < ActiveRecord::Base
|
|
8
|
+
|
|
9
|
+
def self.table_name
|
|
10
|
+
self.to_s.gsub("::", "_").tableize
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
acts_as_authentic { |c| c.validate_email_field = false }
|
|
14
|
+
|
|
15
|
+
attr_accessor :notify_of_new_password
|
|
16
|
+
|
|
17
|
+
after_create :send_create_notification
|
|
18
|
+
after_update :send_update_notification
|
|
19
|
+
before_validation :check_time_zone
|
|
20
|
+
|
|
21
|
+
validates_presence_of :login, :name, :email
|
|
22
|
+
validates_uniqueness_of :login
|
|
23
|
+
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
|
|
24
|
+
validates_presence_of :time_zone
|
|
25
|
+
|
|
26
|
+
def self.has_more_than_one_admin
|
|
27
|
+
Kryptonite::User.where(:access_level => $KRYPTONITE_USER_ACCESS_LEVEL_ADMIN).count > 1
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def send_create_notification
|
|
31
|
+
Kryptonite::KryptoniteNotification.new_user_information(kryptonite_config_email_from_address, self, kryptonite_config_hostname, @password).deliver
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def send_update_notification
|
|
35
|
+
if notify_of_new_password
|
|
36
|
+
notify_of_new_password = false
|
|
37
|
+
Kryptonite::KryptoniteNotification.generate_new_password(kryptonite_config_email_from_address, self, kryptonite_config_hostname, @password).deliver
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def send_password_reset_instructions
|
|
42
|
+
reset_perishable_token!
|
|
43
|
+
Kryptonite::KryptoniteNotification.password_reset_instructions(kryptonite_config_email_from_address, self, kryptonite_config_hostname).deliver
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def check_time_zone
|
|
47
|
+
self.time_zone = Rails.configuration.time_zone unless self.time_zone
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def is_admin?
|
|
51
|
+
access_level == $KRYPTONITE_USER_ACCESS_LEVEL_ADMIN
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h2>Welcome to the <%= kryptonite_config_website_name %> administration system</h2>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Dear <%= @name %>,<br />
|
|
2
|
+
<br />
|
|
3
|
+
Your password has been reset by an administrator for your account at:<br />
|
|
4
|
+
<br />
|
|
5
|
+
<%= @host %>/kryptonite<br />
|
|
6
|
+
<br />
|
|
7
|
+
Login: <%= @login %><br />
|
|
8
|
+
New password: <%= @pass %><br />
|
|
9
|
+
<br />
|
|
10
|
+
From<br />
|
|
11
|
+
<br />
|
|
12
|
+
<%= @from_text %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Dear <%= @name %>,<br />
|
|
2
|
+
<br />
|
|
3
|
+
A request to reset the password for login '<%= @login %>' has been made.<br />
|
|
4
|
+
If you did not make this request, simply ignore this email.<br />
|
|
5
|
+
Otherwise, click the link below to proceed:<br />
|
|
6
|
+
<br />
|
|
7
|
+
<%= @reset_password_url %><br />
|
|
8
|
+
<br />
|
|
9
|
+
From<br />
|
|
10
|
+
<br />
|
|
11
|
+
<%= @from_text %>
|