fixed codeclimate errors (partically)

This commit is contained in:
dinsmol 2021-09-09 09:19:09 +03:00
parent 3f41ce4ab4
commit f4e0084895
103 changed files with 339 additions and 367 deletions

View file

@ -1,7 +1,9 @@
version: "2" version: "2"
prepare: prepare:
fetch: fetch:
- "https://raw.githubusercontent.com/internetee/style-guide/master/ruby/.rubocop.yml" - "https://raw.githubusercontent.com/internetee/style-guide/adding-new-rules/.rubocop-ruby.yml"
- url: "https://raw.githubusercontent.com/internetee/style-guide/adding-new-rules/.rubocop-rails.yml"
path: ".rubocop.yml"
plugins: plugins:
brakeman: brakeman:
enabled: true enabled: true

22
Gemfile
View file

@ -5,8 +5,8 @@ gem 'active_interaction', '~> 4.0'
gem 'apipie-rails', '~> 0.5.19' gem 'apipie-rails', '~> 0.5.19'
gem 'bootsnap', '>= 1.1.0', require: false gem 'bootsnap', '>= 1.1.0', require: false
gem 'iso8601', '0.13.0' # for dates and times gem 'iso8601', '0.13.0' # for dates and times
gem 'mime-types-data'
gem 'mimemagic', '0.4.3' gem 'mimemagic', '0.4.3'
gem 'mime-types-data'
gem 'puma' gem 'puma'
gem 'rails', '~> 6.1.4' gem 'rails', '~> 6.1.4'
gem 'rest-client' gem 'rest-client'
@ -29,22 +29,22 @@ gem 'nokogiri', '~> 1.12.4'
# style # style
gem 'bootstrap-sass', '~> 3.4' gem 'bootstrap-sass', '~> 3.4'
gem 'cancancan'
gem 'coderay', '1.1.3' # xml console visualize gem 'coderay', '1.1.3' # xml console visualize
gem 'coffee-rails', '>= 5.0' gem 'coffee-rails', '>= 5.0'
gem 'devise', '~> 4.8'
gem 'jquery-rails' gem 'jquery-rails'
gem 'selectize-rails', '0.12.6' # include selectize.js for select
gem 'kaminari' gem 'kaminari'
gem 'sass-rails' gem 'sass-rails'
gem 'select2-rails', '4.0.13' # for autocomplete gem 'select2-rails', '4.0.13' # for autocomplete
gem 'cancancan' gem 'selectize-rails', '0.12.6' # include selectize.js for select
gem 'devise', '~> 4.8'
# registry specfic # registry specfic
gem 'data_migrate', '~> 7.0' gem 'data_migrate', '~> 7.0'
gem 'dnsruby', '~> 1.61' gem 'dnsruby', '~> 1.61'
gem 'isikukood' # for EE-id validation gem 'isikukood' # for EE-id validation
gem 'simpleidn', '0.2.1' # For punycode
gem 'money-rails' gem 'money-rails'
gem 'simpleidn', '0.2.1' # For punycode
gem 'whenever', '1.0.0', require: false gem 'whenever', '1.0.0', require: false
# country listing # country listing
@ -62,22 +62,22 @@ gem 'omniauth-rails_csrf_protection'
gem 'omniauth-tara', github: 'internetee/omniauth-tara' gem 'omniauth-tara', github: 'internetee/omniauth-tara'
gem 'airbrake'
gem 'daemons-rails', '1.2.1'
gem 'epp', github: 'internetee/epp', branch: :master gem 'epp', github: 'internetee/epp', branch: :master
gem 'epp-xml', '1.2.0', github: 'internetee/epp-xml', branch: :master gem 'epp-xml', '1.2.0', github: 'internetee/epp-xml', branch: :master
gem 'jquery-ui-rails', '6.0.1'
gem 'pdfkit'
gem 'que' gem 'que'
gem 'daemons-rails', '1.2.1'
gem 'que-web' gem 'que-web'
gem 'sidekiq' gem 'sidekiq'
gem 'pdfkit'
gem 'jquery-ui-rails', '6.0.1'
gem 'airbrake'
gem 'company_register', github: 'internetee/company_register', gem 'company_register', github: 'internetee/company_register',
branch: 'master' branch: 'master'
gem 'e_invoice', github: 'internetee/e_invoice', branch: :master
gem 'lhv', github: 'internetee/lhv', branch: 'master'
gem 'domain_name' gem 'domain_name'
gem 'e_invoice', github: 'internetee/e_invoice', branch: :master
gem 'haml', '~> 5.2' gem 'haml', '~> 5.2'
gem 'lhv', github: 'internetee/lhv', branch: 'master'
gem 'rexml' gem 'rexml'
gem 'wkhtmltopdf-binary', '~> 0.12.5.1' gem 'wkhtmltopdf-binary', '~> 0.12.5.1'

View file

@ -63,7 +63,12 @@ module Admin
def admin_user_params def admin_user_params
params.require(:admin_user).permit(:username, params.require(:admin_user).permit(:username,
:password, :password_confirmation, :identity_code, :email, :country_code, { roles: [] }) :password,
:password_confirmation,
:identity_code,
:email,
:country_code,
{ roles: [] })
end end
end end
end end

View file

@ -61,8 +61,8 @@ module Admin
end end
def bank_statement_params def bank_statement_params
params.require(:bank_statement).permit(:bank_code, :iban, bank_transactions_attributes: [ params.require(:bank_statement).permit(:bank_code, :iban, bank_transactions_attributes: %i[
:description, :sum, :currency, :reference_no, :paid_at description sum currency reference_no paid_at
]) ])
end end
end end

View file

@ -43,7 +43,6 @@ module Admin
end end
end end
def blocked_domain_params def blocked_domain_params
params.require(:blocked_domain).permit(:name) params.require(:blocked_domain).permit(:name)
end end

View file

@ -11,19 +11,20 @@ module Admin
@versions = @q.result.page(params[:page]) @versions = @q.result.page(params[:page])
search_params = params[:q].deep_dup search_params = params[:q].deep_dup
whereS = "1=1" where_s = "1=1"
search_params.each do |key, value| search_params.each do |key, value|
next if value.empty? next if value.empty?
case key
where_s += case key
when 'event' when 'event'
whereS += " AND event = '#{value}'" " AND event = '#{value}'"
else else
whereS += create_where_string(key, value) create_where_string(key, value)
end end
end end
versions = Version::ContactVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc) versions = Version::ContactVersion.includes(:item).where(where_s).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q]) @q = versions.search(params[:q])
@versions = @q.result.page(params[:page]) @versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?

View file

@ -9,7 +9,8 @@ module Admin
params[:q] ||= {} params[:q] ||= {}
search_params = params[:q].deep_dup search_params = params[:q].deep_dup
if search_params[:domain_contacts_type_in].is_a?(Array) && search_params[:domain_contacts_type_in].delete('registrant') if search_params[:domain_contacts_type_in].is_a?(Array) &&
search_params[:domain_contacts_type_in].delete('registrant')
search_params[:registrant_domains_id_not_null] = 1 search_params[:registrant_domains_id_not_null] = 1
end end

View file

@ -21,26 +21,31 @@ module Admin
search_params.delete(:registrar) search_params.delete(:registrar)
end end
whereS = "1=1" where_s = "1=1"
search_params.each do |key, value| search_params.each do |key, value|
next if value.empty? next if value.empty?
case key
where_s += case key
when 'event' when 'event'
whereS += " AND event = '#{value}'" " AND event = '#{value}'"
when 'name' when 'name'
whereS += " AND (object->>'name' ~* '#{value}' OR object_changes->>'name' ~* '#{value}')" " AND (object->>'name' ~* '#{value}' OR object_changes->>'name' ~* '#{value}')"
else else
whereS += create_where_string(key, value) create_where_string(key, value)
end end
end end
whereS += " AND object->>'registrant_id' IN (#{registrants.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrants.present? if registrants.present?
whereS += " AND 1=0" if registrants == [] where_s += " AND object->>'registrant_id' IN (#{registrants.map { |r| "'#{r.id}'" }.join ','})"
whereS += " AND object->>'registrar_id' IN (#{registrars.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrars.present? end
whereS += " AND 1=0" if registrars == [] where_s += " AND 1=0" if registrants == []
if registrars.present?
where_s += " AND object->>'registrar_id' IN (#{registrars.map { |r| "'#{r.id}'" }.join ','})"
end
where_s += " AND 1=0" if registrars == []
versions = Version::DomainVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc) versions = Version::DomainVersion.includes(:item).where(where_s).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q]) @q = versions.search(params[:q])
@versions = @q.result.page(params[:page]) @versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?

View file

@ -5,20 +5,19 @@ module Admin
def index def index
params[:q] ||= {} params[:q] ||= {}
if params[:statuses_contains] domains = if params[:statuses_contains]
domains = Domain.includes(:registrar, :registrant).where( Domain.includes(:registrar, :registrant).where(
"domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}" "domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
) )
else else
domains = Domain.includes(:registrar, :registrant) Domain.includes(:registrar, :registrant)
end end
normalize_search_parameters do normalize_search_parameters do
@q = domains.search(params[:q]) @q = domains.search(params[:q])
@domains = @q.result.page(params[:page]) @domains = @q.result.page(params[:page])
if @domains.count == 1 && params[:q][:name_matches].present? (redirect_to [:admin, @domains.first] and return if @domains.count == 1 && params[:q][:name_matches].present?)
redirect_to [:admin, @domains.first] and return if @domains.count.zero? && params[:q][:name_matches] !~ /^%.+%$/
elsif @domains.count == 0 && params[:q][:name_matches] !~ /^%.+%$/
# if we do not get any results, add wildcards to the name field and search again # if we do not get any results, add wildcards to the name field and search again
n_cache = params[:q][:name_matches] n_cache = params[:q][:name_matches]
params[:q][:name_matches] = "%#{params[:q][:name_matches]}%" params[:q][:name_matches] = "%#{params[:q][:name_matches]}%"
@ -51,7 +50,7 @@ module Admin
redirect_to [:admin, @domain] redirect_to [:admin, @domain]
else else
build_associations build_associations
flash.now[:alert] = I18n.t('failed_to_update_domain') + ' ' + @domain.errors.full_messages.join(", ") flash.now[:alert] = "#{I18n.t('failed_to_update_domain')} #{@domain.errors.full_messages.join(', ')}"
render 'edit' render 'edit'
end end
end end

View file

@ -8,8 +8,14 @@ module Admin
@q.sorts = 'id desc' if @q.sorts.empty? @q.sorts = 'id desc' if @q.sorts.empty?
@epp_logs = @q.result @epp_logs = @q.result
@epp_logs = @epp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present? if params[:q][:created_at_gteq].present?
@epp_logs = @epp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present? @epp_logs = @epp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)",
Time.parse(params[:q][:created_at_gteq]))
end
if params[:q][:created_at_lteq].present?
@epp_logs = @epp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)",
Time.parse(params[:q][:created_at_lteq]))
end
@epp_logs = @epp_logs.page(params[:page]) @epp_logs = @epp_logs.page(params[:page])
render_by_format('admin/epp_logs/index', 'epp_logs') render_by_format('admin/epp_logs/index', 'epp_logs')

View file

@ -8,8 +8,14 @@ module Admin
@q.sorts = 'id desc' if @q.sorts.empty? @q.sorts = 'id desc' if @q.sorts.empty?
@repp_logs = @q.result @repp_logs = @q.result
@repp_logs = @repp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present? if params[:q][:created_at_gteq].present?
@repp_logs = @repp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present? @repp_logs = @repp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)",
Time.parse(params[:q][:created_at_gteq]))
end
if params[:q][:created_at_lteq].present?
@repp_logs = @repp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)",
Time.parse(params[:q][:created_at_lteq]))
end
@repp_logs = @repp_logs.page(params[:page]) @repp_logs = @repp_logs.page(params[:page])
@count = @q.result.count @count = @q.result.count
@repp_logs = @repp_logs.per(params[:results_per_page]) if paginate? @repp_logs = @repp_logs.per(params[:results_per_page]) if paginate?

View file

@ -45,8 +45,7 @@ module Api
def create_token(user) def create_token(user)
token_creator = AuthTokenCreator.create_with_defaults(user) token_creator = AuthTokenCreator.create_with_defaults(user)
hash = token_creator.token_in_hash token_creator.token_in_hash
hash
end end
def check_ip_whitelist def check_ip_whitelist

View file

@ -103,9 +103,10 @@ module Api
end end
def verify_action def verify_action
action = if params[:template] == 'change' action = case params[:template]
when 'change'
@domain.registrant_update_confirmable?(verify_params[:token]) @domain.registrant_update_confirmable?(verify_params[:token])
elsif params[:template] == 'delete' when 'delete'
@domain.registrant_delete_confirmable?(verify_params[:token]) @domain.registrant_delete_confirmable?(verify_params[:token])
end end

View file

@ -77,9 +77,7 @@ module Api
render json: { errors: [{ address: [error_msg] }] }, status: :bad_request and return render json: { errors: [{ address: [error_msg] }] }, status: :bad_request and return
end end
if ENV['fax_enabled'] == 'true' contact.fax = params[:fax] if ENV['fax_enabled'] == 'true' && params[:fax].present?
contact.fax = params[:fax] if params[:fax].present?
end
logger.debug "ENV['fax_enabled'] is set to #{ENV['fax_enabled']}" logger.debug "ENV['fax_enabled'] is set to #{ENV['fax_enabled']}"
if ENV['fax_enabled'] != 'true' && params[:fax] if ENV['fax_enabled'] != 'true' && params[:fax]

View file

@ -303,7 +303,10 @@ module Epp
if request_command == 'login' && frame.present? if request_command == 'login' && frame.present?
frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]</') frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]</')
end end
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/, "<eis:legalDocument>[FILTERED]</eis:legalDocument>") if frame.present? if frame.present?
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/,
"<eis:legalDocument>[FILTERED]</eis:legalDocument>")
end
ApiLog::EppLog.create({ ApiLog::EppLog.create({
request: trimmed_request, request: trimmed_request,
@ -312,7 +315,8 @@ module Epp
request_object: resource ? "#{params[:epp_object_type]}: #{resource.class} - #{resource.id} - #{resource.name}" : params[:epp_object_type], request_object: resource ? "#{params[:epp_object_type]}: #{resource.class} - #{resource.id} - #{resource.name}" : params[:epp_object_type],
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) || current_user.try(:registrar).try(:to_s), api_user_registrar: @api_user.try(:registrar).try(:to_s) ||
current_user.try(:registrar).try(:to_s),
ip: request.ip, ip: request.ip,
uuid: request.uuid uuid: request.uuid
}) })

View file

@ -155,8 +155,8 @@ module Epp
end end
def validate_update def validate_update
if element_count('update > chg > registrant') > 0 if element_count('update > chg > registrant').positive? && current_user.legaldoc_mandatory?
requires 'extension > extdata > legalDocument' if current_user.legaldoc_mandatory? requires 'extension > extdata > legalDocument'
end end
@prefix = 'update > update >' @prefix = 'update > update >'

View file

@ -51,6 +51,7 @@ module Epp
end end
handle_errors(@notification) and return unless @notification.mark_as_read handle_errors(@notification) and return unless @notification.mark_as_read
render_epp_response 'epp/poll/poll_ack' render_epp_response 'epp/poll/poll_ack'
end end

View file

