Merge branch 'master' into 115693873-whodunnit_empty

This commit is contained in:
Stas Paaslane 2016-08-12 16:56:40 +03:00
commit e23b5fc9cf
125 changed files with 2167 additions and 714 deletions

View file

@ -0,0 +1,56 @@
class Admin::ContactVersionsController < AdminController
load_and_authorize_resource
def index
params[:q] ||= {}
@q = ContactVersion.search(params[:q])
@versions = @q.result.page(params[:page])
search_params = params[:q].deep_dup
whereS = "1=1"
search_params.each do |key, value|
next if value.empty?
case key
when 'event'
whereS += " AND event = '#{value}'"
else
whereS += create_where_string(key, value)
end
end
versions = ContactVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q])
@versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
end
def show
per_page = 7
@version = ContactVersion.find(params[:id])
@versions = ContactVersion.where(item_id: @version.item_id).order(created_at: :desc, id: :desc)
@versions_map = @versions.all.map(&:id)
# what we do is calc amount of results until needed version
# then we cacl which page it is
if params[:page].blank?
counter = @versions_map.index(@version.id) + 1
page = counter / per_page
page += 1 if (counter % per_page) != 0
params[:page] = page
end
@versions = @versions.page(params[:page]).per(per_page)
end
def search
render json: ContactVersion.search_by_query(params[:q])
end
def create_where_string(key, value)
" AND object->>'#{key}' ~* '#{value}'"
end
end

View file

@ -10,22 +10,14 @@ class Admin::ContactsController < AdminController
search_params[:registrant_domains_id_not_null] = 1
end
@q = Contact.includes(:registrar).search(search_params)
@contacts = @q.result(distinct: :true).page(params[:page])
if params[:statuses_contains]
contacts = Contact.includes(:registrar).where(
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
)
else
contacts = Contact.includes(:registrar)
end
contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name')
contacts = contacts.filter_by_states(params[:statuses_contains].join(',')) if params[:statuses_contains]
contacts = contacts.where("ident_country_code is null or ident_country_code=''") if params[:only_no_country_code].eql?('1')
normalize_search_parameters do
@q = contacts.search(search_params)
@contacts = @q.result(distinct: :true).page(params[:page])
@contacts = @q.result.uniq.page(params[:page])
end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0

View file

@ -1,18 +1,75 @@
class Admin::DomainVersionsController < AdminController
load_and_authorize_resource
# rubocop:disable Style/GuardClause
def index
@domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first
@versions = @domain.versions
params[:q] ||= {}
@q = DomainVersion.includes(:item).search(params[:q])
@versions = @q.result.page(params[:page])
search_params = params[:q].deep_dup
if search_params[:registrant].present?
registrants = Contact.where("name ilike ?", "%#{search_params[:registrant].strip}%")
search_params.delete(:registrant)
end
if search_params[:registrar].present?
registrars = Registrar.where("name ilike ?", "%#{search_params[:registrar].strip}%")
search_params.delete(:registrar)
end
whereS = "1=1"
search_params.each do |key, value|
next if value.empty?
case key
when 'event'
whereS += " AND event = '#{value}'"
when 'name'
whereS += " AND (object->>'name' ~* '#{value}' OR object_changes->>'name' ~* '#{value}')"
else
whereS += create_where_string(key, value)
end
end
whereS += " AND object->>'registrant_id' IN (#{registrants.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrants.present?
whereS += " AND 1=0" if registrants == []
whereS += " AND object->>'registrar_id' IN (#{registrars.map { |r| "'#{r.id.to_s}'" }.join ','})" if registrars.present?
whereS += " AND 1=0" if registrars == []
versions = DomainVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q])
@versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
render "admin/domain_versions/archive"
# Depricated it had to load legal document. We may do it by parsing and adding link.
# if @domain.pending_json.present?
# frame = Nokogiri::XML(@domain.pending_json['frame'])
# @pending_user = User.find(@domain.pending_json['current_user_id'])
# @pending_domain = Epp::Domain.find(@domain.id)
# @pending_domain.update(frame, @pending_user, false)
# end
end
# rubocop:enable Style/GuardClause
def show
per_page = 7
@version = DomainVersion.find(params[:id])
@versions = DomainVersion.where(item_id: @version.item_id).order(created_at: :desc, id: :desc)
@versions_map = @versions.all.map(&:id)
# what we do is calc amount of results until needed version
# then we cacl which page it is
if params[:page].blank?
counter = @versions_map.index(@version.id) + 1
page = counter / per_page
page += 1 if (counter % per_page) != 0
params[:page] = page
end
@versions = @versions.page(params[:page]).per(per_page)
end
def search
render json: DomainVersion.search_by_query(params[:q])
end
def create_where_string(key, value)
" AND object->>'#{key}' ~* '#{value}'"
end
end

View file

@ -9,7 +9,7 @@ class Admin::DomainsController < AdminController
params[:q] ||= {}
if params[:statuses_contains]
domains = Domain.includes(:registrar, :registrant).where(
"statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
"domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
)
else
domains = Domain.includes(:registrar, :registrant)
@ -77,6 +77,11 @@ class Admin::DomainsController < AdminController
redirect_to [:admin, @domain]
end
def versions
@domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first
@versions = @domain.versions
end
private
def set_domain

View file

@ -5,7 +5,11 @@ class Admin::EppLogsController < AdminController
def index
@q = ApiLog::EppLog.search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
@epp_logs = @q.result.page(params[:page])
@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?
@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.page(params[:page])
end
def show

View file

@ -5,7 +5,11 @@ class Admin::ReppLogsController < AdminController
def index
@q = ApiLog::ReppLog.search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
@repp_logs = @q.result.page(params[:page])
@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?
@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.page(params[:page])
end
def show

View file

@ -51,6 +51,7 @@ class Admin::SettingsController < AdminController
:admin_contacts_max_count,
:tech_contacts_min_count,
:tech_contacts_max_count,
:orphans_contacts_in_months,
:ds_digest_type,
:dnskeys_min_count,
:dnskeys_max_count,

View file

@ -55,6 +55,10 @@ class ApplicationController < ActionController::Base
end
end
def info_for_paper_trail
{ uuid: request.uuid }
end
def user_for_paper_trail
user_log_str(current_user)
end

View file

@ -19,6 +19,8 @@ class Epp::ContactsController < EppController
authorize! :create, Epp::Contact
@contact = Epp::Contact.new(params[:parsed_frame], current_user.registrar)
@contact.add_legal_file_to_new(params[:parsed_frame])
if @contact.save
render_epp_response '/epp/contacts/create'
else
@ -29,7 +31,7 @@ class Epp::ContactsController < EppController
def update
authorize! :update, @contact, @password
if @contact.update_attributes(params[:parsed_frame])
if @contact.update_attributes(params[:parsed_frame], current_user)
render_epp_response 'epp/contacts/update'
else
handle_errors(@contact)
@ -39,7 +41,7 @@ class Epp::ContactsController < EppController
def delete
authorize! :delete, @contact, @password
if @contact.destroy_and_clean
if @contact.destroy_and_clean(params[:parsed_frame])
render_epp_response '/epp/contacts/delete'
else
handle_errors(@contact)

View file

@ -30,6 +30,8 @@ class Epp::DomainsController < EppController
handle_errors and return unless balance_ok?('create') # loads pricelist in this method
ActiveRecord::Base.transaction do
@domain.add_legal_file_to_new(params[:parsed_frame])
if @domain.save # TODO: Maybe use validate: false here because we have already validated the domain?
current_user.registrar.debit!({
sum: @domain_pricelist.price.amount,

View file

@ -56,4 +56,8 @@ class Epp::KeyrelaysController < EppController
# domain
end
def resource
@domain
end
end

View file

@ -54,4 +54,8 @@ class Epp::PollsController < EppController
def validate_poll
requires_attribute 'poll', 'op', values: %(ack req), allow_blank: true
end
def resource
@message
end
end

View file

@ -137,4 +137,9 @@ class Epp::SessionsController < EppController
pw = params[:parsed_frame].css('pw').first.text
{ username: user, password: pw }
end
private
def resource
@api_user
end
end

View file

@ -6,8 +6,15 @@ class EppController < ApplicationController
before_action :generate_svtrid
before_action :latin_only
before_action :validate_against_schema
before_action :validate_request
before_action :update_epp_session
around_action :catch_epp_errors
helper_method :current_user
helper_method :resource
def validate_against_schema
return if ['hello', 'error', 'keyrelay'].include?(params[:action])
schema.validate(params[:nokogiri_frame]).each do |error|
@ -20,10 +27,7 @@ class EppController < ApplicationController
handle_errors and return if epp_errors.any?
end
before_action :validate_request
before_action :update_epp_session
around_action :catch_epp_errors
def catch_epp_errors
err = catch(:epp_error) do
yield
@ -34,7 +38,6 @@ class EppController < ApplicationController
handle_errors
end
helper_method :current_user
rescue_from StandardError do |e|
@errors ||= []
@ -361,17 +364,18 @@ class EppController < ApplicationController
if request_command == 'login' && frame.present?
frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]</')
end
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/, "<eis:legalDocument>[FILTERED]</eis:legalDocument>")
trimmed_request = frame.gsub(/<eis:legalDocument([^>]+)>([^<])+<\/eis:legalDocument>/, "<eis:legalDocument>[FILTERED]</eis:legalDocument>") if frame.present?
ApiLog::EppLog.create({
request: trimmed_request,
request_command: request_command,
request_successful: epp_errors.empty?,
request_object: params[:epp_object_type],
request_object: resource ? "#{params[:epp_object_type]}: #{resource.class} - #{resource.id} - #{resource.name}" : params[:epp_object_type],
response: @response,
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),
ip: request.ip
ip: request.ip,
uuid: request.uuid
})
end
# rubocop: enable Metrics/CyclomaticComplexity
@ -382,4 +386,9 @@ class EppController < ApplicationController
return if current_user.blank?
counter_update(current_user.registrar_code, ENV['iptables_server_ip'])
end
def resource
name = self.class.to_s.sub("Epp::","").sub("Controller","").underscore.singularize
instance_variable_get("@#{name}")
end
end

View file

@ -28,7 +28,7 @@ class Registrant::DomainDeleteConfirmsController < RegistrantController
flash[:notice] = t(:registrant_domain_verification_rejected)
redirect_to registrant_domain_delete_confirm_path(@domain.id, rejected: true)
else
flash[:alert] = t(:registrant_domain_verification_rejected_failed)
flash[:alert] = t(:registrant_domain_delete_rejected_failed)
return render 'show'
end
elsif params[:confirmed]
@ -36,7 +36,7 @@ class Registrant::DomainDeleteConfirmsController < RegistrantController
flash[:notice] = t(:registrant_domain_verification_confirmed)
redirect_to registrant_domain_delete_confirm_path(@domain.id, confirmed: true)
else
flash[:alert] = t(:registrant_domain_verification_confirmed_failed)
flash[:alert] = t(:registrant_domain_delete_confirmed_failed)
return render 'show'
end
end

View file

@ -42,13 +42,8 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller
@contacts = Contact.find_by(name: params[:q][:name_matches])
end
if params[:statuses_contains]
contacts = current_user.registrar.contacts.includes(:registrar).where(
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
)
else
contacts = current_user.registrar.contacts.includes(:registrar)
end
contacts = current_user.registrar.contacts.includes(:registrar)
contacts = contacts.filter_by_states(params[:statuses_contains]) if params[:statuses_contains]
normalize_search_parameters do
@q = contacts.search(params[:q])