fixed codeclimate errors

This commit is contained in:
dinsmol 2021-09-09 13:06:51 +03:00
parent f4e0084895
commit e7e3278267
44 changed files with 118 additions and 150 deletions

View file

@ -25,12 +25,11 @@ module Admin
@account_activities = @q.result.page(params[:page]).per(params[:results_per_page]) @account_activities = @q.result.page(params[:page]).per(params[:results_per_page])
@count = @q.result.count @count = @q.result.count
if params[:page] && params[:page].to_i > 1 @sum = if params[:page] && params[:page].to_i > 1
@sum = @q.result.limit(@account_activities.offset_value).sum(:sum) + @q.result.limit(@account_activities.offset_value).sum(:sum) +
@b.result.where("account_activities.id NOT IN (#{@q.result.select(:id).to_sql})") @b.result.where("account_activities.id NOT IN (#{@q.result.select(:id).to_sql})").sum(:sum)
.sum(:sum)
else else
@sum = @b.result.where("account_activities.id NOT IN (#{@q.result.select(:id).to_sql})").sum(:sum) @b.result.where("account_activities.id NOT IN (#{@q.result.select(:id).to_sql})").sum(:sum)
end end
respond_to do |format| respond_to do |format|

View file

@ -3,6 +3,7 @@ module Admin
load_and_authorize_resource class: ApiLog::EppLog load_and_authorize_resource class: ApiLog::EppLog
before_action :set_default_dates, only: [:index] before_action :set_default_dates, only: [:index]
# rubocop:disable Metrics/MethodLength
def index def index
@q = ApiLog::EppLog.ransack(params[:q]) @q = ApiLog::EppLog.ransack(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty? @q.sorts = 'id desc' if @q.sorts.empty?
@ -20,6 +21,7 @@ module Admin
render_by_format('admin/epp_logs/index', 'epp_logs') render_by_format('admin/epp_logs/index', 'epp_logs')
end end
# rubocop:enable Metrics/MethodLength
def show def show
@epp_log = ApiLog::EppLog.find(params[:id]) @epp_log = ApiLog::EppLog.find(params[:id])

View file

@ -3,6 +3,7 @@ module Admin
load_and_authorize_resource class: ApiLog::ReppLog load_and_authorize_resource class: ApiLog::ReppLog
before_action :set_default_dates, only: [:index] before_action :set_default_dates, only: [:index]
# rubocop:disable Metrics/MethodLength
def index def index
@q = ApiLog::ReppLog.search(params[:q]) @q = ApiLog::ReppLog.search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty? @q.sorts = 'id desc' if @q.sorts.empty?
@ -22,6 +23,7 @@ module Admin
render_by_format('admin/repp_logs/index', 'repp_logs') render_by_format('admin/repp_logs/index', 'repp_logs')
end end
# rubocop:enable Metrics/MethodLength
def show def show
@repp_log = ApiLog::ReppLog.find(params[:id]) @repp_log = ApiLog::ReppLog.find(params[:id])

View file

@ -15,9 +15,7 @@ module Api
current_registrant: serialized_registrant(@domain.registrant), current_registrant: serialized_registrant(@domain.registrant),
} }
unless delete_action? res[:new_registrant] = serialized_registrant(@domain.pending_registrant) unless delete_action?
res[:new_registrant] = serialized_registrant(@domain.pending_registrant)
end
render json: res, status: :ok render json: res, status: :ok
end end

View file

@ -312,7 +312,12 @@ module Epp
request: trimmed_request, request: trimmed_request,
request_command: request_command, request_command: request_command,
request_successful: epp_errors.empty?, request_successful: epp_errors.empty?,
request_object: resource ? "#{params[:epp_object_type]}: #{resource.class} - #{resource.id} - #{resource.name}" : params[:epp_object_type], request_object: if resource
"#{params[:epp_object_type]}: #{resource.class} - "\
"#{resource.id} - #{resource.name}"
else
params[:epp_object_type]
end,
response: @response, response: @response,
api_user_name: @api_user.try(:username) || current_user.try(:username) || 'api-public', api_user_name: @api_user.try(:username) || current_user.try(:username) || 'api-public',
api_user_registrar: @api_user.try(:registrar).try(:to_s) || api_user_registrar: @api_user.try(:registrar).try(:to_s) ||

View file

@ -14,16 +14,13 @@ module Epp
webclient_request = ENV['webclient_ips'].split(',').map(&:strip).include?(request.ip) webclient_request = ENV['webclient_ips'].split(',').map(&:strip).include?(request.ip)
if webclient_request && !Rails.env.test? && !Rails.env.development? if webclient_request && !Rails.env.test? && !Rails.env.development?
client_md5 = Certificate.parse_md_from_string(request.env['HTTP_SSL_CLIENT_CERT']) client_md5 = Certificate.parse_md_from_string(request.env['HTTP_SSL_CLIENT_CERT'])
if ENV['cert_path'].blank? raise 'webclient cert (cert_path) missing, registrar (r)epp disabled' if ENV['cert_path'].blank?
raise 'webclient cert (cert_path) missing, registrar (r)epp disabled'
end
server_md5 = Certificate.parse_md_from_string(File.read(ENV['cert_path'])) server_md5 = Certificate.parse_md_from_string(File.read(ENV['cert_path']))
if client_md5 != server_md5 if client_md5 != server_md5
msg = 'Authentication error; server closing connection (certificate is not valid)' msg = 'Authentication error; server closing connection (certificate is not valid)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2501')
code: '2501')
success = false success = false
end end
@ -33,7 +30,7 @@ module Epp
!@api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], request.env['HTTP_SSL_CLIENT_S_DN_CN']) !@api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], request.env['HTTP_SSL_CLIENT_S_DN_CN'])
msg = 'Authentication error; server closing connection (certificate is not valid)' msg = 'Authentication error; server closing connection (certificate is not valid)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg,code: '2501') msg: msg, code: '2501')
success = false success = false
end end
@ -109,9 +106,8 @@ module Epp
def ip_white? def ip_white?
webclient_request = ENV['webclient_ips'].split(',').map(&:strip).include?(request.ip) webclient_request = ENV['webclient_ips'].split(',').map(&:strip).include?(request.ip)
return true if webclient_request return true if webclient_request
if @api_user && !@api_user.registrar.api_ip_white?(request.ip) return false if @api_user && !@api_user.registrar.api_ip_white?(request.ip)
return false
end
true true
end end

View file

@ -21,9 +21,7 @@ class Registrar
current_domain_scope current_domain_scope
end end
if params[:contacts_ident_eq] domains = domains.where(contacts: { ident: params[:contacts_ident_eq] }) if params[:contacts_ident_eq]
domains = domains.where(contacts: { ident: params[:contacts_ident_eq] })
end
normalize_search_parameters do normalize_search_parameters do
@q = domains.search(search_params.except(:contacts_ident_eq)) @q = domains.search(search_params.except(:contacts_ident_eq))

View file

@ -35,9 +35,7 @@ class Registrar
notices = ["#{t('.replaced')}. #{t('.affected_domains')}: " \ notices = ["#{t('.replaced')}. #{t('.affected_domains')}: " \
"#{res[:data][:affected_domains].join(', ')}"] "#{res[:data][:affected_domains].join(', ')}"]
if res[:data][:skipped_domains] notices << "#{t('.skipped_domains')}: #{res[:data][:skipped_domains].join(', ')}" if res[:data][:skipped_domains]
notices << "#{t('.skipped_domains')}: #{res[:data][:skipped_domains].join(', ')}"
end
notices.join(', ') notices.join(', ')
end end

View file

@ -22,7 +22,7 @@ class Registrar
def load_xml def load_xml
cl_trid = "#{depp_current_user.tag}-#{Time.zone.now.to_i}" cl_trid = "#{depp_current_user.tag}-#{Time.zone.now.to_i}"
xml_dir_path = "#{Rails.root}/app/views/registrar/xml_consoles/epp_requests" xml_dir_path = Rails.root.join('app', 'views', 'registrar', 'xml_consoles', 'epp_requests').to_s
xml = File.read("#{xml_dir_path}/#{params[:obj]}/#{params[:epp_action]}.xml") xml = File.read("#{xml_dir_path}/#{params[:obj]}/#{params[:epp_action]}.xml")
xml = prepare_payload(xml, cl_trid) xml = prepare_payload(xml, cl_trid)
@ -54,7 +54,7 @@ class Registrar
end end
def insert_prefix_and_version(xml, pref, version) def insert_prefix_and_version(xml, pref, version)
xml.gsub!("\"#{pref.to_s}\"", xml.gsub!("\"#{pref}\"",
"\"#{Xsd::Schema.filename(for_prefix: pref.to_s, for_version: version)}\"") "\"#{Xsd::Schema.filename(for_prefix: pref.to_s, for_version: version)}\"")
xml xml
end end

View file

@ -6,7 +6,7 @@ module ApplicationHelper
def env_style def env_style
return '' if unstable_env.nil? return '' if unstable_env.nil?
"background-image: url(#{image_path("#{unstable_env.to_s}.png")});" "background-image: url(#{image_path("#{unstable_env}.png")});"
end end
def ident_for(contact) def ident_for(contact)

View file

@ -13,7 +13,6 @@ module Actions
else else
do_live_request(@request, @uri) do_live_request(@request, @uri)
end end
rescue StandardError, OpenURI::HTTPError => e rescue StandardError, OpenURI::HTTPError => e
Rails.logger.debug e.message Rails.logger.debug e.message
end end

View file

@ -43,9 +43,7 @@ module Actions
end end
def assign_new_registrant def assign_new_registrant
unless params[:registrant][:code] domain.add_epp_error('2306', nil, nil, %i[registrant cannot_be_missing]) unless params[:registrant][:code]
domain.add_epp_error('2306', nil, nil, %i[registrant cannot_be_missing])
end
regt = Registrant.find_by(code: params[:registrant][:code]) regt = Registrant.find_by(code: params[:registrant][:code])
unless regt unless regt

View file

@ -37,11 +37,11 @@ module Domains
price: domain_pricelist) price: domain_pricelist)
end end
def in_transaction_with_retries def in_transaction_with_retries(&block)
if Rails.env.test? if Rails.env.test?
yield yield
else else
transaction_wrapper { yield } transaction_wrapper(&block)
end end
rescue ActiveRecord::StatementInvalid => e rescue ActiveRecord::StatementInvalid => e
log_error e log_error e

View file

@ -38,7 +38,7 @@ module Domains
private private
def user_id def user_id
@user_id ||= domain.pending_json.dig('current_user_id') @user_id ||= domain.pending_json['current_user_id']
end end
end end
end end

View file

@ -37,9 +37,7 @@ class CsyncJob < ApplicationJob
def unqualification_reason(nss, key, result_types) def unqualification_reason(nss, key, result_types)
return 'no CDNSKEY / nameservers reported different CDNSKEYs' unless key return 'no CDNSKEY / nameservers reported different CDNSKEYs' unless key
if result_types.include? 'untrustworthy' return 'current DNSSEC config invalid (required for rollover/delete)' if result_types.include? 'untrustworthy'
return 'current DNSSEC config invalid (required for rollover/delete)'
end
"Nameserver(s) not reachable / invalid data (#{result_types.join(', ')})" unless nss "Nameserver(s) not reachable / invalid data (#{result_types.join(', ')})" unless nss
end end

View file

@ -44,9 +44,7 @@ class DirectoInvoiceForwardJob < ApplicationJob
end end
def assign_monthly_numbers def assign_monthly_numbers
if directo_counter_exceedable?(@client.invoices.count) raise 'Directo Counter is going to be out of period!' if directo_counter_exceedable?(@client.invoices.count)
raise 'Directo Counter is going to be out of period!'
end
min_directo = Setting.directo_monthly_number_min.presence.try(:to_i) min_directo = Setting.directo_monthly_number_min.presence.try(:to_i)
directo_number = [Setting.directo_monthly_number_last.presence.try(:to_i), directo_number = [Setting.directo_monthly_number_last.presence.try(:to_i),

View file

@ -44,6 +44,7 @@ class ApiUser < User
after_initialize :set_defaults after_initialize :set_defaults
def set_defaults def set_defaults
return unless new_record? return unless new_record?
self.active = true unless saved_change_to_active? self.active = true unless saved_change_to_active?
end end
@ -76,7 +77,7 @@ class ApiUser < User
end end
def linked_with?(another_api_user) def linked_with?(another_api_user)
another_api_user.identity_code == self.identity_code another_api_user.identity_code == identity_code
end end
private private

View file

@ -1,7 +1,7 @@
module Billing module Billing
class ReferenceNo class ReferenceNo
REGEXP = /\A\d{2,20}\z/.freeze REGEXP = /\A\d{2,20}\z/
MULTI_REGEXP = /(\d{2,20})/.freeze MULTI_REGEXP = /(\d{2,20})/
def self.generate def self.generate
base = Base.generate base = Base.generate

View file

@ -8,7 +8,7 @@ class BlockedDomain < ApplicationRecord
class << self class << self
def by_domain name def by_domain(name)
where(name: name) where(name: name)
end end
end end
@ -29,7 +29,7 @@ class BlockedDomain < ApplicationRecord
def generate_json def generate_json
h = HashWithIndifferentAccess.new h = HashWithIndifferentAccess.new
h[:name] = self.name h[:name] = name
h[:status] = ['Blocked'] h[:status] = ['Blocked']
h h
end end

View file

@ -67,9 +67,7 @@ class Certificate < ApplicationRecord
@cached_status = SIGNED @cached_status = SIGNED
if parsed_crt.not_before > Time.zone.now.utc && parsed_crt.not_after < Time.zone.now.utc @cached_status = EXPIRED if parsed_crt.not_before > Time.zone.now.utc && parsed_crt.not_after < Time.zone.now.utc
@cached_status = EXPIRED
end
crl = OpenSSL::X509::CRL.new(File.open("#{ENV['crl_dir']}/crl.pem").read) crl = OpenSSL::X509::CRL.new(File.open("#{ENV['crl_dir']}/crl.pem").read)
return @cached_status unless crl.revoked.map(&:serial).include?(parsed_crt.serial) return @cached_status unless crl.revoked.map(&:serial).include?(parsed_crt.serial)
@ -104,7 +102,7 @@ class Certificate < ApplicationRecord
end end
logger.error(err) logger.error(err)
puts "Certificate sign issue: #{err.inspect}" if Rails.env.test? puts "Certificate sign issue: #{err.inspect}" if Rails.env.test?
return false false
end end
end end

View file

@ -16,9 +16,7 @@ module Contact::Archivable
end end
def archive(verified: false, notify: true, extra_log: false) def archive(verified: false, notify: true, extra_log: false)
unless verified raise 'Contact cannot be archived' if !verified && !archivable?(post: true)
raise 'Contact cannot be archived' unless archivable?(post: true)
end
notify_registrar_about_archivation if notify notify_registrar_about_archivation if notify
write_to_registrar_log if extra_log write_to_registrar_log if extra_log
@ -35,9 +33,7 @@ module Contact::Archivable
end end
def inactive? def inactive?
if Version::DomainVersion.contact_unlinked_more_than?(contact_id: id, period: inactivity_period) return true if Version::DomainVersion.contact_unlinked_more_than?(contact_id: id, period: inactivity_period)
return true
end
Version::DomainVersion.was_contact_linked?(id) ? false : created_at <= inactivity_period.ago Version::DomainVersion.was_contact_linked?(id) ? false : created_at <= inactivity_period.ago
end end

View file

@ -22,9 +22,7 @@ module Domain::Expirable
def expirable? def expirable?
return false if expire_time > Time.zone.now return false if expire_time > Time.zone.now
if statuses.include?(DomainStatus::EXPIRED) && outzone_at.present? && delete_date.present? return false if statuses.include?(DomainStatus::EXPIRED) && outzone_at.present? && delete_date.present?
return false
end
true true
end end

View file

@ -16,10 +16,8 @@ module Domain::ForceDelete
where("(force_delete_data->>'contact_notification_sent_date') is null") where("(force_delete_data->>'contact_notification_sent_date') is null")
} }
HOLD_STATUSES = [ HOLD_STATUSES = [DomainStatus::SERVER_HOLD,
DomainStatus::SERVER_HOLD, DomainStatus::CLIENT_HOLD].freeze
DomainStatus::CLIENT_HOLD,
].freeze
end end
class_methods do class_methods do

View file