@ -29,23 +29,19 @@ module Epp
end end
end end
if !Rails.env.development? && (!webclient_request && @api_user) if !Rails.env.development? && (!webclient_request && @api_user) &&
unless @api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], !@api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], request.env['HTTP_SSL_CLIENT_S_DN_CN'])
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, msg: msg,code: '2501')
code: '2501')
success = false success = false
end end
end
if success && !@api_user if success && !@api_user
msg = 'Authentication error; server closing connection (API user not found)' msg = 'Authentication error; server closing connection (API user not found)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2501')
code: '2501')
success = false success = false
end end
@ -53,8 +49,7 @@ module Epp
if success && !@api_user.try(:active) if success && !@api_user.try(:active)
msg = 'Authentication error; server closing connection (API user is not active)' msg = 'Authentication error; server closing connection (API user is not active)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2501')
code: '2501')
success = false success = false
end end
@ -62,8 +57,7 @@ module Epp
if success && @api_user.cannot?(:create, :epp_login) if success && @api_user.cannot?(:create, :epp_login)
msg = 'Authentication error; server closing connection (API user does not have epp role)' msg = 'Authentication error; server closing connection (API user does not have epp role)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2501')
code: '2501')
success = false success = false
end end
@ -71,8 +65,7 @@ module Epp
if success && !ip_white? if success && !ip_white?
msg = 'Authentication error; server closing connection (IP is not whitelisted)' msg = 'Authentication error; server closing connection (IP is not whitelisted)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2501')
code: '2501')
success = false success = false
end end
@ -80,8 +73,7 @@ module Epp
if success && EppSession.limit_reached?(@api_user.registrar) if success && EppSession.limit_reached?(@api_user.registrar)
msg = 'Session limit exceeded; server closing connection (connection limit reached)' msg = 'Session limit exceeded; server closing connection (connection limit reached)'
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: msg, msg: msg, code: '2502')
code: '2502')
success = false success = false
end end
@ -99,8 +91,7 @@ module Epp
if already_authenticated if already_authenticated
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
msg: 'Command use error; Already authenticated', msg: 'Command use error; Already authenticated', code: 2002)
code: 2002)
handle_errors handle_errors
return return
end end
@ -118,8 +109,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 if @api_user && !@api_user.registrar.api_ip_white?(request.ip)
return false unless @api_user.registrar.api_ip_white?(request.ip) return false
end end
true true
end end
@ -127,8 +118,7 @@ module Epp
def logout def logout
unless signed_in? unless signed_in?
epp_errors.add(:epp_errors, epp_errors.add(:epp_errors,
code: 2201, code: 2201, msg: 'Authorization error')
msg: 'Authorization error')
handle_errors handle_errors
return return
end end

View file

@ -89,7 +89,7 @@ class Registrar
end end
def domain_ids_for_bulk_renew def domain_ids_for_bulk_renew
params.dig('domain_ids')&.reject { |id| id.blank? } params['domain_ids']&.reject { |id| id.blank? }
end end
def renew_task(domains) def renew_task(domains)

View file

@ -13,7 +13,8 @@ class Registrar
search_params = params[:q].deep_dup search_params = params[:q].deep_dup
if search_params[:domain_contacts_type_in].is_a?(Array) && search_params[:domain_contacts_type_in].delete('registrant') if search_params[:domain_contacts_type_in].is_a?(Array) &&
search_params[:domain_contacts_type_in].delete('registrant')
search_params[:registrant_domains_id_not_null] = 1 search_params[:registrant_domains_id_not_null] = 1
end end

View file

@ -16,9 +16,7 @@ class Registrar
end end
def destroy def destroy
@data = depp_current_user.request(@ex.poll(poll: { @data = depp_current_user.request(@ex.poll(poll: { value: '', attrs: { op: 'ack', msgID: params[:id] } }))
value: '', attrs: { op: 'ack', msgID: params[:id] }
}))
@results = @data.css('result') @results = @data.css('result')

View file

@ -30,12 +30,10 @@ class Registrar
show_error and return show_error and return
end end
if @depp_user.pki if @depp_user.pki && !@api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'],
unless @api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'],
request.env['HTTP_SSL_CLIENT_S_DN_CN'], api: false) request.env['HTTP_SSL_CLIENT_S_DN_CN'], api: false)
@depp_user.errors.add(:base, :invalid_cert) @depp_user.errors.add(:base, :invalid_cert)
end end
end
if @depp_user.errors.none? if @depp_user.errors.none?
if @api_user.active? if @api_user.active?

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}/app/views/registrar/xml_consoles/epp_requests"
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.to_s}\"",
"\"#{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

@ -89,13 +89,11 @@ module Repp
return contacts.pluck(:code) unless details return contacts.pluck(:code) unless details
contacts = contacts.map do |contact| contacts.map do |contact|
serializer = ::Serializers::Repp::Contact.new(contact, serializer = ::Serializers::Repp::Contact.new(contact,
show_address: Contact.address_processing?) show_address: Contact.address_processing?)
serializer.to_json serializer.to_json
end end
contacts
end end
def opt_addr? def opt_addr?

View file

@ -53,7 +53,7 @@ module Repp
end end
def nameserver_params def nameserver_params
params.permit(:domain_id, nameservers: [[:hostname, :action, ipv4: [], ipv6: []]]) params.permit(:domain_id, nameservers: [[:hostname, :action, { ipv4: [], ipv6: [] }]])
end end
end end
end end

View file

@ -223,7 +223,7 @@ module Repp
params.require(:domain).permit(:name, :registrant, :period, :period_unit, :registrar, params.require(:domain).permit(:name, :registrant, :period, :period_unit, :registrar,
:transfer_code, :reserved_pw, :transfer_code, :reserved_pw,
dnskeys_attributes: [%i[flags alg protocol public_key]], dnskeys_attributes: [%i[flags alg protocol public_key]],
nameservers_attributes: [[:hostname, ipv4: [], ipv6: []]], nameservers_attributes: [[:hostname, { ipv4: [], ipv6: [] }]],
admin_contacts: [], tech_contacts: []) admin_contacts: [], tech_contacts: [])
end end
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.to_s}.png")});"
end end
def ident_for(contact) def ident_for(contact)

View file

@ -1,10 +1,6 @@
module Actions module Actions
class ContactDelete class ContactDelete
attr_reader :contact attr_reader :contact, :new_attributes, :legal_document, :ident, :user
attr_reader :new_attributes
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(contact, legal_document = nil) def initialize(contact, legal_document = nil)
@legal_document = legal_document @legal_document = legal_document

View file

@ -1,10 +1,6 @@
module Actions module Actions
class ContactUpdate class ContactUpdate
attr_reader :contact attr_reader :contact, :new_attributes, :legal_document, :ident, :user
attr_reader :new_attributes
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(contact, new_attributes, legal_document, ident, user) def initialize(contact, new_attributes, legal_document, ident, user)
@contact = contact @contact = contact

View file

@ -6,14 +6,14 @@ module Actions
end end
def call def call
response = if Rails.env.test? if Rails.env.test?
do_test_request(@request, @uri) do_test_request(@request, @uri)
elsif Rails.env.development? elsif Rails.env.development?
do_dev_request(@request, @uri) do_dev_request(@request, @uri)
else else
do_live_request(@request, @uri) do_live_request(@request, @uri)
end end
response
rescue StandardError, OpenURI::HTTPError => e rescue StandardError, OpenURI::HTTPError => e
Rails.logger.debug e.message Rails.logger.debug e.message
end end

View file

@ -1,8 +1,6 @@
module Actions module Actions
class DomainDelete class DomainDelete
attr_reader :domain attr_reader :domain, :params, :user
attr_reader :params
attr_reader :user
def initialize(domain, params, user) def initialize(domain, params, user)
@domain = domain @domain = domain

View file

@ -1,8 +1,6 @@
module Actions module Actions
class DomainRenew class DomainRenew
attr_reader :domain attr_reader :domain, :params, :user
attr_reader :params
attr_reader :user
def initialize(domain, params, user) def initialize(domain, params, user)
@domain = domain @domain = domain

View file

