mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 17:37:17 +02:00
Add basic keyrelay command, tests
This commit is contained in:
parent
1f5efa78ac
commit
ec721b69c0
10 changed files with 133 additions and 5 deletions
2
Gemfile
2
Gemfile
|
@ -94,7 +94,7 @@ group :development, :test do
|
||||||
gem 'epp', '~> 1.4.0'
|
gem 'epp', '~> 1.4.0'
|
||||||
|
|
||||||
# EPP XMLs
|
# EPP XMLs
|
||||||
gem 'epp-xml', '~> 0.7.0'
|
gem 'epp-xml', '~> 0.8.1'
|
||||||
|
|
||||||
# Replacement for fixtures
|
# Replacement for fixtures
|
||||||
gem 'fabrication', '~> 2.11.3'
|
gem 'fabrication', '~> 2.11.3'
|
||||||
|
|
|
@ -99,7 +99,7 @@ GEM
|
||||||
epp (1.4.0)
|
epp (1.4.0)
|
||||||
hpricot
|
hpricot
|
||||||
libxml-ruby
|
libxml-ruby
|
||||||
epp-xml (0.7.0)
|
epp-xml (0.8.1)
|
||||||
activesupport (~> 4.1)
|
activesupport (~> 4.1)
|
||||||
builder (~> 3.2)
|
builder (~> 3.2)
|
||||||
equalizer (0.0.9)
|
equalizer (0.0.9)
|
||||||
|
@ -167,7 +167,7 @@ GEM
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mini_portile (0.6.0)
|
mini_portile (0.6.0)
|
||||||
minitest (5.4.2)
|
minitest (5.4.3)
|
||||||
multi_json (1.10.1)
|
multi_json (1.10.1)
|
||||||
net-scp (1.2.1)
|
net-scp (1.2.1)
|
||||||
net-ssh (>= 2.6.5)
|
net-ssh (>= 2.6.5)
|
||||||
|
@ -373,7 +373,7 @@ DEPENDENCIES
|
||||||
delayed_job_active_record (~> 4.0.2)
|
delayed_job_active_record (~> 4.0.2)
|
||||||
devise (~> 3.3.0)
|
devise (~> 3.3.0)
|
||||||
epp (~> 1.4.0)
|
epp (~> 1.4.0)
|
||||||
epp-xml (~> 0.7.0)
|
epp-xml (~> 0.8.1)
|
||||||
fabrication (~> 2.11.3)
|
fabrication (~> 2.11.3)
|
||||||
faker (~> 1.3.0)
|
faker (~> 1.3.0)
|
||||||
guard (~> 2.6.1)
|
guard (~> 2.6.1)
|
||||||
|
|
|
@ -3,6 +3,7 @@ class Epp::CommandsController < ApplicationController
|
||||||
include Epp::DomainsHelper
|
include Epp::DomainsHelper
|
||||||
include Epp::ContactsHelper
|
include Epp::ContactsHelper
|
||||||
include Epp::PollHelper
|
include Epp::PollHelper
|
||||||
|
include Epp::KeyrelayHelper
|
||||||
include Shared::UserStamper
|
include Shared::UserStamper
|
||||||
helper WhodunnitHelper
|
helper WhodunnitHelper
|
||||||
|
|
||||||
|
|
30
app/helpers/epp/keyrelay_helper.rb
Normal file
30
app/helpers/epp/keyrelay_helper.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
module Epp::KeyrelayHelper
|
||||||
|
def keyrelay
|
||||||
|
domain = Domain.find_by(name: parsed_frame.css('name').text)
|
||||||
|
|
||||||
|
abs_datetime = parsed_frame.css('absolute').text
|
||||||
|
abs_datetime = abs_datetime.to_date if abs_datetime
|
||||||
|
|
||||||
|
kr = domain.keyrelays.create(
|
||||||
|
domain: domain,
|
||||||
|
pa_date: Time.now,
|
||||||
|
key_data_flags: parsed_frame.css('flags').text,
|
||||||
|
key_data_protocol: parsed_frame.css('protocol').text,
|
||||||
|
key_data_alg: parsed_frame.css('alg').text,
|
||||||
|
key_data_public_key: parsed_frame.css('pubKey').text,
|
||||||
|
auth_info_pw: parsed_frame.css('pw').text,
|
||||||
|
expiry_relative: parsed_frame.css('relative').text,
|
||||||
|
expiry_absolute: abs_datetime,
|
||||||
|
requester: current_epp_user.registrar,
|
||||||
|
accepter: domain.registrar
|
||||||
|
)
|
||||||
|
|
||||||
|
domain.registrar.messages.create(
|
||||||
|
body: 'Key Relay action completed successfully.',
|
||||||
|
attached_obj_type: kr.class.to_s,
|
||||||
|
attached_obj_id: kr.id
|
||||||
|
)
|
||||||
|
|
||||||
|
render '/epp/shared/success'
|
||||||
|
end
|
||||||
|
end
|
|
@ -29,6 +29,9 @@ class Domain < ActiveRecord::Base
|
||||||
has_many :domain_transfers, dependent: :delete_all
|
has_many :domain_transfers, dependent: :delete_all
|
||||||
|
|
||||||
has_many :dnskeys, dependent: :delete_all
|
has_many :dnskeys, dependent: :delete_all
|
||||||
|
|
||||||
|
has_many :keyrelays
|
||||||
|
|
||||||
accepts_nested_attributes_for :dnskeys, allow_destroy: true,
|
accepts_nested_attributes_for :dnskeys, allow_destroy: true,
|
||||||
reject_if: proc { |attrs| attrs[:public_key].blank? }
|
reject_if: proc { |attrs| attrs[:public_key].blank? }
|
||||||
|
|
||||||
|
|
6
app/models/keyrelay.rb
Normal file
6
app/models/keyrelay.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
class Keyrelay < ActiveRecord::Base
|
||||||
|
belongs_to :domain
|
||||||
|
|
||||||
|
belongs_to :requester, class_name: 'Registrar'
|
||||||
|
belongs_to :accepter, class_name: 'Registrar'
|
||||||
|
end
|
9
app/views/epp/shared/success.xml.builder
Normal file
9
app/views/epp/shared/success.xml.builder
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
xml.epp_head do
|
||||||
|
xml.response do
|
||||||
|
xml.result('code' => '1000') do
|
||||||
|
xml.msg 'Command completed successfully'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
xml << render('/epp/shared/trID')
|
||||||
|
end
|
19
db/migrate/20141114130737_create_keyrelay.rb
Normal file
19
db/migrate/20141114130737_create_keyrelay.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
class CreateKeyrelay < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :keyrelays do |t|
|
||||||
|
t.integer :domain_id
|
||||||
|
t.datetime :pa_date
|
||||||
|
t.string :key_data_flags
|
||||||
|
t.string :key_data_protocol
|
||||||
|
t.string :key_data_alg
|
||||||
|
t.text :key_data_public_key
|
||||||
|
t.string :auth_info_pw
|
||||||
|
t.string :expiry_relative
|
||||||
|
t.datetime :expiry_absolute
|
||||||
|
t.integer :requester_id
|
||||||
|
t.integer :accepter_id
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
18
db/schema.rb
18
db/schema.rb
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20141111105931) do
|
ActiveRecord::Schema.define(version: 20141114130737) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -215,6 +215,22 @@ ActiveRecord::Schema.define(version: 20141111105931) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "keyrelays", force: true do |t|
|
||||||
|
t.integer "domain_id"
|
||||||
|
t.datetime "pa_date"
|
||||||
|
t.string "key_data_flags"
|
||||||
|
t.string "key_data_protocol"
|
||||||
|
t.string "key_data_alg"
|
||||||
|
t.text "key_data_public_key"
|
||||||
|
t.string "auth_info_pw"
|
||||||
|
t.string "expiry_relative"
|
||||||
|
t.datetime "expiry_absolute"
|
||||||
|
t.integer "requester_id"
|
||||||
|
t.integer "accepter_id"
|
||||||
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "messages", force: true do |t|
|
create_table "messages", force: true do |t|
|
||||||
t.integer "registrar_id"
|
t.integer "registrar_id"
|
||||||
t.string "body"
|
t.string "body"
|
||||||
|
|
44
spec/epp/keyrelay_spec.rb
Normal file
44
spec/epp/keyrelay_spec.rb
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe 'EPP Keyrelay', epp: true do
|
||||||
|
let(:server_zone) { Epp::Server.new({ server: 'localhost', tag: 'zone', password: 'ghyt9e4fu', port: 701 }) }
|
||||||
|
let(:server_elkdata) { Epp::Server.new({ server: 'localhost', tag: 'elkdata', password: 'ghyt9e4fu', port: 701 }) }
|
||||||
|
let(:elkdata) { Fabricate(:registrar, { name: 'Elkdata', reg_no: '123' }) }
|
||||||
|
let(:zone) { Fabricate(:registrar) }
|
||||||
|
let(:domain) { Fabricate(:domain, name: 'example.ee', registrar: zone, dnskeys: [Fabricate.build(:dnskey)]) }
|
||||||
|
|
||||||
|
before(:each) { create_settings }
|
||||||
|
|
||||||
|
context 'with valid user' do
|
||||||
|
before(:each) do
|
||||||
|
Fabricate(:epp_user, username: 'zone', registrar: zone)
|
||||||
|
Fabricate(:epp_user, username: 'elkdata', registrar: elkdata)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'makes a keyrelay request' do
|
||||||
|
xml = EppXml::Keyrelay.keyrelay({
|
||||||
|
name: { value: 'example.ee' },
|
||||||
|
keyData: {
|
||||||
|
flags: { value: '256' },
|
||||||
|
protocol: { value: '3' },
|
||||||
|
alg: { value: '8' },
|
||||||
|
pubKey: { value: 'cmlraXN0aGViZXN0' }
|
||||||
|
},
|
||||||
|
authInfo: {
|
||||||
|
pw: { value: domain.auth_info }
|
||||||
|
},
|
||||||
|
expiry: {
|
||||||
|
relative: { value: 'P1M13D' }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
response = epp_request(xml, :xml, :elkdata)
|
||||||
|
|
||||||
|
expect(response[:msg]).to eq('Command completed successfully')
|
||||||
|
expect(response[:result_code]).to eq('1000')
|
||||||
|
|
||||||
|
expect(zone.messages.queued.count).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue