erp_tech_svcs 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/GPL-3-LICENSE +674 -0
  2. data/README.rdoc +2 -0
  3. data/Rakefile +30 -0
  4. data/app/assets/javascripts/erp_tech_svcs/application.js +9 -0
  5. data/app/assets/stylesheets/erp_tech_svcs/application.css +7 -0
  6. data/app/controllers/erp_tech_svcs/session_controller.rb +19 -0
  7. data/app/controllers/erp_tech_svcs/user_controller.rb +40 -0
  8. data/app/helpers/erp_tech_svcs/application_helper.rb +4 -0
  9. data/app/mailers/user_mailer.rb +16 -0
  10. data/app/models/audit_log.rb +60 -0
  11. data/app/models/audit_log_item.rb +4 -0
  12. data/app/models/audit_log_item_type.rb +6 -0
  13. data/app/models/audit_log_type.rb +24 -0
  14. data/app/models/capability.rb +8 -0
  15. data/app/models/capability_type.rb +3 -0
  16. data/app/models/capable_model.rb +4 -0
  17. data/app/models/encryption_key.rb +9 -0
  18. data/app/models/extensions/contact_purpose.rb +3 -0
  19. data/app/models/extensions/contact_type.rb +3 -0
  20. data/app/models/extensions/note.rb +6 -0
  21. data/app/models/extensions/note_type.rb +3 -0
  22. data/app/models/extensions/party.rb +3 -0
  23. data/app/models/extensions/relationship_type.rb +3 -0
  24. data/app/models/extensions/role_type.rb +3 -0
  25. data/app/models/file_asset.rb +178 -0
  26. data/app/models/role.rb +17 -0
  27. data/app/models/secured_model.rb +13 -0
  28. data/app/models/user.rb +33 -0
  29. data/app/views/layouts/application.html.erb +14 -0
  30. data/app/views/layouts/erp_tech_svcs/application.html.erb +14 -0
  31. data/app/views/user_mailer/activation_needed_email.html.erb +14 -0
  32. data/app/views/user_mailer/reset_password_email.html.erb +14 -0
  33. data/config/initializers/erp_tech_svcs.rb +7 -0
  34. data/config/initializers/file_support.rb +1 -0
  35. data/config/initializers/pdfkit.rb +18 -0
  36. data/config/initializers/sorcery.rb +199 -0
  37. data/config/routes.rb +9 -0
  38. data/db/data_migrations/20110802200222_schedule_delete_expired_sessions_job.rb +15 -0
  39. data/db/data_migrations/20111111144706_setup_audit_log_types.rb +21 -0
  40. data/db/migrate/20080805000010_base_tech_services.rb +247 -0
  41. data/db/migrate/20111109161549_add_capabilites.rb +56 -0
  42. data/db/migrate/upgrade/20111109161550_update_roles.rb +33 -0
  43. data/db/migrate/upgrade/20111109161551_update_user.rb +88 -0
  44. data/lib/erp_tech_svcs/application_installer.rb +102 -0
  45. data/lib/erp_tech_svcs/config.rb +27 -0
  46. data/lib/erp_tech_svcs/engine.rb +14 -0
  47. data/lib/erp_tech_svcs/extensions/active_record/acts_as_versioned.rb +494 -0
  48. data/lib/erp_tech_svcs/extensions/active_record/has_capabilities.rb +139 -0
  49. data/lib/erp_tech_svcs/extensions/active_record/has_file_assets.rb +40 -0
  50. data/lib/erp_tech_svcs/extensions/active_record/has_roles.rb +126 -0
  51. data/lib/erp_tech_svcs/extensions.rb +5 -0
  52. data/lib/erp_tech_svcs/file_support/aws_s3_patch.rb +3 -0
  53. data/lib/erp_tech_svcs/file_support/base.rb +30 -0
  54. data/lib/erp_tech_svcs/file_support/file_manipulator.rb +37 -0
  55. data/lib/erp_tech_svcs/file_support/file_system_manager.rb +167 -0
  56. data/lib/erp_tech_svcs/file_support/manager.rb +147 -0
  57. data/lib/erp_tech_svcs/file_support/paperclip_patch.rb +28 -0
  58. data/lib/erp_tech_svcs/file_support/railties/s3_resolver.rb +79 -0
  59. data/lib/erp_tech_svcs/file_support/s3_manager.rb +211 -0
  60. data/lib/erp_tech_svcs/file_support.rb +10 -0
  61. data/lib/erp_tech_svcs/sessions/delete_expired_sessions_job.rb +40 -0
  62. data/lib/erp_tech_svcs/sessions/delete_expired_sessions_service.rb +15 -0
  63. data/lib/erp_tech_svcs/utils/attachment_fu_patch.rb +15 -0
  64. data/lib/erp_tech_svcs/utils/compass_access_negotiator.rb +57 -0
  65. data/lib/erp_tech_svcs/utils/compass_logger.rb +94 -0
  66. data/lib/erp_tech_svcs/utils/compass_pdf.rb +72 -0
  67. data/lib/erp_tech_svcs/utils/default_nested_set_methods.rb +33 -0
  68. data/lib/erp_tech_svcs/utils/pdf_processor.rb +106 -0
  69. data/lib/erp_tech_svcs/version.rb +3 -0
  70. data/lib/erp_tech_svcs.rb +20 -0
  71. data/lib/tasks/erp_tech_svcs_tasks.rake +42 -0
  72. data/spec/dummy/Rakefile +7 -0
  73. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  74. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  75. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  76. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  77. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  78. data/spec/dummy/config/application.rb +43 -0
  79. data/spec/dummy/config/boot.rb +10 -0
  80. data/spec/dummy/config/database.yml +8 -0
  81. data/spec/dummy/config/environment.rb +5 -0
  82. data/spec/dummy/config/environments/spec.rb +27 -0
  83. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  84. data/spec/dummy/config/initializers/inflections.rb +10 -0
  85. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  86. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  87. data/spec/dummy/config/initializers/session_store.rb +8 -0
  88. data/spec/dummy/config/initializers/wrap_parameters.rb +12 -0
  89. data/spec/dummy/config/locales/en.yml +5 -0
  90. data/spec/dummy/config/routes.rb +3 -0
  91. data/spec/dummy/config.ru +4 -0
  92. data/spec/dummy/db/schema.rb +571 -0
  93. data/spec/dummy/db/spec.sqlite3 +0 -0
  94. data/spec/dummy/log/spec.log +2862 -0
  95. data/spec/dummy/public/404.html +26 -0
  96. data/spec/dummy/public/422.html +26 -0
  97. data/spec/dummy/public/500.html +26 -0
  98. data/spec/dummy/public/favicon.ico +0 -0
  99. data/spec/dummy/script/rails +6 -0
  100. data/spec/factories/capability_type.rb +5 -0
  101. data/spec/factories/role.rb +5 -0
  102. data/spec/factories/users.rb +9 -0
  103. data/spec/lib/erp_tech_svcs/extensions/active_record/has_roles_spec.rb +68 -0
  104. data/spec/models/audit_log_spec.rb +48 -0
  105. data/spec/models/audit_log_type_spec.rb +9 -0
  106. data/spec/models/role_spec.rb +17 -0
  107. data/spec/models/user_spec.rb +27 -0
  108. data/spec/spec_helper.rb +61 -0
  109. metadata +273 -0
