diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb index 57e4b8ed3..402d33022 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 @@ -24,13 +24,12 @@ class Admin::ReservedDomainsController < AdminController ReservedDomain.transaction do # removing old ones existing = ReservedDomain.any_of_domains(names.keys).pluck(:id) - ReservedDomain.where.not(id: existing).delete_all + ReservedDomain.where.not(id: existing).destroy_all #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..141fd7263 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -1,25 +1,61 @@ class ReservedDomain < ActiveRecord::Base include Versions # version/reserved_domain_version.rb before_save :fill_empty_passwords + before_save :generate_data + before_destroy :remove_data - 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 + + def generate_data + @json = generate_json + @body = generate_body + update_whois_server + end + + def update_whois_server + wr = Whois::Record.find_or_initialize_by(name: name) + wr.body = @body + wr.json = @json + wr.save + end + + def generate_body + template = Rails.root.join("app/views/for_models/whois_other.erb".freeze) + ERB.new(template.read, nil, "-").result(binding) + end + + def generate_json + h = HashWithIndifferentAccess.new + h[:name] = self.name + h[:status] = 'Reserved' + h + end + + def remove_data + Whois::Record.where(name: name).delete_all + end + end diff --git a/app/views/for_models/whois_other.erb b/app/views/for_models/whois_other.erb new file mode 100644 index 000000000..50cf0b2dc --- /dev/null +++ b/app/views/for_models/whois_other.erb @@ -0,0 +1,8 @@ +Estonia .ee Top Level Domain WHOIS server + +Domain: +name: <%= @json['name'] %> +status: <%= @json['status'] %> + +Estonia .ee Top Level Domain WHOIS server +More information at http://internet.ee 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..3e4f16500 --- /dev/null +++ b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb @@ -0,0 +1,18 @@ +class NameAndPasswordForReservedDomain < ActiveRecord::Migration + def up + add_column :reserved_domains, :name, :string + add_column :reserved_domains, :password, :string + add_index :reserved_domains, :name + + 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