mirror of
https://github.com/internetee/registry.git
synced 2025-06-12 07:34:45 +02:00
REPP domains: Modify DNSSEC keys
This commit is contained in:
parent
2b3634b048
commit
9dcd40ee3b
5 changed files with 78 additions and 7 deletions
70
app/controllers/repp/v1/domains/dnssec_controller.rb
Normal file
70
app/controllers/repp/v1/domains/dnssec_controller.rb
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
module Repp
|
||||||
|
module V1
|
||||||
|
module Domains
|
||||||
|
class DnssecController < BaseController
|
||||||
|
before_action :set_domain, only: %i[index create destroy]
|
||||||
|
|
||||||
|
api :GET, '/repp/v1/domains/:domain_name/dnssec'
|
||||||
|
desc "View all domain's DNSSEC keys"
|
||||||
|
def index
|
||||||
|
dnssec_keys = @domain.dnskeys
|
||||||
|
data = { dns_keys: dnssec_keys.as_json(only: %i[flags alg protocol public_key]) }
|
||||||
|
render_success(data: data)
|
||||||
|
end
|
||||||
|
|
||||||
|
api :POST, '/repp/v1/domains/:domain_name/dnssec'
|
||||||
|
desc 'Add new DNSSEC key(s) to domain'
|
||||||
|
param :dns_keys, Array, required: true, desc: 'Array of new DNSSEC keys' do
|
||||||
|
param :flags, String, required: true, desc: '256 (KSK) or 257 (ZSK)'
|
||||||
|
param :protocol, String, required: true, desc: 'Key protocol (3)'
|
||||||
|
param :alg, String, required: true, desc: 'DNSSEC key algorithm (3,5,6,7,8,10,13,14)'
|
||||||
|
param :public_key, String, required: true, desc: 'DNSSEC public key'
|
||||||
|
end
|
||||||
|
def create
|
||||||
|
dnssec_params[:dnssec][:dns_keys].each { |n| n[:action] = 'add' }
|
||||||
|
action = Actions::DomainUpdate.new(@domain, dnssec_params[:dnssec], current_user)
|
||||||
|
|
||||||
|
unless action.call
|
||||||
|
handle_errors(@domain)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
render_success(data: { domain: { name: @domain.name } })
|
||||||
|
end
|
||||||
|
|
||||||
|
api :DELETE, 'repp/v1/domains/:domain_name/dnssec'
|
||||||
|
param :dns_keys, Array, required: true, desc: 'Array of removable DNSSEC keys' do
|
||||||
|
param :flags, String, required: true, desc: '256 (KSK) or 257 (ZSK)'
|
||||||
|
param :protocol, String, required: true, desc: 'Key protocol (3)'
|
||||||
|
param :alg, String, required: true, desc: 'DNSSEC key algorithm (3,5,6,7,8,10,13,14)'
|
||||||
|
param :public_key, String, required: true, desc: 'DNSSEC public key'
|
||||||
|
end
|
||||||
|
def destroy
|
||||||
|
dnssec_params[:dnssec][:dns_keys].each { |n| n[:action] = 'rem' }
|
||||||
|
action = Actions::DomainUpdate.new(@domain, dnssec_params[:dnssec], current_user)
|
||||||
|
|
||||||
|
unless action.call
|
||||||
|
handle_errors(@domain)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
render_success(data: { domain: { name: @domain.name } })
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_domain
|
||||||
|
registrar = current_user.registrar
|
||||||
|
@domain = Epp::Domain.find_by(registrar: registrar, name: params[:domain_id])
|
||||||
|
@domain ||= Epp::Domain.find_by!(registrar: registrar, name_puny: params[:domain_id])
|
||||||
|
|
||||||
|
@domain
|
||||||
|
end
|
||||||
|
|
||||||
|
def dnssec_params
|
||||||
|
params.permit!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -24,8 +24,8 @@ module Repp
|
||||||
render_success(data: { domain: { name: @domain.name } })
|
render_success(data: { domain: { name: @domain.name } })
|
||||||
end
|
end
|
||||||
|
|
||||||
api :POST, '/repp/v1/domains/:domain/nameservers/:nameserver'
|
api :PUT, '/repp/v1/domains/:domain/nameservers/:nameserver'
|
||||||
desc 'Modifiy nameserver for domain'
|
desc 'Modify nameserver for domain'
|
||||||
param :nameserver, Hash, required: true, desc: 'Nameserver parameters' do
|
param :nameserver, Hash, required: true, desc: 'Nameserver parameters' do
|
||||||
param :hostname, String, required: true, desc: 'Nameserver hostname'
|
param :hostname, String, required: true, desc: 'Nameserver hostname'
|
||||||
param :ipv4, Array, required: false, desc: 'Array of IPv4 values'
|
param :ipv4, Array, required: false, desc: 'Array of IPv4 values'
|
||||||
|
|
|
@ -63,6 +63,7 @@ module Repp
|
||||||
param :domain, Hash, required: true, desc: 'Changes of domain object' do
|
param :domain, Hash, required: true, desc: 'Changes of domain object' do
|
||||||
param :registrant, Hash, required: false, desc: 'New registrant object' do
|
param :registrant, Hash, required: false, desc: 'New registrant object' do
|
||||||
param :code, String, required: true, desc: 'New registrant contact code'
|
param :code, String, required: true, desc: 'New registrant contact code'
|
||||||
|
param :verified, [true, false], required: false, desc: 'Registrant change is already verified'
|
||||||
end
|
end
|
||||||
param :auth_info, String, required: false, desc: 'New authorization code'
|
param :auth_info, String, required: false, desc: 'New authorization code'
|
||||||
end
|
end
|
||||||
|
|
|
@ -55,7 +55,6 @@ module Actions
|
||||||
end
|
end
|
||||||
|
|
||||||
def assign_nameserver_modifications
|
def assign_nameserver_modifications
|
||||||
puts "ASSIGNING"
|
|
||||||
@nameservers = []
|
@nameservers = []
|
||||||
params[:nameservers].each do |ns_attr|
|
params[:nameservers].each do |ns_attr|
|
||||||
case ns_attr[:action]
|
case ns_attr[:action]
|
||||||
|
@ -80,17 +79,16 @@ module Actions
|
||||||
|
|
||||||
def assign_dnssec_modifications
|
def assign_dnssec_modifications
|
||||||
@dnskeys = []
|
@dnskeys = []
|
||||||
|
|
||||||
params[:dns_keys].each do |key|
|
params[:dns_keys].each do |key|
|
||||||
case key[:action]
|
case key[:action]
|
||||||
when 'add'
|
when 'add'
|
||||||
validate_dnskey_integrity(key) && @dnskeys << key.except(:action)
|
validate_dnskey_integrity(key)
|
||||||
when 'rem'
|
when 'rem'
|
||||||
assign_removable_dnskey(key)
|
assign_removable_dnskey(key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
domain.dnskeys_attributes = @dnskeys
|
domain.dnskeys_attributes = @dnskeys.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_dnskey_integrity(key)
|
def validate_dnskey_integrity(key)
|
||||||
|
@ -100,7 +98,7 @@ module Actions
|
||||||
domain.add_epp_error('2306', nil, nil, %i[dnskeys ds_data_not_allowed])
|
domain.add_epp_error('2306', nil, nil, %i[dnskeys ds_data_not_allowed])
|
||||||
end
|
end
|
||||||
|
|
||||||
dnskeys << key.except(:action)
|
@dnskeys << key.except(:action)
|
||||||
end
|
end
|
||||||
|
|
||||||
def assign_removable_dnskey(key)
|
def assign_removable_dnskey(key)
|
||||||
|
|
|
@ -61,6 +61,8 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
resources :domains, constraints: { id: /.*/ } do
|
resources :domains, constraints: { id: /.*/ } do
|
||||||
resources :nameservers, only: %i[create destroy], constraints: { id: /.*/ }, controller: 'domains/nameservers'
|
resources :nameservers, only: %i[create destroy], constraints: { id: /.*/ }, controller: 'domains/nameservers'
|
||||||
|
resources :dnssec, only: %i[index create], constraints: { id: /.*/ }, controller: 'domains/dnssec'
|
||||||
|
match "dnssec", to: "domains/dnssec#destroy", via: "delete", defaults: { id: nil }
|
||||||
collection do
|
collection do
|
||||||
get ':id/transfer_info', to: 'domains#transfer_info', constraints: { id: /.*/ }
|
get ':id/transfer_info', to: 'domains#transfer_info', constraints: { id: /.*/ }
|
||||||
post 'transfer', to: 'domains#transfer'
|
post 'transfer', to: 'domains#transfer'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue