zetto 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +21 -0
- data/lib/generators/active_record/templates/migration.erb +11 -0
- data/lib/generators/active_record/templates/migration_existing.erb +7 -0
- data/lib/generators/active_record/zetto_generator.rb +59 -0
- data/lib/generators/zetto/install_generator.rb +15 -0
- data/lib/generators/zetto/orm_helpers.rb +30 -0
- data/lib/generators/zetto/templates/zetto.rb +37 -0
- data/lib/generators/zetto/zetto_generator.rb +17 -0
- data/lib/zetto.rb +11 -0
- data/lib/zetto/config/params.rb +80 -0
- data/lib/zetto/engine.rb +16 -0
- data/lib/zetto/extension/action_controller_base.rb +54 -0
- data/lib/zetto/extension/active_record.rb +60 -0
- data/lib/zetto/load.rb +23 -0
- data/lib/zetto/locales/en.yml +21 -0
- data/lib/zetto/modules/crypto.rb +86 -0
- data/lib/zetto/modules/load.rb +4 -0
- data/lib/zetto/services/authentication/find_user.rb +29 -0
- data/lib/zetto/services/authentication/load.rb +11 -0
- data/lib/zetto/services/cookie/find_session.rb +50 -0
- data/lib/zetto/services/cookie/load.rb +12 -0
- data/lib/zetto/services/cookie/save_session.rb +43 -0
- data/lib/zetto/services/encryption/load.rb +9 -0
- data/lib/zetto/services/encryption/password_hashing.rb +19 -0
- data/lib/zetto/services/info.rb +27 -0
- data/lib/zetto/services/session/get_user.rb +46 -0
- data/lib/zetto/services/session/load.rb +16 -0
- data/lib/zetto/services/session/registration.rb +36 -0
- data/lib/zetto/services/zetto_logger.rb +26 -0
- data/lib/zetto/storage/common/load.rb +7 -0
- data/lib/zetto/storage/common/response.rb +21 -0
- data/lib/zetto/storage/connect/load.rb +11 -0
- data/lib/zetto/storage/connect/redis_singelton.rb +17 -0
- data/lib/zetto/storage/impurety_data/data/response.rb +21 -0
- data/lib/zetto/storage/impurety_data/generate.rb +55 -0
- data/lib/zetto/storage/impurety_data/load.rb +18 -0
- data/lib/zetto/storage/impurety_data/restore.rb +22 -0
- data/lib/zetto/storage/impurety_data/save.rb +25 -0
- data/lib/zetto/storage/session/create.rb +73 -0
- data/lib/zetto/storage/session/data/response.rb +42 -0
- data/lib/zetto/storage/session/find_by_session.rb +27 -0
- data/lib/zetto/storage/session/load.rb +17 -0
- data/lib/zetto/version.rb +3 -0
- data/spec/controllers/application_controller_spec.rb +80 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +22 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/models/cat.rb +3 -0
- data/spec/dummy/app/models/user.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +33 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/initializers/zetto.rb +36 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/schema.rb +33 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/test/emulators/cookie.rb +22 -0
- data/spec/dummy/lib/test/emulators/request.rb +19 -0
- data/spec/dummy/log/development.log +42 -0
- data/spec/dummy/log/test.log +210 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/users.rb +25 -0
- data/spec/models/sessions_spec.rb +78 -0
- data/spec/rails_helper.rb +18 -0
- metadata +293 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9f900c8afe4f24f4d55616172a6325e6fe4234b7
|
4
|
+
data.tar.gz: e11642fa9488e6caf62ce590417e80689dcfbb6c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4a29b9afa0b0459f1f5f156fbd7069b84eed8e58616ffa4ba460e437a2c82567c93ba62c1592af7693775481c00f0af63b794ba0d54bf8def059bd4bdd721fba
|
7
|
+
data.tar.gz: c5b85f4470ddd779fe970c22f56206301554c1a06c728d175271ff931adfdd6a6776638ff11a46de1f072d111beac8b6e968ed4cba3aaad5cfc5733c44e61431
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2016 Ivan
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
|
8
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
9
|
+
load 'rails/tasks/engine.rake'
|
10
|
+
|
11
|
+
Bundler::GemHelper.install_tasks
|
12
|
+
|
13
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
14
|
+
|
15
|
+
require 'rspec/core'
|
16
|
+
require 'rspec/core/rake_task'
|
17
|
+
|
18
|
+
desc "Run all specs in spec directory (excluding plugin specs)"
|
19
|
+
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
20
|
+
|
21
|
+
task :default => :spec
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class ZettoCreate<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def change
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
t.string :name
|
5
|
+
t.text :description
|
6
|
+
end
|
7
|
+
<% migration_data.each do |name, properties| %>
|
8
|
+
add_column :<%= table_name %>, :<%= name %>, <%= properties %> unless column_exists? :<%= table_name %>, :<%= name %>
|
9
|
+
<% end %>
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class AddZettoTo<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
|
2
|
+
def change
|
3
|
+
<% migration_data.each do |name, properties| %>
|
4
|
+
add_column :<%= table_name %>, :<%= name %>, <%= properties %> unless column_exists? :<%= table_name %>, :<%= name %>
|
5
|
+
<% end %>
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
require 'generators/zetto/orm_helpers'
|
3
|
+
require 'zetto/config/params'
|
4
|
+
|
5
|
+
module ActiveRecord
|
6
|
+
module Generators
|
7
|
+
|
8
|
+
class ZettoGenerator < ActiveRecord::Generators::Base
|
9
|
+
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
10
|
+
|
11
|
+
include Zetto::Generators::OrmHelpers
|
12
|
+
source_root File.expand_path("../templates", __FILE__)
|
13
|
+
|
14
|
+
def add_zetto_migration
|
15
|
+
if (behavior == :invoke && model_exists?) || (behavior == :revoke && migration_exists?(table_name))
|
16
|
+
migration_template "migration_existing.erb", "db/migrate/add_zetto_to_#{table_name}.rb", migration_version: migration_version
|
17
|
+
else
|
18
|
+
migration_template "migration.erb", "db/migrate/zetto_create_#{table_name}.rb", migration_version: migration_version
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def generate_model
|
23
|
+
invoke "active_record:model", [name], migration: false unless model_exists? && behavior == :invoke
|
24
|
+
end
|
25
|
+
|
26
|
+
def inject_zetto_model_content
|
27
|
+
content = model_contents
|
28
|
+
|
29
|
+
class_path = namespaced? ? class_name.to_s.split("::") : [class_name]
|
30
|
+
|
31
|
+
indent_depth = class_path.size - 1
|
32
|
+
content = content.split("\n").map { |line| " " * indent_depth + line }.join("\n") << "\n"
|
33
|
+
|
34
|
+
inject_into_class(model_path, class_path.last, content) if model_exists?
|
35
|
+
end
|
36
|
+
|
37
|
+
def migration_data
|
38
|
+
fields = {}
|
39
|
+
key = Zetto::Config::Params.user_class_name
|
40
|
+
fields[key] = ":string, :null => false, default: ''"
|
41
|
+
key = Zetto::Config::Params.user_class_password
|
42
|
+
fields[key] = ":string, :null => false, default: ''"
|
43
|
+
fields
|
44
|
+
end
|
45
|
+
|
46
|
+
def rails5?
|
47
|
+
Rails.version.start_with? '5'
|
48
|
+
end
|
49
|
+
|
50
|
+
def migration_version
|
51
|
+
if rails5?
|
52
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
module Zetto
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
desc "Some description of my generator here"
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
8
|
+
end
|
9
|
+
|
10
|
+
def copy_initializer
|
11
|
+
template "zetto.rb", "config/initializers/zetto.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Zetto
|
2
|
+
module Generators
|
3
|
+
module OrmHelpers
|
4
|
+
def model_contents
|
5
|
+
buffer = <<-CONTENT
|
6
|
+
zetto :authentication
|
7
|
+
CONTENT
|
8
|
+
buffer
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def model_exists?
|
14
|
+
File.exist?(File.join(destination_root, model_path))
|
15
|
+
end
|
16
|
+
|
17
|
+
def migration_exists?(table_name)
|
18
|
+
Dir.glob("#{File.join(destination_root, migration_path)}/[0-9]*_*.rb").grep(/\d+_add_devise_to_#{table_name}.rb$/).first
|
19
|
+
end
|
20
|
+
|
21
|
+
def migration_path
|
22
|
+
@migration_path ||= File.join("db", "migrate")
|
23
|
+
end
|
24
|
+
|
25
|
+
def model_path
|
26
|
+
@model_path ||= File.join("app", "models", "#{file_path}.rb")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Add extension
|
2
|
+
require "zetto/load"
|
3
|
+
# Simple generator for rails
|
4
|
+
Zetto.setup do |config|
|
5
|
+
|
6
|
+
# Список пользовательских классов
|
7
|
+
config.user_classes = ['User']
|
8
|
+
# Поиск сесиии по этим полям
|
9
|
+
config.user_class_name = 'email'
|
10
|
+
config.user_class_password = 'password'
|
11
|
+
|
12
|
+
# Длинна пароля, больше чем
|
13
|
+
config.user_class_password_length_larger = 6
|
14
|
+
|
15
|
+
# Хешировать пароль с помощью
|
16
|
+
# ['MD5', 'SHA1', 'RMD160', 'SHA256', 'SHA384', 'SHA512']
|
17
|
+
config.user_class_password_crypto = 'SHA1'
|
18
|
+
|
19
|
+
# Настройки для подключения к бд redis, не используем 0 бд, так-как она предназначается для тестовых нужд
|
20
|
+
config.redis_connect = {:password => "", "db" => 1}
|
21
|
+
|
22
|
+
# Чем больше тем надежнее, но будет медленее поиск
|
23
|
+
config.session_length = 9
|
24
|
+
|
25
|
+
# Время жизни сесии
|
26
|
+
config.session_time_min = 30
|
27
|
+
|
28
|
+
# За сколько минут перегенирировать
|
29
|
+
config.session_time_restart_min = 5
|
30
|
+
|
31
|
+
# Ведет лог посещений пользователей
|
32
|
+
config.log = false
|
33
|
+
|
34
|
+
# Можно настроить сессию на ип, что повысит стойкость, но имеем проблемы для людей с динамическим ип, в некоторых случаях
|
35
|
+
config.check_ip = false
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rails/generators/named_base'
|
2
|
+
|
3
|
+
module Zetto
|
4
|
+
module Generators
|
5
|
+
class ZettoGenerator < Rails::Generators::NamedBase
|
6
|
+
include Rails::Generators::ResourceHelpers
|
7
|
+
|
8
|
+
namespace "zetto"
|
9
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
|
+
|
11
|
+
desc "Create table or add need field if table exist"
|
12
|
+
|
13
|
+
hook_for :orm
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/zetto.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
module Zetto
|
2
|
+
module Config
|
3
|
+
|
4
|
+
module Params
|
5
|
+
|
6
|
+
CRYPTO_ALGORITHMS = ['MD5', 'SHA1', 'RMD160', 'SHA256', 'SHA384', 'SHA512']
|
7
|
+
|
8
|
+
@user_classes = ['User']
|
9
|
+
|
10
|
+
@user_class_name = 'email'
|
11
|
+
@user_class_password = 'password'
|
12
|
+
@user_class_password_length_larger = 6
|
13
|
+
@user_class_password_crypto = 'SHA1'
|
14
|
+
@check_ip = false
|
15
|
+
@log = false
|
16
|
+
|
17
|
+
@redis_connect = {:password => "", "db" => 1}
|
18
|
+
|
19
|
+
@session_length = 9
|
20
|
+
@session_time_min = 30
|
21
|
+
@session_time_restart_min = 5
|
22
|
+
|
23
|
+
class << self
|
24
|
+
|
25
|
+
def self.attr_writer_with_type(type, *args)
|
26
|
+
args.each do |arg|
|
27
|
+
self.send(:define_method, "#{arg}=".intern) do |value|
|
28
|
+
unless value.class.to_s == type
|
29
|
+
raise ArgumentError.new(I18n.t('exseptions.not_specified_type', arg: arg, type: type, class_name: value.class.to_s))
|
30
|
+
end
|
31
|
+
instance_variable_set("@#{arg}", value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
attr_writer :check_ip, :log
|
37
|
+
attr_writer_with_type 'Fixnum', :session_time_restart_min, :session_time_min, :session_length, :user_class_password_length_larger
|
38
|
+
attr_writer_with_type 'Hash', :redis_connect
|
39
|
+
attr_writer_with_type 'String', :user_class_name, :user_class_password
|
40
|
+
|
41
|
+
attr_reader :user_class_password_crypto, :check_ip, :log, :session_time_restart_min, :session_time_min, :session_length, :user_class_password_length_larger, :redis_connect,
|
42
|
+
:user_class_name, :user_class_password
|
43
|
+
|
44
|
+
def set_params
|
45
|
+
yield self
|
46
|
+
end
|
47
|
+
|
48
|
+
def user_class_password_crypto=(value)
|
49
|
+
value = value.to_s.upcase
|
50
|
+
unless self::CRYPTO_ALGORITHMS.include?(value)
|
51
|
+
raise ArgumentError.new(I18n.t('exseptions.unknown_algorithm', algorithm: value.to_s ))
|
52
|
+
end
|
53
|
+
@user_class_password_crypto = value
|
54
|
+
end
|
55
|
+
|
56
|
+
def user_classes=(arr)
|
57
|
+
@user_classes = arr.map{ |class_name| class_name.to_s.capitalize }
|
58
|
+
end
|
59
|
+
|
60
|
+
def user_class(class_str)
|
61
|
+
begin
|
62
|
+
unless @user_classes.include?(class_str)
|
63
|
+
raise ArgumentError.new(I18n.t('exseptions.unknown_target_class', class_name: class_str.to_s ))
|
64
|
+
end
|
65
|
+
class_str.constantize
|
66
|
+
rescue Exception => e
|
67
|
+
puts e.message
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
data/lib/zetto/engine.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Zetto
|
2
|
+
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
isolate_namespace Zetto
|
5
|
+
|
6
|
+
config.generators do |g|
|
7
|
+
g.test_framework :rspec, :fixture => false
|
8
|
+
g.fixture_replacement :factory_girl, :dir => 'spec/factories'
|
9
|
+
g.assets false
|
10
|
+
g.helper false
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Zetto::Extension::ActionControllerBase
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
require "zetto/config/params"
|
4
|
+
|
5
|
+
require "zetto/storage/common/load"
|
6
|
+
require "zetto/storage/connect/load"
|
7
|
+
require "zetto/storage/impurety_data/load"
|
8
|
+
require "zetto/storage/session/load"
|
9
|
+
|
10
|
+
require "zetto/modules/load"
|
11
|
+
|
12
|
+
require "zetto/services/encryption/load"
|
13
|
+
require "zetto/services/cookie/load"
|
14
|
+
require "zetto/services/session/load"
|
15
|
+
require "zetto/services/authentication/load"
|
16
|
+
|
17
|
+
|
18
|
+
included do
|
19
|
+
|
20
|
+
def current_user
|
21
|
+
begin
|
22
|
+
Zetto::Services::Session::GetUser.new(cookies, request.user_agent, request.remote_ip).execute
|
23
|
+
rescue ArgumentError => e
|
24
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.invalid_arguments', argument: 'Zetto::ControllerMethods', current_method: __method__), e
|
25
|
+
nil
|
26
|
+
rescue Exception => e
|
27
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.unknown_error', argument: 'Zetto::ControllerMethods', current_method: __method__), e
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def authorization(class_name, name, password)
|
33
|
+
begin
|
34
|
+
hashed_password = Zetto::Services::Encryption::PasswordHashing.new(password).execute
|
35
|
+
user = Zetto::Services::Authentication::FindUser.new(class_name, name, hashed_password).execute
|
36
|
+
return nil if user.nil?
|
37
|
+
return nil if user.new_record?
|
38
|
+
Zetto::Services::Session::Registration.new(user, cookies, request.user_agent, request.remote_ip).execute
|
39
|
+
rescue ArgumentError => e
|
40
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.invalid_arguments', argument: 'Zetto::ControllerMethods', current_method: __method__), e
|
41
|
+
nil
|
42
|
+
rescue Exception => e
|
43
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.unknown_error', argument: 'Zetto::ControllerMethods', current_method: __method__), e
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def logout
|
49
|
+
@cookies[:rembo] = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Zetto::Extension::ActiveRecord
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
require "zetto/modules/load"
|
6
|
+
require "zetto/services/encryption/load"
|
7
|
+
|
8
|
+
included do
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def password_confirmed
|
13
|
+
begin
|
14
|
+
password_field = Zetto::Config::Params.user_class_password
|
15
|
+
password_value = send(password_field).to_s
|
16
|
+
errors.add(password_field.intern, I18n.t('validate.password_confirm')) unless password_value == password_confirmation
|
17
|
+
|
18
|
+
password_confirmation
|
19
|
+
rescue Exception => e
|
20
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.undefined_field', field: password_field), e
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def password_encryption
|
25
|
+
begin
|
26
|
+
password_field = Zetto::Config::Params.user_class_password
|
27
|
+
password_value = send(password_field)
|
28
|
+
hashed_password = Zetto::Services::Encryption::PasswordHashing.new(password_value).execute
|
29
|
+
send(password_field+'=', hashed_password)
|
30
|
+
rescue Exception => e
|
31
|
+
Zetto::Services::Info.error_message I18n.t('exseptions.undefined_field', field: password_field), e
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
class_methods do
|
38
|
+
|
39
|
+
def zetto(method)
|
40
|
+
method_name = 'zetto_' + method.to_s
|
41
|
+
self.send(method_name) if 'zetto_authentication' == method_name
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def zetto_authentication
|
47
|
+
attr_accessor :password_confirmation
|
48
|
+
validates Zetto::Config::Params.user_class_name.intern, uniqueness:true
|
49
|
+
validates Zetto::Config::Params.user_class_password.intern, presence: true,
|
50
|
+
length: { minimum: Zetto::Config::Params.user_class_password_length_larger }
|
51
|
+
|
52
|
+
validate :password_confirmed
|
53
|
+
before_save :password_encryption
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|