mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 09:27:19 +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'
|
||||
|
||||
# EPP XMLs
|
||||
gem 'epp-xml', '~> 0.7.0'
|
||||
gem 'epp-xml', '~> 0.8.1'
|
||||
|
||||
# Replacement for fixtures
|
||||
gem 'fabrication', '~> 2.11.3'
|
||||
|
|
|
@ -99,7 +99,7 @@ GEM
|
|||
epp (1.4.0)
|
||||
hpricot
|
||||
libxml-ruby
|
||||
epp-xml (0.7.0)
|
||||
epp-xml (0.8.1)
|
||||
activesupport (~> 4.1)
|
||||
builder (~> 3.2)
|
||||
equalizer (0.0.9)
|
||||
|
@ -167,7 +167,7 @@ GEM
|
|||
method_source (0.8.2)
|
||||
mime-types (1.25.1)
|
||||
mini_portile (0.6.0)
|
||||
minitest (5.4.2)
|
||||
minitest (5.4.3)
|
||||
multi_json (1.10.1)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
|
@ -373,7 +373,7 @@ DEPENDENCIES
|
|||
delayed_job_active_record (~> 4.0.2)
|
||||
devise (~> 3.3.0)
|
||||
epp (~> 1.4.0)
|
||||
epp-xml (~> 0.7.0)
|
||||
epp-xml (~> 0.8.1)
|
||||
fabrication (~> 2.11.3)
|
||||
faker (~> 1.3.0)
|
||||
guard (~> 2.6.1)
|
||||
|
|
|
@ -3,6 +3,7 @@ class Epp::CommandsController < ApplicationController
|
|||
include Epp::DomainsHelper
|
||||
include Epp::ContactsHelper
|
||||
include Epp::PollHelper
|
||||
include Epp::KeyrelayHelper
|
||||
include Shared::UserStamper
|
||||
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 :dnskeys, dependent: :delete_all
|
||||
|
||||
has_many :keyrelays
|
||||
|
||||
accepts_nested_attributes_for :dnskeys, allow_destroy: true,
|
||||
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.
|
||||
|
||||
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
|
||||
enable_extension "plpgsql"
|
||||
|
@ -215,6 +215,22 @@ ActiveRecord::Schema.define(version: 20141111105931) do
|
|||
t.datetime "updated_at"
|
||||
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|
|
||||
t.integer "registrar_id"
|
||||
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