@ -121,7 +121,7 @@ module EppErrors
err = { code: code, msg: t } err = { code: code, msg: t }
val = check_for_status(code, obj, val) val = check_for_status(code, obj, val)
err[:value] = { val: val, obj: obj } if val.present? err[:value] = { val: val, obj: obj } if val.present?
self.errors.add(:epp_errors, **err) errors.add(:epp_errors, **err)
end end
def check_for_status(code, obj, val) def check_for_status(code, obj, val)

View file

@ -5,26 +5,25 @@ module UserEvents
# EPP requires a server defined creator ID, which should be registrar code if we have one # EPP requires a server defined creator ID, which should be registrar code if we have one
def cr_id def cr_id
# try this, rebuild user for registrar before searching history? really? # try this, rebuild user for registrar before searching history? really?
registrar = self.creator.try(:registrar) registrar = creator.try(:registrar)
if registrar.present? # Did creator return a kind of User that has a registrar? if registrar.present? # Did creator return a kind of User that has a registrar?
registrar.code registrar.code
else else
if self.versions.first.try(:object).nil? if versions.first.try(:object).nil?
changes = self.versions.first.try(:object_changes) changes = versions.first.try(:object_changes)
cr_registrar_id = changes['registrar_id'].second if changes.present? cr_registrar_id = changes['registrar_id'].second if changes.present?
else else
# untested, expected never to execute # untested, expected never to execute
cr_registrar_id = self.versions.first.object['registrar_id'] cr_registrar_id = versions.first.object['registrar_id']
end end
if cr_registrar_id.present? if cr_registrar_id.present?
Registrar.find(cr_registrar_id).code Registrar.find(cr_registrar_id).code
else else
# cr_id optional for domain, but required for contact; but we want something here anyway # cr_id optional for domain, but required for contact; but we want something here anyway
self.creator_str || self.registrar.code # Fallback creator_str || self.registrar.code # Fallback
end end
end end
end end
end end
end end

View file

@ -11,7 +11,7 @@ class Contact < ApplicationRecord
include Contact::Archivable include Contact::Archivable
include EmailVerifable include EmailVerifable
belongs_to :original, class_name: self.name belongs_to :original, class_name: name
belongs_to :registrar, required: true belongs_to :registrar, required: true
has_many :domain_contacts has_many :domain_contacts
has_many :domains, through: :domain_contacts has_many :domains, through: :domain_contacts
@ -20,6 +20,7 @@ class Contact < ApplicationRecord
has_many :actions, dependent: :destroy has_many :actions, dependent: :destroy
attr_accessor :legal_document_id attr_accessor :legal_document_id
alias_attribute :kind, :ident_type alias_attribute :kind, :ident_type
alias_attribute :copy_from_id, :original_id # Old attribute name; for PaperTrail alias_attribute :copy_from_id, :original_id # Old attribute name; for PaperTrail
@ -29,7 +30,7 @@ class Contact < ApplicationRecord
} }
NAME_REGEXP = /([\u00A1-\u00B3\u00B5-\u00BF\u0021-\u0026\u0028-\u002C\u003A-\u0040]| NAME_REGEXP = /([\u00A1-\u00B3\u00B5-\u00BF\u0021-\u0026\u0028-\u002C\u003A-\u0040]|
[\u005B-\u005F\u007B-\u007E\u2040-\u206F\u20A0-\u20BF\u2100-\u218F])/x.freeze [\u005B-\u005F\u007B-\u007E\u2040-\u206F\u20A0-\u20BF\u2100-\u218F])/x
validates :name, :email, presence: true validates :name, :email, presence: true
validates :name, format: { without: NAME_REGEXP, message: :invalid }, if: -> { priv? } validates :name, format: { without: NAME_REGEXP, message: :invalid }, if: -> { priv? }

View file

@ -241,7 +241,7 @@ module Depp
ident = ident_xml[:_anonymus].try(:first) ident = ident_xml[:_anonymus].try(:first)
when :update when :update
# detect if any ident has changed, nb! ident and self.ident is not always same # detect if any ident has changed, nb! ident and self.ident is not always same
unless ident == self.ident && ident == self.ident_type && ident_country_code == self.ident_country_code unless ident == self.ident && ident == ident_type && ident_country_code == ident_country_code
ident = ident_xml[:_anonymus].try(:first) ident = ident_xml[:_anonymus].try(:first)
end end
end end

View file

@ -11,7 +11,7 @@ module Depp
validate :validate_existance_in_server validate :validate_existance_in_server
def initialize(args = {}) def initialize(args = {})
args.each { |k, v| send("#{k.to_s}=", v) } args.each { |k, v| send("#{k}=", v) }
end end
def server def server

View file

@ -76,15 +76,15 @@ class Dnskey < ApplicationRecord
def validate_flags def validate_flags
return if flags.blank? return if flags.blank?
return if FLAGS.include?(flags.to_s) return if FLAGS.include?(flags.to_s)
errors.add(:flags, :invalid, values: "Valid flags are: #{FLAGS.join(', ')}") errors.add(:flags, :invalid, values: "Valid flags are: #{FLAGS.join(', ')}")
end end
def generate_digest def generate_digest
return unless flags == 257 || flags == 256 # require ZoneFlag, but optional SecureEntryPoint return unless flags == 257 || flags == 256 # require ZoneFlag, but optional SecureEntryPoint
self.ds_alg = alg self.ds_alg = alg
if self.ds_digest_type.blank? || !DS_DIGEST_TYPE.include?(ds_digest_type) self.ds_digest_type = Setting.ds_digest_type if ds_digest_type.blank? || !DS_DIGEST_TYPE.include?(ds_digest_type)
self.ds_digest_type = Setting.ds_digest_type
end
flags_hex = self.class.int_to_hex(flags) flags_hex = self.class.int_to_hex(flags)
protocol_hex = self.class.int_to_hex(protocol) protocol_hex = self.class.int_to_hex(protocol)
@ -93,7 +93,7 @@ class Dnskey < ApplicationRecord
hex = [domain.name_in_wire_format, flags_hex, protocol_hex, alg_hex, public_key_hex].join hex = [domain.name_in_wire_format, flags_hex, protocol_hex, alg_hex, public_key_hex].join
bin = self.class.hex_to_bin(hex) bin = self.class.hex_to_bin(hex)
case self.ds_digest_type case ds_digest_type
when 1 when 1
self.ds_digest = Digest::SHA1.hexdigest(bin).upcase self.ds_digest = Digest::SHA1.hexdigest(bin).upcase
when 2 when 2
@ -113,10 +113,10 @@ class Dnskey < ApplicationRecord
c = 0 c = 0
wire_format.each_byte.with_index do |b, i| wire_format.each_byte.with_index do |b, i|
if i.even? c += if i.even?
c += b << 8 b << 8
else else
c += b b
end end
end end
@ -150,21 +150,21 @@ class Dnskey < ApplicationRecord
end end
class << self class << self
def int_to_hex(s) def int_to_hex(num)
s = s.to_s(16) num = num.to_s(16)
s.prepend('0') if s.length.odd? num.prepend('0') if num.length.odd?
end end
def hex_to_bin(s) def hex_to_bin(num)
s.scan(/../).map(&:hex).pack('c*') num.scan(/../).map(&:hex).pack('c*')
end end
def bin_to_hex(s) def bin_to_hex(num)
s.each_byte.map { |b| format('%02X', b) }.join num.each_byte.map { |b| format('%02X', b) }.join
end end
def pub_key_base64?(pub) def pub_key_base64?(pub)
return unless pub&.is_a?(String) return unless pub.is_a?(String)
Base64.strict_encode64(Base64.strict_decode64(pub)) == pub Base64.strict_encode64(Base64.strict_decode64(pub)) == pub
rescue ArgumentError rescue ArgumentError

View file

@ -121,11 +121,9 @@ class Domain < ApplicationRecord
validate :status_is_consistant validate :status_is_consistant
def status_is_consistant def status_is_consistant
has_error = (hold_status? && statuses.include?(DomainStatus::SERVER_MANUAL_INZONE)) has_error = (hold_status? && statuses.include?(DomainStatus::SERVER_MANUAL_INZONE))
unless has_error if !has_error && (statuses & DELETE_STATUSES).any?
if (statuses & DELETE_STATUSES).any?
has_error = statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED has_error = statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED
end end
end
errors.add(:domains, I18n.t(:object_status_prohibits_operation)) if has_error errors.add(:domains, I18n.t(:object_status_prohibits_operation)) if has_error
end end
@ -345,10 +343,10 @@ class Domain < ApplicationRecord
# find by internationalized domain name # find by internationalized domain name
# internet domain name => ascii or puny, but db::domains.name is unicode # internet domain name => ascii or puny, but db::domains.name is unicode
def self.find_by_idn(name) def self.find_by_idn(name)
domain = self.find_by_name name domain = find_by_name name
if domain.blank? && name.include?('-') if domain.blank? && name.include?('-')
unicode = SimpleIDN.to_unicode name # we have no index on domains.name_puny unicode = SimpleIDN.to_unicode name # we have no index on domains.name_puny
domain = self.find_by_name unicode domain = find_by_name unicode
end end
domain domain
end end
@ -381,9 +379,7 @@ class Domain < ApplicationRecord
return true unless Setting.days_to_renew_domain_before_expire != 0 return true unless Setting.days_to_renew_domain_before_expire != 0
# if you can renew domain at days_to_renew before domain expiration # if you can renew domain at days_to_renew before domain expiration
if (expire_time.to_date - Time.zone.today) + 1 > Setting.days_to_renew_domain_before_expire return false if (expire_time.to_date - Time.zone.today) + 1 > Setting.days_to_renew_domain_before_expire
return false
end
true true
end end
@ -597,7 +593,7 @@ class Domain < ApplicationRecord
when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set
self.outzone_at = Time.zone.now if force_delete_scheduled? self.outzone_at = Time.zone.now if force_delete_scheduled?
when DomainStatus::EXPIRED # removal causes server hold to set when DomainStatus::EXPIRED # removal causes server hold to set
self.outzone_at = self.expire_time + 15.day self.outzone_at = expire_time + 15.day
when DomainStatus::SERVER_HOLD # removal causes server hold to set when DomainStatus::SERVER_HOLD # removal causes server hold to set
self.outzone_at = nil self.outzone_at = nil
end end

View file

@ -144,8 +144,8 @@ class Epp::Domain < Domain
return return
end end
if doc = attach_legal_document(::Deserializers::Xml::LegalDocument.new(frame).call) if doc = attach_legal_document(::Deserializers::Xml::LegalDocument.new(frame).call) && doc&.persisted?
frame.css("legalDocument").first.content = doc.path if doc&.persisted? frame.css("legalDocument").first.content = doc.path
end end
if Setting.request_confirmation_on_domain_deletion_enabled && if Setting.request_confirmation_on_domain_deletion_enabled &&
@ -325,11 +325,13 @@ class Epp::Domain < Domain
return false return false
end end
if (statuses &
[DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED]).any?
begin begin
errors.add(:base, :domain_status_prohibits_operation) errors.add(:base, :domain_status_prohibits_operation)
return false return false
end if (statuses & end
[DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED]).any? end
true true
end end

View file

