From 6415bfae389d70dd986af7d3ffa45dab1ee32fa3 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 5 Jan 2016 14:08:51 +0200 Subject: [PATCH] Story#108091488 - Seems that now reserved domains will be in better table --- .../admin/reserved_domains_controller.rb | 8 +++---- app/models/reserved_domain.rb | 23 +++++++++++-------- ...6_name_and_password_for_reserved_domain.rb | 17 ++++++++++++++ db/seeds.rb | 2 +- 4 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 db/migrate/20151202123506_name_and_password_for_reserved_domain.rb diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb index 57e4b8ed3..622f56eb2 100644 --- a/app/controllers/admin/reserved_domains_controller.rb +++ b/app/controllers/admin/reserved_domains_controller.rb @@ -2,7 +2,7 @@ class Admin::ReservedDomainsController < AdminController load_and_authorize_resource def index - names = ReservedDomain.pluck(:names).each_with_object({}){|e_h,h| h.merge!(e_h)} + names = ReservedDomain.pluck(:name, :password).each_with_object({}){|domain, hash| hash[domain[0]] = domain[1]} names.names = nil if names.blank? @reserved_domains = names.to_yaml.gsub(/---.?\n/, '').gsub(/\.\.\..?\n/, '') end @@ -28,9 +28,8 @@ class Admin::ReservedDomainsController < AdminController #updating and adding names.each do |name, psw| - rec = ReservedDomain.by_domain(name).first - rec ||= ReservedDomain.new - rec.names = {name => psw} + rec = ReservedDomain.find_or_initialize_by(name: name) + rec.password = psw unless rec.save result = false @@ -39,7 +38,6 @@ class Admin::ReservedDomainsController < AdminController end end - if result flash[:notice] = I18n.t('record_updated') redirect_to :back diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb index 09d72ec17..057321e56 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -2,24 +2,27 @@ class ReservedDomain < ActiveRecord::Base include Versions # version/reserved_domain_version.rb before_save :fill_empty_passwords - def fill_empty_passwords - return unless names - names.each { |k, v| names[k] = SecureRandom.hex if v.blank? } - end - class << self def pw_for(domain_name) - name_in_unicode = SimpleIDN.to_ascii(domain_name) - by_domain(domain_name).select("names -> '#{domain_name}' AS pw").first.try(:pw) || - by_domain(name_in_unicode).select("names -> '#{name_in_unicode}' AS pw").first.try(:pw) + name_in_ascii = SimpleIDN.to_ascii(domain_name) + by_domain(domain_name).first.try(:password) || by_domain(name_in_ascii).first.try(:password) end def by_domain name - where("names ? '#{name}'") + where(name: name) end def any_of_domains names - where("names ?| ARRAY['#{names.join("','")}']") + where(name: names) end end + + + def fill_empty_passwords + self.password = SecureRandom.hex unless self.password + end + + def name= val + super SimpleIDN.to_unicode(val) + end end diff --git a/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb new file mode 100644 index 000000000..1176ee255 --- /dev/null +++ b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb @@ -0,0 +1,17 @@ +class NameAndPasswordForReservedDomain < ActiveRecord::Migration + def up + add_column :reserved_domains, :name, :string + add_column :reserved_domains, :password, :string + + ReservedDomain.find_each do |domain| + names = domain.names + domain.update_columns(name: names.keys.first, password: names.values.first) + end + + remove_column :reserved_domains, :names + end + + def down + + end +end diff --git a/db/seeds.rb b/db/seeds.rb index 636ff4361..ac6da0598 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -73,7 +73,7 @@ admin3 = { [admin1, admin2, admin3].each do |at| admin = AdminUser.where(at) next if admin.present? - admin = AdminUser.new(at.merge({ password_confirmation: 'testtest' })) + admin = AdminUser.new(at.merge({ password_confirmation: 'testtest', password: 'testtest' })) admin.roles = ['admin'] admin.save end