@@ -0,0 +1,199 @@
1
+ # The first thing you need to configure is which modules you need in your app.
2
+ # The default is nothing which will include only core features (password encryption, login/logout).
3
+ # Available submodules are: :user_activation, :http_basic_auth, :remember_me,
4
+ # :reset_password, :session_timeout, :brute_force_protection, :activity_logging, :external
5
+ Rails.application.config.sorcery.submodules = [:user_activation,:remember_me,:reset_password,:brute_force_protection,:activity_logging]
6
+
7
+ # Here you can configure each submodule's features.
8
+ Rails.application.config.sorcery.configure do |config|
9
+ # -- core --
10
+ # config.not_authenticated_action = :not_authenticated # what controller action to call for
11
+ # non-authenticated users.
12
+ # You can also override 'not_authenticated'
13
+ # instead.
14
+
15
+ # config.save_return_to_url = true # when a non logged in user tries to enter
16
+ # a page that requires login,
17
+ # save the URL he wanted to reach,
18
+ # and send him there after login, using
19
+ # 'redirect_back_or_to'.
20
+
21
+ # config.cookie_domain = nil # set domain option for cookies
22
+ # Useful for remember_me submodule
23
+
24
+ # -- session timeout --
25
+ # config.session_timeout = 3600 # how long in seconds to keep the session alive.
26
+ # config.session_timeout_from_last_action = false # use the last action as the beginning of
27
+ # session timeout.
28
+
29
+ # -- http_basic_auth --
30
+ # config.controller_to_realm_map = {"application" => "Application"} # What realm to display for which controller name.
31
+ # For example {"My App" => "Application"}
32
+
33
+ # -- activity logging --
34
+ # config.register_login_time = true # will register the time of last user login, every login.
35
+ # config.register_logout_time = true # will register the time of last user logout, every logout.
36
+ # config.register_last_activity_time = true # will register the time of last user action, every action.
37
+
38
+ # -- external --
39
+ # config.external_providers = [] # What providers are supported by this app,
40
+ # i.e. [:twitter, :facebook, :github] .
41
+ # config.ca_file = 'path/to/ca_file' # Path to ca_file. By default use a internal ca-bundle.crt.
42
+ # You can change it by your local ca_file.
43
+ # i.e. '/etc/pki/tls/certs/ca-bundle.crt'
44
+
45
+ # config.twitter.key = "eYVNBjBDi33aa9GkA3w"
46
+ # config.twitter.secret = "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8"
47
+ # config.twitter.callback_url = "http://0.0.0.0:3000/oauth/callback?provider=twitter"
48
+ # config.twitter.user_info_mapping = {:email => "screen_name"}
49
+ #
50
+ # config.facebook.key = "34cebc81c08a521bc66e212f947d73ec"
51
+ # config.facebook.secret = "5b458d179f61d4f036ee66a497ffbcd0"
52
+ # config.facebook.callback_url = "http://0.0.0.0:3000/oauth/callback?provider=facebook"
53
+ # config.facebook.user_info_mapping = {:email => "name"}
54
+ #
55
+ # config.github.key = ""
56
+ # config.github.secret = ""
57
+ # config.github.callback_url = "http://0.0.0.0:3000/oauth/callback?provider=github"
58
+ # config.github.user_info_mapping = {:email => "name"}
59
+
60
+ # --- user config ---
61
+ config.user_config do |user|
62
+ # -- core --
63
+ user.username_attribute_names = [:username, :email] # specify username
64
+ # attributes, for example:
65
+ # [:username, :email].
66
+
67
+ user.password_attribute_name = :password # change *virtual* password
68
+ # attribute, the one which is used
69
+ # until an encrypted one is
70
+ # generated.
71
+
72
+ # user.email_attribute_name = :email # change default email attribute.
73
+
74
+ # user.crypted_password_attribute_name = :crypted_password # change default crypted_password
75
+ # attribute.
76
+
77
+ # user.salt_join_token = "" # what pattern to use to join the
78
+ # password with the salt
79
+
80
+ # user.salt_attribute_name = :salt # change default salt attribute.
81
+
82
+ # user.stretches = nil # how many times to apply
83
+ # encryption to the password.
84
+
85
+ # user.encryption_key = nil # encryption key used to encrypt
86
+ # reversible encryptions such as
87
+ # AES256.
88
+ #
89
+ # WARNING:
90
+ #
91
+ # If used for users' passwords, changing this key
92
+ # will leave passwords undecryptable!
93
+
94
+ # user.custom_encryption_provider = nil # use an external encryption
95
+ # class.
96
+
97
+ # user.encryption_algorithm = :bcrypt # encryption algorithm name. See
98
+ # 'encryption_algorithm=' for
99
+ # available options.
100
+
101
+ # user.subclasses_inherit_config = false # make this configuration
102
+ # inheritable for subclasses.
103
+ # Useful for ActiveRecord's STI.
104
+
105
+ # -- user_activation --
106
+ # user.activation_state_attribute_name = :activation_state # the attribute name to hold
107
+ # activation state
108
+ # (active/pending).
109
+
110
+ # user.activation_token_attribute_name = :activation_token # the attribute name to hold
111
+ # activation code (sent by email).
112
+
113
+ # user.activation_token_expires_at_attribute_name = :activation_token_expires_at # the attribute name to hold
114
+ # activation code expiration date.
115
+
116
+ # user.activation_token_expiration_period = nil # how many seconds before the
117
+ # activation code expires. nil for
118
+ # never expires.
119
+
120
+ user.user_activation_mailer = UserMailer # your mailer class. Required.
121
+
122
+ # user.activation_needed_email_method_name = :activation_needed_email # activation needed email method
123
+ # on your mailer class.
124
+
125
+ user.activation_success_email_method_name = nil # activation success email method
126
+ # on your mailer class.
127
+
128
+ # user.prevent_non_active_users_to_login = true # do you want to prevent or allow
129
+ # users that did not activate by
130
+ # email to login?
131
+
132
+ # -- reset_password --
133
+ # user.reset_password_token_attribute_name = :reset_password_token # reset password code
134
+ # attribute name.
135
+
136
+ # user.reset_password_token_expires_at_attribute_name = :reset_password_token_expires_at # expires at attribute
137
+ # name.
138
+
139
+ # user.reset_password_email_sent_at_attribute_name = :reset_password_email_sent_at # when was email sent,
140
+ # used for hammering
141
+ # protection.
142
+
143
+ user.reset_password_mailer = UserMailer # mailer class. Needed.
144
+
145
+ # user.reset_password_email_method_name = :reset_password_email # reset password email
146
+ # method on your mailer
147
+ # class.
148
+
149
+ # user.reset_password_expiration_period = nil # how many seconds
150
+ # before the reset
151
+ # request expires. nil
152
+ # for never expires.
153
+
154
+ # user.reset_password_time_between_emails = 5 * 60 # hammering protection,
155
+ # how long to wait
156
+ # before allowing
157
+ # another email to be
158
+ # sent.
159
+
160
+ # -- brute_force_protection --
161
+ # user.failed_logins_count_attribute_name = :failed_logins_count # failed logins attribute name.
162
+
163
+ # user.lock_expires_at_attribute_name = :lock_expires_at # this field indicates whether
164
+ # user is banned and when it will
165
+ # be active again.
166
+
167
+ user.consecutive_login_retries_amount_limit = 5 # how many failed logins allowed.
168
+
169
+ # user.login_lock_time_period = 60 * 60 # how long the user should be
170
+ # banned. in seconds. 0 for
171
+ # permanent.
172
+
173
+ # -- activity logging --
174
+ #user.last_login_at_attribute_name = :last_sign_in_at # last login attribute name.
175
+ # user.last_logout_at_attribute_name = :last_logout_at # last logout attribute name.
176
+ # user.last_activity_at_attribute_name = :last_activity_at # last activity attribute name.
177
+ # user.activity_timeout = 10 * 60 # how long since last activity is
178
+ # the user defined logged out?
179
+
180
+ # -- external --
181
+ # user.authentications_class = nil # class which holds the various
182
+ # external provider data for this
183
+ # user.
184
+
185
+ # user.authentications_user_id_attribute_name = :user_id # user's identifier in
186
+ # authentications class.
187
+
188
+ # user.provider_attribute_name = :provider # provider's identifier in
189
+ # authentications class.
190
+
191
+ # user.provider_uid_attribute_name = :uid # user's external unique
192
+ # identifier in authentications
193
+ # class.
194
+ end
195
+
196
+ # This line must come after the 'user config' block.
197
+ config.user_class = "User" # define which model authenticates
198
+ # with sorcery.
199
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ #handle login / logout
3
+ match "/session/sign_in" => 'erp_tech_svcs/session#create'
4
+ match "/session/sign_out" => 'erp_tech_svcs/session#destroy'
5
+
6
+ #handle activation
7
+ get "/users/activate/:activation_token" => 'erp_tech_svcs/user#activate'
8
+ post "/users/reset_password" => 'erp_tech_svcs/user#reset_password'
9
+ end
@@ -0,0 +1,15 @@
1
+ class ScheduleDeleteExpiredSessionsJob
2
+
3
+ def self.up
4
+ #insert data here
5
+ date = Date.tomorrow
6
+ start_time = DateTime.civil(date.year, date.month, date.day, 2, 0, 1, -(5.0/24.0))
7
+
8
+ ErpTechSvcs::Sessions::DeleteExpiredSessionsJob.schedule_job(start_time)
9
+ end
10
+
11
+ def self.down
12
+ #remove data here
13
+ end
14
+
15
+ end
@@ -0,0 +1,21 @@
1
+ class SetupAuditLogTypes
2
+
3
+ def self.up
4
+ application_alt = AuditLogType.create(:description => 'Application', :internal_identifier => 'application')
5
+
6
+ [
7
+ {:description => 'Custom Message', :internal_identifier => 'custom_message'},
8
+ {:description => 'Successful Logout', :internal_identifier => 'successful_logout'},
9
+ {:description => 'Successful Login', :internal_identifier => 'successful_login'},
10
+ {:description => 'Accessed Area', :internal_identifier => 'accessed_area'},
11
+ {:description => 'Session Timeout', :internal_identifier => 'session_timeout'}
12
+ ].each do |alt_hash|
13
+ AuditLogType.create(alt_hash).move_to_child_of(application_alt)
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ AuditLogType.destroy_all
19
+ end
20
+
21
+ end
@@ -0,0 +1,247 @@
1
+ class BaseTechServices < ActiveRecord::Migration
2
+ def self.up
3
+ unless table_exists?(:users)
4
+ # Create the users table
5
+ create_table :users do |t|
6
+ t.string :username
7
+ t.string :email
8
+ t.references :party
9
+ t.string :type
10
+ t.string :salt, :default => nil
11
+ t.string :crypted_password, :default => nil
12
+
13
+ #activity logging
14
+ t.datetime :last_login_at, :default => nil
15
+ t.datetime :last_logout_at, :default => nil
16
+ t.datetime :last_activity_at, :default => nil
17
+
18
+ #brute force protection
19
+ t.integer :failed_logins_count, :default => 0
20
+ t.datetime :lock_expires_at, :default => nil
21
+
22
+ #remember me
23
+ t.string :remember_me_token, :default => nil
24
+ t.datetime :remember_me_token_expires_at, :default => nil
25
+
26
+ #reset password
27
+ t.string :reset_password_token, :default => nil
28
+ t.datetime :reset_password_token_expires_at, :default => nil
29
+ t.datetime :reset_password_email_sent_at, :default => nil
30
+
31
+ #user activation
32
+ t.string :activation_state, :default => nil
33
+ t.string :activation_token, :default => nil
34
+ t.datetime :activation_token_expires_at, :default => nil
35
+
36
+ t.timestamps
37
+ end
38
+ add_index :users, :email, :unique => true
39
+ add_index :users, :username, :unique => true
40
+ add_index :users, [:last_logout_at, :last_activity_at], :name => 'activity_idx', :unique => true
41
+ add_index :users, :remember_me_token, :unique => true
42
+ add_index :users, :reset_password_token, :unique => true
43
+ add_index :users, :activation_token, :unique => true
44
+
45
+ end
46
+
47
+ unless table_exists?(:roles)
48
+ # create the roles table
49
+ create_table :roles do |t|
50
+ t.column :description, :string
51
+ t.column :internal_identifier, :string
52
+ t.column :external_identifier, :string
53
+ t.column :external_id_source, :string
54
+
55
+ t.timestamps
56
+ end
57
+ end
58
+
59
+ unless table_exists?(:sessions)
60
+ # Create sessions table
61
+ create_table :sessions do |t|
62
+ t.string :session_id, :null => false
63
+ t.text :data
64
+ t.timestamps
65
+ end
66
+ add_index :sessions, :session_id
67
+ add_index :sessions, :updated_at
68
+ end
69
+
70
+ unless table_exists?(:audit_logs)
71
+ # Create audit_logs
72
+ create_table :audit_logs do |t|
73
+ t.string :application
74
+ t.string :description
75
+ t.integer :party_id
76
+ t.text :additional_info
77
+ t.references :audit_log_type
78
+
79
+ #polymorphic columns
80
+ t.references :event_record, :polymorphic => true
81
+
82
+ t.timestamps
83
+ end
84
+ add_index :audit_logs, :party_id
85
+ add_index :audit_logs, [:event_record_id, :event_record_type], :name => 'event_record_index'
86
+ end
87
+
88
+ unless table_exists?(:audit_log_types)
89
+ # Create audit_logs
90
+ create_table :audit_log_types do |t|
91
+ t.string :description
92
+ t.string :error_code
93
+ t.string :comments
94
+ t.string :internal_identifier
95
+ t.string :external_identifier
96
+ t.string :external_id_source
97
+
98
+ #better nested set columns
99
+ t.integer :parent_id
100
+ t.integer :lft
101
+ t.integer :rgt
102
+
103
+ t.timestamps
104
+ end
105
+ end
106
+
107
+ unless table_exists?(:audit_log_items)
108
+ # Create audit_log_items
109
+ create_table :audit_log_items do |t|
110
+ t.references :audit_log
111
+ t.references :audit_log_item_type
112
+ t.string :audit_log_item_value
113
+ t.string :description
114
+
115
+ t.timestamps
116
+ end
117
+ end
118
+
119
+ unless table_exists?(:audit_log_item_types)
120
+ # Create audit_log_item_types
121
+ create_table :audit_log_item_types do |t|
122
+ t.string :internal_identifier
123
+ t.string :external_identifier
124
+ t.string :external_id_source
125
+ t.string :description
126
+ t.string :comments
127
+
128
+ #better nested set columns
129
+ t.integer :parent_id
130
+ t.integer :lft
131
+ t.integer :rgt
132
+
133
+ t.timestamps
134
+ end
135
+ end
136
+
137
+ unless table_exists?(:secured_models)
138
+ create_table :secured_models do |t|
139
+ t.references :secured_record, :polymorphic => true
140
+
141
+ t.timestamps
142
+ end
143
+ add_index :secured_models, [:secured_record_id, :secured_record_type], :name => 'secured_record_idx'
144
+ end
145
+
146
+ unless table_exists?(:roles_secured_models)
147
+ create_table :roles_secured_models, :id => false do |t|
148
+ t.references :secured_model
149
+ t.references :role
150
+
151
+ t.timestamps
152
+ end
153
+ add_index :roles_secured_models, :secured_model_id
154
+ add_index :roles_secured_models, :role_id
155
+ end
156
+
157
+ unless table_exists?(:file_assets)
158
+ create_table :file_assets do |t|
159
+ t.references :file_asset_holder, :polymorphic => true
160
+ t.string :type
161
+ t.string :name
162
+ t.string :directory
163
+ t.string :data_file_name
164
+ t.string :data_content_type
165
+ t.integer :data_file_size
166
+ t.datetime :data_updated_at
167
+
168
+ t.timestamps
169
+ end
170
+ add_index :file_assets, :type
171
+ add_index :file_assets, [:file_asset_holder_id, :file_asset_holder_type], :name => 'file_asset_holder_idx'
172
+ end
173
+
174
+ unless table_exists?(:delayed_jobs)
175
+ create_table :delayed_jobs, :force => true do |table|
176
+ table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
177
+ table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
178
+ table.text :handler # YAML-encoded string of the object that will do work
179
+ table.text :last_error # reason for last failure (See Note below)
180
+ table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
181
+ table.datetime :locked_at # Set when a client is working on this object
182
+ table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
183
+ table.string :locked_by # Who is working on this object (if locked)
184
+ table.timestamps
185
+ end
186
+ add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
187
+ end
188
+
189
+ unless table_exists?(:capable_models)
190
+ # create the roles table
191
+ create_table :capable_models do |t|
192
+ t.references :capable_model_record, :polymorphic => true
193
+
194
+ t.timestamps
195
+ end
196
+
197
+ add_index :capable_models, [:capable_model_record_id, :capable_model_record_type], :name => 'capable_model_record_idx'
198
+ end
199
+
200
+ unless table_exists?(:capability_types)
201
+ # create the roles table
202
+ create_table :capability_types do |t|
203
+ t.string :internal_identifier
204
+ t.string :description
205
+ t.timestamps
206
+ end
207
+ end
208
+
209
+ unless table_exists?(:capabilities)
210
+ # create the roles table
211
+ create_table :capabilities do |t|
212
+ t.string :resource
213
+ t.references :capability_type
214
+ t.timestamps
215
+ end
216
+
217
+ add_index :capabilities, :capability_type_id
218
+ end
219
+
220
+ unless table_exists?(:capabilities_capable_models)
221
+ # create the roles table
222
+ create_table :capabilities_capable_models, :id => false do |t|
223
+ t.references :capable_model
224
+ t.references :capability
225
+ t.timestamps
226
+ end
227
+
228
+ add_index :capabilities_capable_models, :capable_model_id
229
+ add_index :capabilities_capable_models, :capability_id
230
+ end
231
+
232
+ end
233
+
234
+ def self.down
235
+ # check that each table exists before trying to delete it.
236
+ [
237
+ :audit_logs, :sessions, :simple_captcha_data,
238
+ :capable_models, :capability_types, :capabilities,:capabilities_capable_models,
239
+ :roles_users, :roles, :audit_log_items, :audit_log_item_types,
240
+ :users, :secured_models, :roles_secured_models, :file_assets, :delayed_jobs
241
+ ].each do |tbl|
242
+ if table_exists?(tbl)
243
+ drop_table tbl
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,56 @@
1
+ class AddCapabilites < ActiveRecord::Migration
2
+ def up
3
+ unless table_exists?(:capable_models)
4
+ # create the roles table
5
+ create_table :capable_models do |t|
6
+ t.references :capable_model_record, :polymorphic => true
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :capable_models, [:capable_model_record_id, :capable_model_record_type], :name => 'capable_model_record_idx'
12
+ end
13
+
14
+ unless table_exists?(:capability_types)
15
+ # create the roles table
16
+ create_table :capability_types do |t|
17
+ t.string :internal_identifier
18
+ t.string :description
19
+ t.timestamps
20
+ end
21
+ end
22
+
23
+ unless table_exists?(:capabilities)
24
+ # create the roles table
25
+ create_table :capabilities do |t|
26
+ t.string :resource
27
+ t.references :capability_type
28
+ t.timestamps
29
+ end
30
+
31
+ add_index :capabilities, :capability_type_id
32
+ end
33
+
34
+ unless table_exists?(:capabilities_capable_models)
35
+ # create the roles table
36
+ create_table :capabilities_capable_models, :id => false do |t|
37
+ t.references :capable_model
38
+ t.references :capability
39
+ t.timestamps
40
+ end
41
+
42
+ add_index :capabilities_capable_models, :capable_model_id
43
+ add_index :capabilities_capable_models, :capability_id
44
+ end
45
+ end
46
+
47
+ def down
48
+ [
49
+ :capable_models, :capability_types, :capabilities,:capabilities_capable_models
50
+ ].each do |tbl|
51
+ if table_exists?(tbl)
52
+ drop_table tbl
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,33 @@
1
+ class UpdateRoles < ActiveRecord::Migration
2
+ def up
3
+
4
+ roles_users = ActiveRecord::Base.connection.select_all("select * from roles_users")
5
+ roles_users.each do |role_user|
6
+ secured_model = SecuredModel.find_by_secured_record_id_and_secured_record_type(role_user['user_id'], 'User')
7
+ if secured_model.nil?
8
+ secured_model = SecuredModel.new
9
+ secured_model.secured_record = User.find(role_user['user_id'])
10
+ secured_model.save
11
+ end
12
+ secured_model.roles << Role.find(role_user['role_id'])
13
+ end
14
+
15
+ roles_widgets = ActiveRecord::Base.connection.select_all("select * from roles_widgets")
16
+ roles_widgets.each do |role_widget|
17
+ secured_model = SecuredModel.find_by_secured_record_id_and_secured_record_type(role_widget['widget_id'], 'Widget')
18
+ if secured_model.nil?
19
+ secured_model = SecuredModel.new
20
+ secured_model.secured_record = Widget.find(role_widget['widget_id'])
21
+ secured_model.save
22
+ end
23
+ secured_model.roles << Role.find(role_widget['role_id'])
24
+ end
25
+
26
+ drop_table :roles_users
27
+ drop_table :roles_widgets
28
+
29
+ end
30
+
31
+ def down
32
+ end
33
+ end
@@ -0,0 +1,88 @@
1
+ class UpdateUser < ActiveRecord::Migration
2
+ def up
3
+ unless columns(:users).collect {|c| c.name}.include?('activation_state')
4
+
5
+ #have to move over current users
6
+ current_users = []
7
+ User.all.each do |user|
8
+ current_users << {
9
+ :enabled => user.enabled,
10
+ :email => user.email
11
+ }
12
+ end
13
+
14
+ #change_columns
15
+ change_column :users, :salt, :string
16
+ change_column :users, :crypted_password, :string
17
+
18
+ #remove old columns
19
+ remove_column :users, :name
20
+ remove_column :users, :activated_at
21
+ remove_column :users, :enabled
22
+ remove_column :users, :identity_url
23
+ remove_column :users, :invitation_id
24
+ remove_column :users, :invitation_limit
25
+ remove_column :users, :club_number
26
+ remove_column :users, :owner_number
27
+ remove_column :users, :dob
28
+ remove_column :users, :ssn_last_four
29
+ remove_column :users, :salutation
30
+ remove_column :users, :first_name
31
+ remove_column :users, :last_name
32
+ remove_column :users, :street_address
33
+ remove_column :users, :city
34
+ remove_column :users, :state_province
35
+ remove_column :users, :postal_code
36
+ remove_column :users, :country
37
+ remove_column :users, :phone
38
+ remove_column :users, :security_question_1
39
+ remove_column :users, :security_answer_1
40
+ remove_column :users, :security_question_2
41
+ remove_column :users, :security_answer_2
42
+
43
+ #rename columns
44
+ rename_column :users, :remember_token, :remember_me_token
45
+ rename_column :users, :remember_token_expires_at, :remember_me_token_expires_at
46
+ rename_column :users, :activation_code, :activation_token
47
+ rename_column :users, :activation_code_expires_at, :activation_token_expires_at
48
+ rename_column :users, :password_reset_code, :password_reset_token
49
+ rename_column :users, :lock_count, :failed_logins_count
50
+ rename_column :users, :login, :username
51
+
52
+ if columns(:users).collect {|c| c.name}.include?('user_type')
53
+ rename_column :users, :user_type, :type
54
+ end
55
+
56
+ #activity logging
57
+ add_column :users, :last_login_at, :datetime, :default => nil
58
+ add_column :users, :last_logout_at, :datetime, :default => nil
59
+ add_column :users, :last_activity_at, :datetime, :default => nil
60
+ add_index :users, [:last_logout_at, :last_activity_at], :name => 'activity_idx'
61
+
62
+ #brute force protection
63
+ add_column :users, :lock_expires_at, :datetime, :default => nil
64
+
65
+ #reset password
66
+ add_column :users, :reset_password_token, :datetime, :default => nil
67
+ add_column :users, :reset_password_token_expires_at, :datetime, :default => nil
68
+ add_column :users, :reset_password_email_sent_at, :datetime, :default => nil
69
+
70
+ #user activation
71
+ add_column :users, :activation_state, :string, :default => nil
72
+
73
+ current_users.each do |user_hash|
74
+ if user_hash[:enabled]
75
+ User.reset_column_information
76
+ user = User.find_by_email(user_hash[:email])
77
+ user.activate!
78
+ user.password_confirmation = 'password'
79
+ user.change_password!('password')
80
+ end
81
+ end
82
+
83
+ end
84
+ end
85
+
86
+ def down
87
+ end
88
+ end