@ -16,7 +16,7 @@ class Invoice < ApplicationRecord
scope :all_columns, -> { select("invoices.*") } scope :all_columns, -> { select("invoices.*") }
scope :sort_due_date_column, -> { all_columns.select("CASE WHEN invoices.cancelled_at is not null THEN scope :sort_due_date_column, -> { all_columns.select("CASE WHEN invoices.cancelled_at is not null THEN
(invoices.cancelled_at + interval '100 year') ELSE (invoices.cancelled_at + interval '100 year') ELSE
invoices.due_date END AS sort_due_date")} invoices.due_date END AS sort_due_date") }
scope :sort_by_sort_due_date_asc, -> { sort_due_date_column.order("sort_due_date ASC") } scope :sort_by_sort_due_date_asc, -> { sort_due_date_column.order("sort_due_date ASC") }
scope :sort_by_sort_due_date_desc, -> { sort_due_date_column.order("sort_due_date DESC") } scope :sort_by_sort_due_date_desc, -> { sort_due_date_column.order("sort_due_date DESC") }
scope :sort_receipt_date_column, -> { all_columns.includes(:account_activity).references(:account_activity).select(%Q{ scope :sort_receipt_date_column, -> { all_columns.includes(:account_activity).references(:account_activity).select(%Q{
@ -91,8 +91,8 @@ class Invoice < ApplicationRecord
read_attribute(:total) read_attribute(:total)
end end
def each def each(&block)
items.each { |item| yield item } items.each(&block)
end end
def as_pdf def as_pdf

View file

@ -8,7 +8,7 @@ class User < ApplicationRecord
self.ignored_columns = %w[legacy_id] self.ignored_columns = %w[legacy_id]
def id_role_username def id_role_username
"#{self.id}-#{self.class}: #{self.username}" "#{id}-#{self.class}: #{username}"
end end
def self.from_omniauth(omniauth_hash) def self.from_omniauth(omniauth_hash)

View file

@ -54,12 +54,8 @@ class WhiteIp < ApplicationRecord
def ids_including(ip) def ids_including(ip)
ipv4 = ipv6 = [] ipv4 = ipv6 = []
if check_ip4(ip).present? ipv4 = select { |white_ip| check_ip4(white_ip.ipv4) === check_ip4(ip) } if check_ip4(ip).present?
ipv4 = select { |white_ip| check_ip4(white_ip.ipv4) === check_ip4(ip) } ipv6 = select { |white_ip| check_ip6(white_ip.ipv6) === check_ip6(ip) } if check_ip6(ip).present?
end
if check_ip6(ip).present?
ipv6 = select { |white_ip| check_ip6(white_ip.ipv6) === check_ip6(ip) }
end
(ipv4 + ipv6).pluck(:id).flatten.uniq (ipv4 + ipv6).pluck(:id).flatten.uniq
end end
# rubocop:enable Style/CaseEquality # rubocop:enable Style/CaseEquality

View file

@ -29,13 +29,9 @@ xml.epp_head do
@nameservers.each do |x| @nameservers.each do |x|
xml.tag!('domain:hostAttr') do xml.tag!('domain:hostAttr') do
xml.tag!('domain:hostName', x.hostname) xml.tag!('domain:hostName', x.hostname)
if x.ipv4.present? x.ipv4.each { |ip| xml.tag!('domain:hostAddr', ip, 'ip' => 'v4') } if x.ipv4.present?
x.ipv4.each { |ip| xml.tag!('domain:hostAddr', ip, 'ip' => 'v4') }
end
if x.ipv6.present? x.ipv6.each { |ip| xml.tag!('domain:hostAddr', ip, 'ip' => 'v6') } if x.ipv6.present?
x.ipv6.each { |ip| xml.tag!('domain:hostAddr', ip, 'ip' => 'v6') }
end
end end
end end
end end

View file

@ -46,9 +46,7 @@ module Deserializers
@ds_data = [] @ds_data = []
# schema validation prevents both in the same parent node # schema validation prevents both in the same parent node
if frame.css('dsData').present? frame.css('dsData').each { |k| @ds_data << key_from_params(k, dsa: true) } if frame.css('dsData').present?
frame.css('dsData').each { |k| @ds_data << key_from_params(k, dsa: true) }
end
if frame.css('all')&.text == 'true' if frame.css('all')&.text == 'true'
keys_from_domain_name(domain_name) keys_from_domain_name(domain_name)

View file

@ -6,9 +6,7 @@ class PhoneValidator < ActiveModel::EachValidator
country_code = phone_parts.first country_code = phone_parts.first
subscriber_no = phone_parts.second subscriber_no = phone_parts.second
if zeros_only?(country_code) || zeros_only?(subscriber_no) record.errors.add(attribute, :invalid) if zeros_only?(country_code) || zeros_only?(subscriber_no)
record.errors.add(attribute, :invalid)
end
end end
private private

View file

@ -3,8 +3,8 @@ module Xsd
SCHEMA_PATH = 'lib/schemas/'.freeze SCHEMA_PATH = 'lib/schemas/'.freeze
BASE_URL = 'https://epp.tld.ee/schema/'.freeze BASE_URL = 'https://epp.tld.ee/schema/'.freeze
REGEX_PREFIX_WITH_DASH = /(?<prefix>\w+-\w+)-(?<version>\w.\w).xsd/.freeze REGEX_PREFIX_WITH_DASH = /(?<prefix>\w+-\w+)-(?<version>\w.\w).xsd/
REGEX_PREFIX_WITHOUT_DASH = /(?<prefix>\w+)-(?<version>\w.\w).xsd/.freeze REGEX_PREFIX_WITHOUT_DASH = /(?<prefix>\w+)-(?<version>\w.\w).xsd/
PREFIXES = %w[ PREFIXES = %w[
domain-ee domain-ee