@ -1,10 +1,6 @@
module Actions module Actions
class DomainTransfer class DomainTransfer
attr_reader :domain attr_reader :domain, :transfer_code, :legal_document, :ident, :user
attr_reader :transfer_code
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(domain, transfer_code, user) def initialize(domain, transfer_code, user)
@domain = domain @domain = domain

View file

@ -70,7 +70,8 @@ module Domains
max_reg_time = 11.years.from_now max_reg_time = 11.years.from_now
if renewed_expire_time >= max_reg_time if renewed_expire_time >= max_reg_time
domain.add_epp_error('2105', nil, nil, I18n.t('epp.domains.object_is_not_eligible_for_renewal', domain.add_epp_error('2105', nil, nil,
I18n.t('epp.domains.object_is_not_eligible_for_renewal',
max_date: max_reg_time.to_date.to_s(:db))) max_date: max_reg_time.to_date.to_s(:db)))
end end
renewed_expire_time renewed_expire_time

View file

@ -3,7 +3,7 @@ module Domains
class Base < ActiveInteraction::Base class Base < ActiveInteraction::Base
def to_stdout(message) def to_stdout(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
end end
end end

View file

@ -3,7 +3,7 @@ module Domains
class Base < ActiveInteraction::Base class Base < ActiveInteraction::Base
def to_stdout(message) def to_stdout(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
def logger def logger

View file

@ -3,7 +3,7 @@ module Domains
class Base < ActiveInteraction::Base class Base < ActiveInteraction::Base
def to_stdout(message) def to_stdout(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
end end
end end

View file

@ -9,6 +9,7 @@ module Domains
count = 0 count = 0
expired_pending_domains.each do |domain| expired_pending_domains.each do |domain|
log_error(domain) && next unless need_to_be_cleared?(domain) log_error(domain) && next unless need_to_be_cleared?(domain)
count += 1 count += 1
Domains::ExpiredPendings::ProcessClean.run(domain: domain) Domains::ExpiredPendings::ProcessClean.run(domain: domain)
end end

View file

@ -37,7 +37,7 @@ module Domains
def added_additional_email_into_notes(domain) def added_additional_email_into_notes(domain)
return if domain.status_notes[DomainStatus::FORCE_DELETE].include? email return if domain.status_notes[DomainStatus::FORCE_DELETE].include? email
domain.status_notes[DomainStatus::FORCE_DELETE].concat(' ' + email) domain.status_notes[DomainStatus::FORCE_DELETE].concat(" #{email}")
domain.save(validate: false) domain.save(validate: false)
end end

View file

@ -3,7 +3,7 @@ module Domains
class Base < ActiveInteraction::Base class Base < ActiveInteraction::Base
def to_stdout(message) def to_stdout(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
end end
end end

View file

@ -5,7 +5,7 @@ class CsyncJob < ApplicationJob
@store = {} @store = {}
@input_store = { secure: {}, insecure: {} } @input_store = { secure: {}, insecure: {} }
@results = {} @results = {}
@logger = Rails.env.test? ? Rails.logger : Logger.new(STDOUT) @logger = Rails.env.test? ? Rails.logger : Logger.new($stdout)
generate ? generate_scanner_input : process_scanner_results generate ? generate_scanner_input : process_scanner_results
@logger.info 'CsyncJob: Finished.' @logger.info 'CsyncJob: Finished.'
@ -121,7 +121,7 @@ class CsyncJob < ApplicationJob
end end
out_file.close out_file.close
@logger.info 'CsyncJob Generate: Finished writing output to ' + ENV['cdns_scanner_input_file'] @logger.info "CsyncJob Generate: Finished writing output to #{ENV['cdns_scanner_input_file']}"
end end
def check_directory def check_directory

View file

@ -1,5 +1,5 @@
class DisputeStatusUpdateJob < ApplicationJob class DisputeStatusUpdateJob < ApplicationJob
def perform(logger: Logger.new(STDOUT)) def perform(logger: Logger.new($stdout))
@logger = logger @logger = logger
@backlog = { 'activated': 0, 'closed': 0, 'activate_fail': [], 'close_fail': [] } @backlog = { 'activated': 0, 'closed': 0, 'activate_fail': [], 'close_fail': [] }

View file

@ -13,7 +13,8 @@ class RegistrantChangeConfirmEmailJob < ApplicationJob
private private
def log(domain) def log(domain)
message = "Send RegistrantChangeMailer#confirm email for domain #{domain.name} (##{domain.id}) to #{domain.registrant.email}" message = 'Send RegistrantChangeMailer#confirm email for domain '\
"#{domain.name} (##{domain.id}) to #{domain.registrant.email}"
logger.info(message) logger.info(message)
end end

View file

@ -12,7 +12,8 @@ class RegistrantChangeNoticeEmailJob < ApplicationJob
private private
def log(domain, new_registrant) def log(domain, new_registrant)
message = "Send RegistrantChangeMailer#notice email for domain #{domain.name} (##{domain.id}) to #{new_registrant.email}" message = 'Send RegistrantChangeMailer#notice email for domain '\
"#{domain.name} (##{domain.id}) to #{new_registrant.email}"
logger.info(message) logger.info(message)
end end

View file

@ -1,6 +1,6 @@
class ToStdout class ToStdout
def self.msg(message) def self.msg(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
end end

View file

@ -39,4 +39,3 @@ class AccountActivity < ApplicationRecord
end end
end end
end end

View file

@ -1,10 +1,6 @@
module Actions module Actions
class ContactDelete class ContactDelete
attr_reader :contact attr_reader :contact, :new_attributes, :legal_document, :ident, :user
attr_reader :new_attributes
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(contact, legal_document = nil) def initialize(contact, legal_document = nil)
@legal_document = legal_document @legal_document = legal_document

View file

@ -1,10 +1,6 @@
module Actions module Actions
class ContactUpdate class ContactUpdate
attr_reader :contact attr_reader :contact, :new_attributes, :legal_document, :ident, :user
attr_reader :new_attributes
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(contact, new_attributes, legal_document, ident, user) def initialize(contact, new_attributes, legal_document, ident, user)
@contact = contact @contact = contact

View file

@ -1,10 +1,6 @@
module Actions module Actions
class DomainTransfer class DomainTransfer
attr_reader :domain attr_reader :domain, :transfer_code, :legal_document, :ident, :user
attr_reader :transfer_code
attr_reader :legal_document
attr_reader :ident
attr_reader :user
def initialize(domain, transfer_code, user) def initialize(domain, transfer_code, user)
@domain = domain @domain = domain

View file

@ -2,8 +2,7 @@ module BalanceAutoReloadTypes
class Threshold class Threshold
include ActiveModel::Model include ActiveModel::Model
attr_accessor :amount attr_accessor :amount, :threshold
attr_accessor :threshold
validates :amount, numericality: { greater_than_or_equal_to: :min_amount } validates :amount, numericality: { greater_than_or_equal_to: :min_amount }
validates :threshold, numericality: { greater_than_or_equal_to: 0 } validates :threshold, numericality: { greater_than_or_equal_to: 0 }

View file

@ -9,7 +9,8 @@ module Billing
validates :price, :valid_from, :operation_category, :duration, presence: true validates :price, :valid_from, :operation_category, :duration, presence: true
validates :operation_category, inclusion: { in: Proc.new { |price| price.class.operation_categories } } validates :operation_category, inclusion: { in: Proc.new { |price| price.class.operation_categories } }
validates :duration, inclusion: { in: Proc.new { |price| price.class.durations.values } }, if: :should_validate_duration? validates :duration, inclusion: { in: Proc.new { |price| price.class.durations.values } },
if: :should_validate_duration?
alias_attribute :effect_time, :valid_from alias_attribute :effect_time, :valid_from
alias_attribute :expire_time, :valid_to alias_attribute :expire_time, :valid_to

View file

@ -83,7 +83,8 @@ class Certificate < ApplicationRecord
csr_file.rewind csr_file.rewind
crt_file = Tempfile.new('client_crt') crt_file = Tempfile.new('client_crt')
_out, err, _st = Open3.capture3("openssl ca -config #{ENV['openssl_config_path']} -keyfile #{ENV['ca_key_path']} \ _out, err, _st = Open3.capture3("openssl ca -config #{ENV['openssl_config_path']} \
-keyfile #{ENV['ca_key_path']} \
-cert #{ENV['ca_cert_path']} \ -cert #{ENV['ca_cert_path']} \
-extensions usr_cert -notext -md sha256 \ -extensions usr_cert -notext -md sha256 \
-in #{csr_file.path} -out #{crt_file.path} -key '#{ENV['ca_key_password']}' -batch") -in #{csr_file.path} -out #{crt_file.path} -key '#{ENV['ca_key_password']}' -batch")
@ -112,7 +113,8 @@ class Certificate < ApplicationRecord
crt_file.write(crt) crt_file.write(crt)
crt_file.rewind crt_file.rewind
_out, err, _st = Open3.capture3("openssl ca -config #{ENV['openssl_config_path']} -keyfile #{ENV['ca_key_path']} \ _out, err, _st = Open3.capture3("openssl ca -config #{ENV['openssl_config_path']} \
-keyfile #{ENV['ca_key_path']} \
-cert #{ENV['ca_cert_path']} \ -cert #{ENV['ca_cert_path']} \
-revoke #{crt_file.path} -key '#{ENV['ca_key_password']}' -batch") -revoke #{crt_file.path} -key '#{ENV['ca_key_password']}' -batch")
@ -134,7 +136,7 @@ class Certificate < ApplicationRecord
class << self class << self
def tostdout(message) def tostdout(message)
time = Time.zone.now.utc time = Time.zone.now.utc
STDOUT << "#{time} - #{message}\n" unless Rails.env.test? $stdout << "#{time} - #{message}\n" unless Rails.env.test?
end end
def update_crl def update_crl

View file

@ -47,7 +47,7 @@ module Contact::Archivable
end end
def log(msg) def log(msg)
@log ||= Logger.new(STDOUT) @log ||= Logger.new($stdout)
@log.info(msg) @log.info(msg)
end end

View file

@ -68,13 +68,10 @@ module Registrar::BookKeeping
def finalize_invoice_line(line, price:, activity:, duration:) def finalize_invoice_line(line, price:, activity:, duration:)
yearly = price.duration.in_years.to_i >= 1 yearly = price.duration.in_years.to_i >= 1
line['price'] = yearly ? (price.price.amount / price.duration.in_years.to_i) : price.price.amount line['price'] = yearly ? (price.price.amount / price.duration.in_years.to_i) : price.price.amount
line['description'] = description_in_language(price: price, yearly: yearly) line['description'] = description_in_language(price: price, yearly: yearly)
if duration.present? add_product_timeframe(line: line, activity: activity, duration: duration) if duration.present? && (duration > 1)
add_product_timeframe(line: line, activity: activity, duration: duration) if duration > 1
end
line line
end end

View file

@ -164,7 +164,9 @@ class Contact < ApplicationRecord
scope = all scope = all
# all contacts has state ok, so no need to filter by it # all contacts has state ok, so no need to filter by it
scope = scope.where("NOT contacts.statuses && ?::varchar[]", "{#{(STATUSES - [OK, LINKED]).join(',')}}") if states.delete(OK) if states.delete(OK)
scope = scope.where("NOT contacts.statuses && ?::varchar[]", "{#{(STATUSES - [OK, LINKED]).join(',')}}")
end
scope = scope.linked if states.delete(LINKED) scope = scope.linked if states.delete(LINKED)
scope = scope.where("contacts.statuses @> ?::varchar[]", "{#{states.join(',')}}") if states.any? scope = scope.where("contacts.statuses @> ?::varchar[]", "{#{states.join(',')}}") if states.any?
scope scope
@ -385,7 +387,6 @@ class Contact < ApplicationRecord
self.email = email.to_s.strip self.email = email.to_s.strip
end end
# what we can do load firstly by registrant # what we can do load firstly by registrant
# if total is smaller than needed, the load more # if total is smaller than needed, the load more
# we also need to sort by valid_to # we also need to sort by valid_to

View file

@ -1,10 +1,6 @@
class Contact class Contact
class Address class Address
attr_reader :street attr_reader :street, :zip, :city, :state, :country_code
attr_reader :zip
attr_reader :city
attr_reader :state
attr_reader :country_code
def initialize(street, zip, city, state, country_code) def initialize(street, zip, city, state, country_code)
@street = street @street = street

View file

@ -1,9 +1,7 @@
class Contact::Ident class Contact::Ident
include ActiveModel::Model include ActiveModel::Model
attr_accessor :code attr_accessor :code, :type, :country_code
attr_accessor :type
attr_accessor :country_code
validates :code, presence: true validates :code, presence: true
validates :code, national_id: true, if: :national_id? validates :code, national_id: true, if: :national_id?

View file

@ -122,7 +122,7 @@ class CsyncRecord < ApplicationRecord
end end
def self.log def self.log
Rails.env.test? ? logger : Logger.new(STDOUT) Rails.env.test? ? logger : Logger.new($stdout)
end end
def validate_csync_action def validate_csync_action

View file

@ -116,10 +116,11 @@ module Depp
xml.with_indifferent_access xml.with_indifferent_access
end end
def extract_disclosure_hash(cpd) # cpd = contact_params[:disclose] # cpd = contact_params[:disclose]
def extract_disclosure_hash(cpd)
return {} unless cpd return {} unless cpd
cpd = cpd.delete_if { |k, v| v if v != '1' && k == 'flag' }
cpd cpd.delete_if { |k, v| v if v != '1' && k == 'flag' }
end end
def extract_info_disclosure(data) def extract_info_disclosure(data)
@ -240,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
if !(ident == self.ident && ident == self.ident_type && ident_country_code == self.ident_country_code) unless ident == self.ident && ident == self.ident_type && ident_country_code == self.ident_country_code
ident = ident_xml[:_anonymus].try(:first) ident = ident_xml[:_anonymus].try(:first)
end end
end end

View file

@ -109,11 +109,9 @@ module Depp
period = params[:period].to_i.to_s period = params[:period].to_i.to_s
period_unit = params[:period][-1].to_s period_unit = params[:period][-1].to_s
current_user.request(epp_xml.renew( current_user.request(epp_xml.renew(name: { value: params[:domain_name] },
name: { value: params[:domain_name] },
curExpDate: { value: params[:cur_exp_date] }, curExpDate: { value: params[:cur_exp_date] },
period: { value: period, attrs: { unit: period_unit } } period: { value: period, attrs: { unit: period_unit } }))
))
end end
def transfer(params) def transfer(params)

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.to_s}=", v) }
end end
def server def server

View file

@ -20,7 +20,7 @@ module DNS
def self.generate_zonefile(origin) def self.generate_zonefile(origin)
filename = "#{origin}.zone" filename = "#{origin}.zone"
STDOUT << "#{Time.zone.now.utc} - Generating zonefile #{filename}\n" $stdout << "#{Time.zone.now.utc} - Generating zonefile #{filename}\n"
zf = ActiveRecord::Base.connection.execute( zf = ActiveRecord::Base.connection.execute(
"select generate_zonefile('#{origin}')" "select generate_zonefile('#{origin}')"
@ -28,7 +28,7 @@ module DNS
File.open("#{ENV['zonefile_export_dir']}/#{filename}", 'w') { |f| f.write(zf) } File.open("#{ENV['zonefile_export_dir']}/#{filename}", 'w') { |f| f.write(zf) }
STDOUT << "#{Time.zone.now.utc} - Successfully generated zonefile #{filename}\n" $stdout << "#{Time.zone.now.utc} - Successfully generated zonefile #{filename}\n"
end end
def self.origins def self.origins

View file

@ -24,7 +24,8 @@ class Dnskey < ApplicationRecord
end end
} }
ALGORITHMS = Depp::Dnskey::ALGORITHMS.map {|pair| pair[1].to_s}.freeze # IANA numbers, single authority list # IANA numbers, single authority list
ALGORITHMS = Depp::Dnskey::ALGORITHMS.map {|pair| pair[1].to_s}.freeze
PROTOCOLS = %w(3) PROTOCOLS = %w(3)
FLAGS = %w(0 256 257) # 256 = ZSK, 257 = KSK FLAGS = %w(0 256 257) # 256 = ZSK, 257 = KSK
DS_DIGEST_TYPE = [1,2] DS_DIGEST_TYPE = [1,2]
@ -81,7 +82,9 @@ class Dnskey < ApplicationRecord
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
self.ds_digest_type = Setting.ds_digest_type if self.ds_digest_type.blank? || !DS_DIGEST_TYPE.include?(ds_digest_type) if self.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)
@ -90,9 +93,10 @@ 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)
if self.ds_digest_type == 1 case self.ds_digest_type
when 1
self.ds_digest = Digest::SHA1.hexdigest(bin).upcase self.ds_digest = Digest::SHA1.hexdigest(bin).upcase
elsif self.ds_digest_type == 2 when 2
self.ds_digest = Digest::SHA256.hexdigest(bin).upcase self.ds_digest = Digest::SHA256.hexdigest(bin).upcase
end end
end end

View file

@ -13,9 +13,14 @@ class Domain < ApplicationRecord
include Domain::Disputable include Domain::Disputable
include Domain::BulkUpdatable include Domain::BulkUpdatable
attr_accessor :roles attr_accessor :roles,
:legal_document_id,
attr_accessor :legal_document_id :is_admin,
:registrant_typeahead,
:update_me,
:epp_pending_update,
:epp_pending_delete,
:reserved_pw
alias_attribute :on_hold_time, :outzone_at alias_attribute :on_hold_time, :outzone_at
alias_attribute :outzone_time, :outzone_at alias_attribute :outzone_time, :outzone_at
@ -27,16 +32,18 @@ class Domain < ApplicationRecord
:admin_store_statuses_history :admin_store_statuses_history
# TODO: whois requests ip whitelist for full info for own domains and partial info for other domains # TODO: whois requests ip whitelist for full info for own domains and partial info for other domains
# TODO: most inputs should be trimmed before validatation, probably some global logic? # TODO: most inputs should be trimmed before validation, probably some global logic?
belongs_to :registrar, required: true belongs_to :registrar, required: true
belongs_to :registrant, required: true belongs_to :registrant, required: true
# TODO: should we user validates_associated :registrant here? # TODO: should we user validates_associated :registrant here?
has_many :admin_domain_contacts has_many :admin_domain_contacts
accepts_nested_attributes_for :admin_domain_contacts, allow_destroy: true, reject_if: :admin_change_prohibited? accepts_nested_attributes_for :admin_domain_contacts,
allow_destroy: true, reject_if: :admin_change_prohibited?
has_many :tech_domain_contacts has_many :tech_domain_contacts
accepts_nested_attributes_for :tech_domain_contacts, allow_destroy: true, reject_if: :tech_change_prohibited? accepts_nested_attributes_for :tech_domain_contacts,
allow_destroy: true, reject_if: :tech_change_prohibited?
def registrant_change_prohibited? def registrant_change_prohibited?
statuses.include? DomainStatus::SERVER_REGISTRANT_CHANGE_PROHIBITED statuses.include? DomainStatus::SERVER_REGISTRANT_CHANGE_PROHIBITED
@ -122,8 +129,6 @@ class Domain < ApplicationRecord
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
attr_accessor :is_admin
# Removed to comply new ForceDelete procedure # Removed to comply new ForceDelete procedure
# at https://github.com/internetee/registry/issues/1428#issuecomment-570561967 # at https://github.com/internetee/registry/issues/1428#issuecomment-570561967
# #
@ -204,12 +209,10 @@ class Domain < ApplicationRecord
def statuses_uniqueness def statuses_uniqueness
return if statuses.uniq == statuses return if statuses.uniq == statuses
errors.add(:statuses, :taken) errors.add(:statuses, :taken)
end end
attr_accessor :registrant_typeahead, :update_me,
:epp_pending_update, :epp_pending_delete, :reserved_pw
self.ignored_columns = %w[legacy_id legacy_registrar_id legacy_registrant_id] self.ignored_columns = %w[legacy_id legacy_registrar_id legacy_registrant_id]
def subordinate_nameservers def subordinate_nameservers
@ -423,9 +426,11 @@ class Domain < ApplicationRecord
def pending_update! def pending_update!
return true if pending_update? return true if pending_update?
self.epp_pending_update = true # for epp self.epp_pending_update = true # for epp
return true unless registrant_verification_asked? return true unless registrant_verification_asked?
pending_json_cache = pending_json pending_json_cache = pending_json
token = registrant_verification_token token = registrant_verification_token
asked_at = registrant_verification_asked_at asked_at = registrant_verification_asked_at
@ -582,7 +587,6 @@ class Domain < ApplicationRecord
# special handling for admin changing status # special handling for admin changing status
def admin_status_update(update) def admin_status_update(update)
update_unless_locked_by_registrant(update) update_unless_locked_by_registrant(update)
update_not_by_locked_statuses(update) update_not_by_locked_statuses(update)
# check for deleted status # check for deleted status
statuses.each do |s| statuses.each do |s|

View file

@ -80,9 +80,10 @@ class DomainStatus < ApplicationRecord
CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD, CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD,
CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED,
SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED, SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED,
INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_DELETE_CONFIRMATION, PENDING_RENEW, PENDING_TRANSFER, INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_DELETE_CONFIRMATION,
PENDING_UPDATE, SERVER_MANUAL_INZONE, SERVER_REGISTRANT_CHANGE_PROHIBITED, PENDING_RENEW, PENDING_TRANSFER, PENDING_UPDATE, SERVER_MANUAL_INZONE,
SERVER_ADMIN_CHANGE_PROHIBITED, SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE, SERVER_REGISTRANT_CHANGE_PROHIBITED, SERVER_ADMIN_CHANGE_PROHIBITED,
SERVER_TECH_CHANGE_PROHIBITED, FORCE_DELETE,
DELETE_CANDIDATE, EXPIRED, DISPUTED, SERVER_RELEASE_PROHIBITED DELETE_CANDIDATE, EXPIRED, DISPUTED, SERVER_RELEASE_PROHIBITED
].freeze ].freeze
@ -106,7 +107,7 @@ class DomainStatus < ApplicationRecord
DomainStatus::PENDING_DELETE, DomainStatus::PENDING_DELETE,
DomainStatus::PENDING_RENEW, DomainStatus::PENDING_RENEW,
DomainStatus::PENDING_TRANSFER DomainStatus::PENDING_TRANSFER
] ].freeze
DELETE_PROHIBIT_STATES = [ DELETE_PROHIBIT_STATES = [
DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::CLIENT_DELETE_PROHIBITED,
@ -148,7 +149,6 @@ class DomainStatus < ApplicationRecord
admin_statuses_map.map(&:second) admin_statuses_map.map(&:second)
end end
def admin_statuses_map def admin_statuses_map
[ [
['Hold', SERVER_HOLD], ['Hold', SERVER_HOLD],

View file

@ -15,7 +15,8 @@ class Epp::Domain < Domain
return true if is_transfer || is_renewal return true if is_transfer || is_renewal
return unless update_prohibited? return unless update_prohibited?
stat = (statuses & (DomainStatus::UPDATE_PROHIBIT_STATES + DomainStatus::DELETE_PROHIBIT_STATES)).first stat = (statuses &
(DomainStatus::UPDATE_PROHIBIT_STATES + DomainStatus::DELETE_PROHIBIT_STATES)).first
add_epp_error('2304', 'status', stat, I18n.t(:object_status_prohibits_operation)) add_epp_error('2304', 'status', stat, I18n.t(:object_status_prohibits_operation))
throw(:abort) throw(:abort)
end end
@ -307,10 +308,12 @@ class Epp::Domain < Domain
begin begin
return if cur_exp_date.to_date == valid_to.to_date return if cur_exp_date.to_date == valid_to.to_date
rescue rescue
add_epp_error('2306', 'curExpDate', cur_exp_date, I18n.t('errors.messages.epp_exp_dates_do_not_match')) add_epp_error('2306', 'curExpDate', cur_exp_date,
I18n.t('errors.messages.epp_exp_dates_do_not_match'))
return return
end end
add_epp_error('2306', 'curExpDate', cur_exp_date, I18n.t('errors.messages.epp_exp_dates_do_not_match')) add_epp_error('2306', 'curExpDate', cur_exp_date,
I18n.t('errors.messages.epp_exp_dates_do_not_match'))
end end
### ABILITIES ### ### ABILITIES ###
@ -325,7 +328,8 @@ class Epp::Domain < Domain
begin begin
errors.add(:base, :domain_status_prohibits_operation) errors.add(:base, :domain_status_prohibits_operation)
return false return false
end if (statuses & [DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED]).any? end if (statuses &
[DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED]).any?
true true
end end

View file

@ -14,7 +14,7 @@ class InactiveContacts
end end
def log(msg) def log(msg)
@log ||= Logger.new(STDOUT) @log ||= Logger.new($stdout)
@log.info(msg) @log.info(msg)
end end
end end

View file

@ -12,7 +12,7 @@ class Invoice < ApplicationRecord
has_many :payment_orders has_many :payment_orders
accepts_nested_attributes_for :items accepts_nested_attributes_for :items
# rubocop:disable Layout/LineLength
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
@ -27,7 +27,7 @@ class Invoice < ApplicationRecord
scope :sort_by_sort_receipt_date_desc, -> { sort_receipt_date_column.order("sort_receipt_date DESC") } scope :sort_by_sort_receipt_date_desc, -> { sort_receipt_date_column.order("sort_receipt_date DESC") }
scope :overdue, -> { unpaid.non_cancelled.where('due_date < ?', Time.zone.today) } scope :overdue, -> { unpaid.non_cancelled.where('due_date < ?', Time.zone.today) }
# rubocop:enable Layout/LineLength
validates :due_date, :currency, :seller_name, validates :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :items, presence: true :seller_iban, :buyer_name, :items, presence: true

View file

@ -1,7 +1,6 @@
class Invoice class Invoice
class EInvoiceGenerator class EInvoiceGenerator
attr_reader :invoice attr_reader :invoice, :payable
attr_reader :payable
def initialize(invoice, payable) def initialize(invoice, payable)
@invoice = invoice @invoice = invoice

View file

@ -1,7 +1,6 @@
class Invoice class Invoice
class VatRateCalculator class VatRateCalculator
attr_reader :registry attr_reader :registry, :registrar
attr_reader :registrar
def initialize(registry: Registry.current, registrar:) def initialize(registry: Registry.current, registrar:)
@registry = registry @registry = registry

View file

@ -65,7 +65,6 @@ class LegalDocument < ApplicationRecord
true true
end end
def self.remove_duplicates def self.remove_duplicates
start = Time.zone.now.to_f start = Time.zone.now.to_f
Rails.logger.info '-----> Removing legal documents duplicates' Rails.logger.info '-----> Removing legal documents duplicates'
@ -84,7 +83,8 @@ class LegalDocument < ApplicationRecord
File.delete(new_legal.path) if File.exist?(new_legal.path) File.delete(new_legal.path) if File.exist?(new_legal.path)
new_legal.update(path: orig_legal.path) new_legal.update(path: orig_legal.path)
count += 1 count += 1
Rails.logger.info "File #{new_legal.path} has been removed by Domain #{new_legal.documentable_id}. Document id: #{new_legal.id}" Rails.logger.info "File #{new_legal.path} has been removed by Domain "\
"#{new_legal.documentable_id}. Document id: #{new_legal.id}"
end end
end end
@ -107,7 +107,8 @@ class LegalDocument < ApplicationRecord
File.delete(new_legal.path) if File.exist?(new_legal.path) File.delete(new_legal.path) if File.exist?(new_legal.path)
new_legal.update(path: orig_legal.path) new_legal.update(path: orig_legal.path)
count += 1 count += 1
Rails.logger.info "File #{new_legal.path} has been removed by Contact #{new_legal.documentable_id}. Document id: #{new_legal.id}" Rails.logger.info "File #{new_legal.path} has been removed by Contact "\
"#{new_legal.documentable_id}. Document id: #{new_legal.id}"
end end
end end
end end

View file

@ -63,11 +63,10 @@ class Nameserver < ApplicationRecord
end end
class << self class << self
def from_hash_params params def from_hash_params(params)
params = params.with_indifferent_access params = params.with_indifferent_access
rel = all rel = all
rel = rel.where(hostname: params[:hostname]) rel.where(hostname: params[:hostname])
rel
end end
def hostnames def hostnames

View file

@ -23,7 +23,7 @@ class PaymentOrder < ApplicationRecord
supported = [] supported = []
PAYMENT_METHODS.each do |method| PAYMENT_METHODS.each do |method|
class_name = ('PaymentOrders::' + method.camelize).constantize class_name = "PaymentOrders::#{method.camelize}".constantize
raise(NoMethodError, class_name) unless class_name < PaymentOrder raise(NoMethodError, class_name) unless class_name < PaymentOrder
supported << class_name supported << class_name
@ -33,7 +33,7 @@ class PaymentOrder < ApplicationRecord
end end
def self.new_with_type(type:, invoice:) def self.new_with_type(type:, invoice:)
channel = ('PaymentOrders::' + type.camelize).constantize channel = "PaymentOrders::#{type.camelize}".constantize
PaymentOrder.new(type: channel, invoice: invoice) PaymentOrder.new(type: channel, invoice: invoice)
end end
@ -55,7 +55,7 @@ class PaymentOrder < ApplicationRecord
def self.supported_method?(name, shortname: false) def self.supported_method?(name, shortname: false)
some_class = if shortname some_class = if shortname
('PaymentOrders::' + name.camelize).constantize "PaymentOrders::#{name.camelize}".constantize
else else
name.constantize name.constantize
end end

View file

@ -104,9 +104,8 @@ module PaymentOrders
def sign(data) def sign(data)
private_key = OpenSSL::PKey::RSA.new(File.read(seller_certificate)) private_key = OpenSSL::PKey::RSA.new(File.read(seller_certificate))
signed_data = private_key.sign(OpenSSL::Digest::SHA1.new, data) signed_data = private_key.sign(OpenSSL::Digest.new('SHA1'), data)
signed_data = Base64.encode64(signed_data).gsub(/\n|\r/, '') Base64.encode64(signed_data).gsub(/\n|\r/, '')
signed_data
end end
def calc_mac(fields) def calc_mac(fields)
@ -122,7 +121,7 @@ module PaymentOrders
def verify_mac(data, mac) def verify_mac(data, mac)
bank_public_key = OpenSSL::X509::Certificate.new(File.read(bank_certificate)).public_key bank_public_key = OpenSSL::X509::Certificate.new(File.read(bank_certificate)).public_key
bank_public_key.verify(OpenSSL::Digest::SHA1.new, Base64.decode64(mac), data) bank_public_key.verify(OpenSSL::Digest.new('SHA1'), Base64.decode64(mac), data)
end end
def prepend_size(value) def prepend_size(value)

View file

@ -1,8 +1,7 @@
class Registry class Registry
include ActiveModel::Model include ActiveModel::Model
attr_accessor :vat_rate attr_accessor :vat_rate, :vat_country
attr_accessor :vat_country
def self.current def self.current
vat_rate = Setting.registry_vat_prc.to_d * 100 vat_rate = Setting.registry_vat_prc.to_d * 100

View file

@ -103,6 +103,5 @@ class DomainPresenter
class: 'dropdown-item' class: 'dropdown-item'
end end
attr_reader :domain attr_reader :domain, :view
attr_reader :view
end end

View file

@ -37,6 +37,5 @@ class RegistrantPresenter
private private
attr_reader :registrant attr_reader :registrant, :view
attr_reader :view
end end

View file

@ -42,6 +42,5 @@ class Registrar::DomainListCsvPresenter
CSV::Row.new([], row) CSV::Row.new([], row)
end end
attr_reader :domains attr_reader :domains, :view
attr_reader :view
end end

View file

@ -26,6 +26,5 @@ class RegistrarPresenter
private private
attr_reader :registrar attr_reader :registrar, :view
attr_reader :view
end end

View file

@ -14,6 +14,5 @@ class UserPresenter
user.roles.first user.roles.first
end end
attr_reader :user attr_reader :user, :view
attr_reader :view
end end

View file

@ -1,6 +1,5 @@
class OverdueInvoiceCanceller class OverdueInvoiceCanceller
attr_reader :invoices attr_reader :invoices, :delay
attr_reader :delay
def initialize(invoices: Invoice.overdue, delay: self.class.delay) def initialize(invoices: Invoice.overdue, delay: self.class.delay)
@invoices = invoices @invoices = invoices

View file

@ -15,6 +15,5 @@ class RegistrantChange
RegistrantChangeMailer.accepted(domain: domain, old_registrant: old_registrant).deliver_now RegistrantChangeMailer.accepted(domain: domain, old_registrant: old_registrant).deliver_now
end end
attr_reader :domain attr_reader :domain, :old_registrant
attr_reader :old_registrant
end end

View file

@ -65,9 +65,9 @@ xml.epp_head do
xml.tag!('contact:crDate', @contact.created_at.try(:iso8601)) xml.tag!('contact:crDate', @contact.created_at.try(:iso8601))
if @contact.updated_at > @contact.created_at if @contact.updated_at > @contact.created_at
upID = @contact.updator.try(:registrar) up_id = @contact.updator.try(:registrar)
upID = upID.code if upID.present? # Did updator return a kind of User that has a registrar? up_id = up_id.code if up_id.present? # Did updator return a kind of User that has a registrar?
xml.tag!('contact:upID', upID) if upID.present? # optional upID xml.tag!('contact:upID', up_id) if up_id.present? # optional upID
xml.tag!('contact:upDate', @contact.updated_at.try(:iso8601)) xml.tag!('contact:upDate', @contact.updated_at.try(:iso8601))
end end
if can? :view_password, @contact, @password if can? :view_password, @contact, @password

View file

@ -7,7 +7,7 @@ xml.epp_head do
xml.result('code' => x[:code]) do xml.result('code' => x[:code]) do
xml.msg(x[:msg], 'lang' => 'en') xml.msg(x[:msg], 'lang' => 'en')
model_name = resource ? resource.model_name.singular.sub('epp_','') : controller.controller_name.singularize model_name = resource ? resource.model_name.singular.sub('epp_','') : controller.controller_name.singularize
prefix = model_name == 'poll' ? 'changePoll' : model_name + '-ee' prefix = model_name == 'poll' ? 'changePoll' : "#{model_name}-ee"
xml.value("xmlns:#{model_name}" => Xsd::Schema.filename(for_prefix: prefix)) do xml.value("xmlns:#{model_name}" => Xsd::Schema.filename(for_prefix: prefix)) do
value = x[:value][:val] value = x[:value][:val]

View file

@ -9,10 +9,10 @@ xml.epp_head do
xml.msg @notification.text xml.msg @notification.text
end end
if @notification.attached_obj_type == 'DomainTransfer' if @notification.attached_obj_type == 'DomainTransfer' && @object
xml.resData do xml.resData do
xml << render('epp/domains/partials/transfer', builder: xml, dt: @object) xml << render('epp/domains/partials/transfer', builder: xml, dt: @object)
end if @object end
end end
if @notification.action&.contact || @notification.registry_lock? if @notification.action&.contact || @notification.registry_lock?

View file

@ -1,9 +1,7 @@
class AuthTokenCreator class AuthTokenCreator
DEFAULT_VALIDITY = 2.hours DEFAULT_VALIDITY = 2.hours
attr_reader :user attr_reader :user, :key, :expires_at
attr_reader :key
attr_reader :expires_at
def self.create_with_defaults(user) def self.create_with_defaults(user)
new(user, Rails.application.config.secret_key_base, Time.now + DEFAULT_VALIDITY) new(user, Rails.application.config.secret_key_base, Time.now + DEFAULT_VALIDITY)
@ -24,7 +22,7 @@ class AuthTokenCreator
end end
def encrypted_token def encrypted_token
encryptor = OpenSSL::Cipher::AES.new(256, :CBC) encryptor = OpenSSL::Cipher.new('aes-256-cbc')
encryptor.encrypt encryptor.encrypt
# OpenSSL used to automatically shrink oversized keys, it does not do that any longer. # OpenSSL used to automatically shrink oversized keys, it does not do that any longer.

View file

@ -1,8 +1,5 @@
class AuthTokenDecryptor class AuthTokenDecryptor
attr_reader :decrypted_data attr_reader :decrypted_data, :token, :key, :user
attr_reader :token
attr_reader :key
attr_reader :user
def self.create_with_defaults(token) def self.create_with_defaults(token)
new(token, Rails.application.config.secret_key_base) new(token, Rails.application.config.secret_key_base)
@ -14,7 +11,7 @@ class AuthTokenDecryptor
end end
def decrypt_token def decrypt_token
decipher = OpenSSL::Cipher::AES.new(256, :CBC) decipher = OpenSSL::Cipher.new('aes-256-cbc')
decipher.decrypt decipher.decrypt
# OpenSSL used to automatically shrink oversized keys, it does not do that any longer. # OpenSSL used to automatically shrink oversized keys, it does not do that any longer.

View file

@ -5,8 +5,7 @@ require 'deserializers/xml/dnssec'
module Deserializers module Deserializers
module Xml module Xml
class DomainCreate class DomainCreate
attr_reader :frame attr_reader :frame, :registrar
attr_reader :registrar
def initialize(frame, registrar) def initialize(frame, registrar)
@frame = frame @frame = frame

View file

@ -81,13 +81,12 @@ module Serializers
end end
def contacts(type) def contacts(type)
contact_pool = begin contact_pool = case type
if type == :tech when :tech
domain.tech_contacts domain.tech_contacts
elsif type == :admin when :admin
domain.admin_contacts domain.admin_contacts
end end
end
array_of_contacts = [] array_of_contacts = []
contact_pool.map do |contact| contact_pool.map do |contact|

View file

@ -26,7 +26,7 @@ namespace :contacts do
end end
def log(msg) def log(msg)
@log ||= Logger.new(STDOUT) @log ||= Logger.new($stdout)
@log.info(msg) @log.info(msg)
end end
end end

View file

@ -26,7 +26,7 @@ namespace :dev do
http.ca_file = ENV['lhv_ca_file'] http.ca_file = ENV['lhv_ca_file']
http.start do http.start do
response = http.post(api_base_uri.path + '/payment', request_body, request_headers) response = http.post("#{api_base_uri.path}/payment", request_body, request_headers)
if response.is_a?(Net::HTTPSuccess) if response.is_a?(Net::HTTPSuccess)
puts 'Success' puts 'Success'

View file

@ -41,7 +41,7 @@ namespace :invoices do
end end
def log(msg) def log(msg)
@log ||= Logger.new(STDOUT) @log ||= Logger.new($stdout)
@log.info(msg) @log.info(msg)
end end

View file

@ -1,8 +1,6 @@
class Iso8601Validator < ActiveModel::EachValidator class Iso8601Validator < ActiveModel::EachValidator
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
if options[:date_only] record.errors.add(attribute, :invalid_iso8601_date) if options[:date_only] && value !~ date_format
record.errors.add(attribute, :invalid_iso8601_date) unless value =~ date_format
end
end end
private private