From d5a824064e67c63dbc7600fbd775b0753bba430c Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Fri, 9 Jan 2015 11:46:55 +0200 Subject: [PATCH] EPP Request logging --- app/controllers/concerns/epp/common.rb | 13 +++++++ app/helpers/epp/poll_helper.rb | 3 +- app/models/api_log/db.rb | 6 ++++ app/models/api_log/epp_log.rb | 4 +++ app/models/api_log/repp_log.rb | 4 +++ .../20150109081914_create_api_log_tables.rb | 36 +++++++++++++++++++ db/schema.rb | 2 +- 7 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 app/models/api_log/db.rb create mode 100644 app/models/api_log/epp_log.rb create mode 100644 app/models/api_log/repp_log.rb create mode 100644 db/migrate/20150109081914_create_api_log_tables.rb diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index c76f59a4c..ef24fe03f 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -9,6 +9,7 @@ module Epp::Common included do protect_from_forgery with: :null_session before_action :validate_request, only: [:proxy] + after_action :log_to_epp_log helper_method :current_epp_user end @@ -112,4 +113,16 @@ module Epp::Common return unless respond_to?(validation_method, true) handle_errors and return unless send(validation_method) end + + def log_to_epp_log + ApiLog::EppLog.create!({ + request: params[:frame], + request_command: params[:command], + request_successful: epp_errors.empty?, + request_object: OBJECT_TYPES[params_hash['epp']['xmlns:ns2']], + response: @response, + api_user_name: current_epp_user.try(:to_s), + api_user_registrar: current_epp_user.try(:registrar).try(:to_s) + }) + end end diff --git a/app/helpers/epp/poll_helper.rb b/app/helpers/epp/poll_helper.rb index 7084ac191..568ff23ac 100644 --- a/app/helpers/epp/poll_helper.rb +++ b/app/helpers/epp/poll_helper.rb @@ -13,7 +13,8 @@ module Epp::PollHelper end if @message.attached_obj_type == 'Keyrelay' - render 'epp/poll/poll_keyrelay' + @response = render_to_string('epp/poll/poll_keyrelay') + render xml: @response else render 'epp/poll/poll_req' end diff --git a/app/models/api_log/db.rb b/app/models/api_log/db.rb new file mode 100644 index 000000000..4c929147a --- /dev/null +++ b/app/models/api_log/db.rb @@ -0,0 +1,6 @@ +module ApiLog + class Db < ActiveRecord::Base + self.abstract_class = true + establish_connection "api_log_#{Rails.env}".to_sym + end +end diff --git a/app/models/api_log/epp_log.rb b/app/models/api_log/epp_log.rb new file mode 100644 index 000000000..eb4aedcd9 --- /dev/null +++ b/app/models/api_log/epp_log.rb @@ -0,0 +1,4 @@ +module ApiLog + class EppLog < Db + end +end diff --git a/app/models/api_log/repp_log.rb b/app/models/api_log/repp_log.rb new file mode 100644 index 000000000..6bd82956b --- /dev/null +++ b/app/models/api_log/repp_log.rb @@ -0,0 +1,4 @@ +module ApiLog + class ReppLog < Db + end +end diff --git a/db/migrate/20150109081914_create_api_log_tables.rb b/db/migrate/20150109081914_create_api_log_tables.rb new file mode 100644 index 000000000..eab83ff2d --- /dev/null +++ b/db/migrate/20150109081914_create_api_log_tables.rb @@ -0,0 +1,36 @@ +class CreateApiLogTables < ActiveRecord::Migration + def connection + ApiLog::Db.connection + end + + def up + create_table :epp_logs do |t| + t.text :request + t.text :response + t.string :request_command + t.string :request_object + t.string :request_successful + t.string :api_user_name + t.string :api_user_registrar + + t.timestamps + end + + create_table :repp_logs do |t| + t.text :request + t.text :response + t.string :request_command + t.string :request_object + t.string :request_successful + t.string :api_user_name + t.string :api_user_registrar + + t.timestamps + end + end + + def down + drop_table :epp_logs + drop_table :repp_logs + end +end diff --git a/db/schema.rb b/db/schema.rb index 8c73d3327..9e6536608 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150105134026) do +ActiveRecord::Schema.define(version: 20150109081914) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql"