From 340ca96d1eefffdcee8d6c8185413b9d6d742e1c Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Thu, 28 May 2015 17:02:59 +0300 Subject: [PATCH 01/15] Added more epp tests about domain verify logic #2557 --- spec/epp/domain_spec.rb | 77 ++++++++++++++++++++++++++++++++++++++ spec/models/domain_spec.rb | 21 +++++++++++ 2 files changed, 98 insertions(+) diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 0440e6995..f222f5abb 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -1411,6 +1411,83 @@ describe 'EPP Domain', epp: true do d.pending_update?.should == true end + it 'should not return action pending when changes are invalid' do + existing_pw = domain.auth_info + + xml_params = { + name: { value: domain.name }, + chg: [ + registrant: { value: 'FIXED:CITIZEN_1234' } + ], + rem: + domain.nameservers.map do |ns| + { + ns: [ + { + hostAttr: [ + { hostName: { value: ns.hostname } } + ] + } + ] + } + end + } + + response = epp_plain_request(domain_update_xml(xml_params, {}, { + _anonymus: [ + legalDocument: { + value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==', + attrs: { type: 'pdf' } + } + ] + }), :xml) + + response[:results][0][:msg].should == 'Nameservers count must be between 2-11 [nameservers]' + response[:results][0][:result_code].should == '2004' + + d = Domain.last + + d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update, because pending + d.auth_info.should == existing_pw + d.nameservers.size == 3 + d.pending_update?.should == false + end + + it 'should not return action pending when domain itself is already invaid' do + domain_id = domain.id + domain.nameservers.delete_all + domain.save(validate: false) + domain.reload.nameservers.size.should == 0 + + existing_pw = domain.auth_info + + xml_params = { + name: { value: domain.name }, + chg: [ + registrant: { value: 'FIXED:CITIZEN_1234' } + ] + } + + response = epp_plain_request(domain_update_xml(xml_params, {}, { + _anonymus: [ + legalDocument: { + value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==', + attrs: { type: 'pdf' } + } + ] + }), :xml) + + response[:results][0][:msg].should == 'Nameservers count must be between 2-11 [nameservers]' + response[:results][0][:result_code].should == '2004' + + d = Domain.find(domain_id) + + d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update, because pending + d.auth_info.should == existing_pw + d.nameservers.size.should == 0 + d.pending_update?.should == false + end + it 'should not allow any update when status pending update' do domain.domain_statuses.create(value: DomainStatus::PENDING_UPDATE) diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index 56d9ee57f..741721f4e 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -106,6 +106,27 @@ describe Domain do end end + context 'about registrant update confirm when domain is invalid' do + before :all do + @domain.registrant_verification_token = 123 + @domain.registrant_verification_asked_at = Time.zone.now + @domain.domain_statuses.create(value: DomainStatus::PENDING_UPDATE) + end + + it 'should be registrant update confirm ready' do + @domain.registrant_update_confirmable?('123').should == true + end + + it 'should not be registrant update confirm ready when token does not match' do + @domain.registrant_update_confirmable?('wrong-token').should == false + end + + it 'should not be registrant update confirm ready when no correct status' do + @domain.domain_statuses.delete_all + @domain.registrant_update_confirmable?('123').should == false + end + end + context 'with versioning' do it 'should not have one version' do with_versioning do From 80e4fe0529a5f223ef37721129a76891b968f6bd Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Fri, 29 May 2015 17:04:20 +0300 Subject: [PATCH 02/15] Spec comment update, #2557 --- spec/epp/domain_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index f222f5abb..f9d355482 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -1406,7 +1406,7 @@ describe 'EPP Domain', epp: true do d = Domain.last - d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update, because pending + d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update d.auth_info.should == existing_pw d.pending_update?.should == true end @@ -1447,7 +1447,7 @@ describe 'EPP Domain', epp: true do d = Domain.last - d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update, because pending + d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update d.auth_info.should == existing_pw d.nameservers.size == 3 d.pending_update?.should == false @@ -1482,7 +1482,7 @@ describe 'EPP Domain', epp: true do d = Domain.find(domain_id) - d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update, because pending + d.registrant_code.should_not == 'FIXED:CITIZEN_1234' # should not update d.auth_info.should == existing_pw d.nameservers.size.should == 0 d.pending_update?.should == false From bb6186c33b3144bacbd66f1614ec51b690bcb97b Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Sun, 31 May 2015 23:28:15 +0300 Subject: [PATCH 03/15] Added iptables counter update script --- CHANGELOG.md | 4 ++++ app/controllers/epp_controller.rb | 3 ++- app/models/api_user.rb | 5 +++- config/application-example.yml | 4 ++-- doc/debian_build_doc.md | 39 ++++++++++++++++--------------- lib/iptable.rb | 15 ++++++++++++ 6 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 lib/iptable.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 685670a92..86ae1a35a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +29.05.2015 + +* Removed old 'iptables_counter_update_command' and added 'iptables_counter_enabled' + 26.05.2015 * Updated deploy script, now staging comes from staging branch diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb index 3a5211de5..07a3aa732 100644 --- a/app/controllers/epp_controller.rb +++ b/app/controllers/epp_controller.rb @@ -285,6 +285,7 @@ class EppController < ApplicationController # rubocop: enable Metrics/CyclomaticComplexity def iptables_counter_update - `ENV['iptables_counter_update_command']` if ENV['iptables_counter_update_command'].present? + return if ENV['iptables_counter_enabled'].blank? && ENV['iptables_counter_enabled'] != 'true' + Iptable.counter_update(current_user.registrar_code, request.remote_ip) end end diff --git a/app/models/api_user.rb b/app/models/api_user.rb index e12c3b7b8..3312de5d4 100644 --- a/app/models/api_user.rb +++ b/app/models/api_user.rb @@ -11,13 +11,16 @@ class ApiUser < User } end - # TODO: should have max request limit per day + # TODO: should have max request limit per day? belongs_to :registrar has_many :certificates validates :username, :password, :registrar, :roles, presence: true validates :username, uniqueness: true + # TODO: probably cache, because it's requested on every EPP + delegate :code, to: :registrar, prefix: true + attr_accessor :registrar_typeahead ROLES = %w(super epp billing) # should not match to admin roles diff --git a/config/application-example.yml b/config/application-example.yml index 050216cee..5296f9f9d 100644 --- a/config/application-example.yml +++ b/config/application-example.yml @@ -30,8 +30,8 @@ webclient_cert_common_name: 'webclient' # and returns 2306 "Parameter value policy error" contact_org_enabled: 'false' -# Firewall countrer update command -# iptables_counter_update_command: '' +# Enable iptables counter updater +# iptables_counter_enabled: 'true' # DEPP server configuration (both for Registrar/Registrant servers) show_ds_data_fields: 'false' diff --git a/doc/debian_build_doc.md b/doc/debian_build_doc.md index c2d40f56c..fe40f2982 100644 --- a/doc/debian_build_doc.md +++ b/doc/debian_build_doc.md @@ -42,8 +42,7 @@ Please install following lib, otherwise your bundler install might not be succes ### Firewall rate limit config -First increase the maximum possible value for the hitcount parameter -from its default value of 20 by setting the option +First increase the maximum possible value form 20 to 100 of the hitcount parameter. ip_pkt_list_tot of the xt_recent kernel module. This can be done by creating an ip_pkt_list_tot.conf file in /etc/modeprobe.d/ which contains: @@ -53,7 +52,6 @@ options xt_recent ip_pkt_list_tot=100 Once the file is created, reload the xt_recent kernel module via modprobe -r xt_recent && modprobe xt_recent or reboot the system. - #### Registrar, REPP, Restful-whois ```` @@ -70,22 +68,6 @@ $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} ```` -#### EPP - -```` -#!/bin/bash -# Inspired and credits to Vivek Gite: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/ -IPT=/sbin/iptables -# Max connection in seconds -SECONDS=60 -# Max connections per IP -BLOCKCOUNT=100 -# default action can be DROP or REJECT or something else. -DACTION="REJECT" -$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --set -$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} -```` - #### Whois ```` @@ -102,3 +84,22 @@ $IPT -A INPUT -p tcp --dport 43 -i eth0 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 43 -i eth0 -m state --state NEW -m recent --rcheck --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} ```` +#### EPP + +We need to update iptables hitcounter from application. + +```` +#!/bin/bash +# Inspired and credits to Vivek Gite: http://www.cyberciti.biz/faq/iptables-connection-limits-howto/ +IPT=/sbin/iptables +# Registrar handler +REGISTRAR_CODE="test" +# Max connection in seconds +SECONDS=60 +# Max connections per IP +BLOCKCOUNT=100 +# default action can be DROP or REJECT or something else. +DACTION="REJECT" +$IPT -A INPUT -p tcp --dport 700 -i eth0 -m state --state NEW -m recent --set +$IPT -A INPUT -p tcp --dport 700 -m recent --name $REGISTRAR_CODE --rdest --rcheck --hitcount ${BLOCKCOUNT} --seconds ${SECONDS} -j ${DACTION} +```` diff --git a/lib/iptable.rb b/lib/iptable.rb new file mode 100644 index 000000000..54fba393d --- /dev/null +++ b/lib/iptable.rb @@ -0,0 +1,15 @@ +module Iptable + def counter_update(registrar_code, ip) + counter_proc = "/proc/net/xt_recent/#{registrar_code}" + + begin + File.open(counter_proc, 'a') do |f| + f.puts "+#{ip}" + end + rescue Errno::ENOENT => e + logger.error "ERROR: cannot open #{counter_proc}: #{e}" + rescue IOError => e + logger.error "ERROR: cannot write #{ip} to #{counter_proc}: #{e}" + end + end +end From b10f62f539796bc374ff5dfa8bf903e8f193f90c Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Mon, 1 Jun 2015 11:41:42 +0300 Subject: [PATCH 04/15] Added dedicated data migartion #2659 --- CHANGELOG.md | 4 ++++ Gemfile | 3 +++ Gemfile.lock | 9 +++++++++ .../20150601083516_add_cert_common_name.rb} | 8 ++++++-- .../20150601083800_add_cert_md5.rb} | 8 ++++++-- 5 files changed, 28 insertions(+), 4 deletions(-) rename db/{migrate/20150525075550_update_certs_add_cn_from_csr.rb => data/20150601083516_add_cert_common_name.rb} (66%) rename db/{migrate/20150522164020_update_certs.rb => data/20150601083800_add_cert_md5.rb} (85%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86ae1a35a..04d4a0053 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +01.06.2015 + +* Added separate data update, all data migration locate at db/data, more info 'rake -T data' + 29.05.2015 * Removed old 'iptables_counter_update_command' and added 'iptables_counter_enabled' diff --git a/Gemfile b/Gemfile index 878dc62bf..7a947bb76 100644 --- a/Gemfile +++ b/Gemfile @@ -53,6 +53,9 @@ gem 'isikukood' # for EE-id validation # deploy gem 'whenever', '~> 0.9.4', require: false +gem 'data_migrate', + github: 'gitlabeu/data_migrate', + ref: '35d22b09ff37a4e9d61ab326ad5d8eb0edf1fc81' # monitors gem 'newrelic_rpm', '~> 3.9.9.275' diff --git a/Gemfile.lock b/Gemfile.lock index 9b674285f..dbc311d2e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,6 +8,14 @@ GIT activesupport (>= 3.0, < 6.0) request_store (~> 1.1.0) +GIT + remote: git://github.com/gitlabeu/data_migrate.git + revision: 35d22b09ff37a4e9d61ab326ad5d8eb0edf1fc81 + ref: 35d22b09ff37a4e9d61ab326ad5d8eb0edf1fc81 + specs: + data_migrate (1.3.0) + rails (>= 4.1.0) + GIT remote: git://github.com/gitlabeu/epp.git revision: 505c3f2739eb1da918e54111aecfb138a822739d @@ -507,6 +515,7 @@ DEPENDENCIES coderay (~> 1.1.0) coffee-rails (~> 4.1.0) countries (~> 0.10.0) + data_migrate! database_cleaner (~> 1.3.0) deep_cloneable (~> 2.1.1) devise (~> 3.4.1) diff --git a/db/migrate/20150525075550_update_certs_add_cn_from_csr.rb b/db/data/20150601083516_add_cert_common_name.rb similarity index 66% rename from db/migrate/20150525075550_update_certs_add_cn_from_csr.rb rename to db/data/20150601083516_add_cert_common_name.rb index ab56b0c8a..ef401b871 100644 --- a/db/migrate/20150525075550_update_certs_add_cn_from_csr.rb +++ b/db/data/20150601083516_add_cert_common_name.rb @@ -1,5 +1,5 @@ -class UpdateCertsAddCnFromCsr < ActiveRecord::Migration - def change +class AddCertCommonName < ActiveRecord::Migration + def self.up Certificate.all.each do |x| if x.crt.blank? && x.csr.present? pc = x.parsed_csr.try(:subject).try(:to_s) || '' @@ -9,4 +9,8 @@ class UpdateCertsAddCnFromCsr < ActiveRecord::Migration x.save end end + + def self.down + raise ActiveRecord::IrreversibleMigration + end end diff --git a/db/migrate/20150522164020_update_certs.rb b/db/data/20150601083800_add_cert_md5.rb similarity index 85% rename from db/migrate/20150522164020_update_certs.rb rename to db/data/20150601083800_add_cert_md5.rb index 5cdaa7549..5efe4e596 100644 --- a/db/migrate/20150522164020_update_certs.rb +++ b/db/data/20150601083800_add_cert_md5.rb @@ -1,5 +1,5 @@ -class UpdateCerts < ActiveRecord::Migration - def change +class AddCertMd5 < ActiveRecord::Migration + def self.up Certificate.all.each do |x| if x.crt.present? && x.csr.present? x.interface = Certificate::REGISTRAR @@ -21,4 +21,8 @@ class UpdateCerts < ActiveRecord::Migration x.save end end + + def self.down + raise ActiveRecord::IrreversibleMigration + end end From 34c2e2d210b134c9b50c7a1b36dd485667bebb14 Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Mon, 1 Jun 2015 12:25:39 +0300 Subject: [PATCH 05/15] Ignore db/data dir for rubocop #2659 --- .rubocop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.rubocop.yml b/.rubocop.yml index 100e331cb..b1ceb5312 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -8,6 +8,7 @@ AllCops: - 'db/whois_schema.rb' - 'db/api_log_schema.rb' - 'db/migrate/*' + - 'db/data/*' # epp support files until 'complexity issues' will be solved - 'spec/support/epp.rb' - 'spec/support/epp_contact_xml_builder.rb' From 2580d5efb08ba0f8b445bbb0e4b9da99feafc873 Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Mon, 1 Jun 2015 13:24:40 +0300 Subject: [PATCH 06/15] No counter update when no current user #2348 --- app/controllers/epp_controller.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb index 07a3aa732..1c8f25323 100644 --- a/app/controllers/epp_controller.rb +++ b/app/controllers/epp_controller.rb @@ -1,4 +1,5 @@ class EppController < ApplicationController + include Iptable layout false protect_from_forgery with: :null_session skip_before_action :verify_authenticity_token @@ -286,6 +287,7 @@ class EppController < ApplicationController def iptables_counter_update return if ENV['iptables_counter_enabled'].blank? && ENV['iptables_counter_enabled'] != 'true' - Iptable.counter_update(current_user.registrar_code, request.remote_ip) + return if current_user.blank? + counter_update(current_user.registrar_code, request.remote_ip) end end From 56d1cc6e7690fa917d2b491d1f1b88c19a53a435 Mon Sep 17 00:00:00 2001 From: Priit Tark Date: Mon, 1 Jun 2015 13:25:26 +0300 Subject: [PATCH 07/15] Updated assets --- ...nifest-6e6fcf039a6b92e085d41d339fec5884.js | 10 + ...est-6e6fcf039a6b92e085d41d339fec5884.js.gz | Bin 0 -> 96008 bytes ...ifest-701249458372f015ab0b876ee831bbb1.css | 1 + ...st-701249458372f015ab0b876ee831bbb1.css.gz | Bin 0 -> 23938 bytes ...cation-6a07f91041ad3f20e1b1d5458955fc91.js | 1 + ...ion-6a07f91041ad3f20e1b1d5458955fc91.js.gz | Bin 0 -> 157 bytes ...alpha-84eeebabe667b9b75b7b050eeee16eeb.png | Bin 0 -> 7089 bytes .../bg-841fa022251d290635254dbbc3097daf.jpg | Bin 0 -> 69058 bytes ...gular-050f85c5fbaa79689431c2a1f211fe2a.eot | Bin 0 -> 20127 bytes ...gular-3c8f142df5ab3046bbeb3c3310ae4fa9.svg | 288 ++++++++++++++++++ ...gular-632d47971ce98f67252b59ec394cb688.ttf | Bin 0 -> 45404 bytes ...lar-b5493d564382942c09f766d4c2b51f0a.woff2 | Bin 0 -> 18028 bytes ...ular-e88ed3ff660b39de62652ed99f351552.woff | Bin 0 -> 23424 bytes ...anske-fa2a4fcd35b59cb1255f800185840276.png | Bin 0 -> 1130 bytes ...pment-d24ec62be8078e61a3c656b83fa8fe9b.png | Bin 0 -> 14496 bytes ...go-et-fd17d396191bd4e667509390f1922892.png | Bin 0 -> 1440 bytes ...bfont-49e7a69f10dc2fb97fb75b4b600540fd.svg | 241 +++++++++++++++ ...font-635643de24bc05d241849d2d94360411.woff | Bin 0 -> 26204 bytes ...bfont-732b53bcc82de772b8fad153dba9e8ce.ttf | Bin 0 -> 49748 bytes ...bfont-c0ee4f9aa372df807632e0bb0d0c5f44.eot | Bin 0 -> 23109 bytes ...bfont-058000aa817bc9d3d3277193322e1571.eot | Bin 0 -> 23707 bytes ...bfont-2228057f2bc65595b1aa6bb978fdc024.svg | 241 +++++++++++++++ ...bfont-a4d498eb3e03127324d20d39402b737c.ttf | Bin 0 -> 51172 bytes ...font-ca5e2f470b251e7706b3fd222f6c452b.woff | Bin 0 -> 26956 bytes ...bfont-0331b1a437f2be83bd1def92da31a621.eot | Bin 0 -> 26426 bytes ...font-11ecd04590d9c57d06af4fd7f1f200a1.woff | Bin 0 -> 29884 bytes ...bfont-c86d64373f2e5820cb9c7579744d862b.svg | 241 +++++++++++++++ ...bfont-eeab2ccc14859e347751e00b94c7468d.ttf | Bin 0 -> 57040 bytes ...vicon-2435a1ee9e9dfca133abbca02619c8d9.ico | Bin 0 -> 1150 bytes ..._card-9926a89250d68222f45669dd7984c90d.gif | Bin 0 -> 564 bytes ...bfont-0c710174eb8081bb570dcfc25caafa10.svg | 238 +++++++++++++++ ...font-71f78522d2a2c5a623ae6793fc18368e.woff | Bin 0 -> 26228 bytes ...bfont-8d885bee87d1477c6db0b59dd52fe896.eot | Bin 0 -> 23124 bytes ...bfont-e7609a76f035df9ef1161dea0cafc89c.ttf | Bin 0 -> 47396 bytes ...font-3ce446804ee12a1aa4f0d3c67a2ec305.woff | Bin 0 -> 26492 bytes ...bfont-5869797caccf6ab4d73938faf6b8588e.ttf | Bin 0 -> 47484 bytes ...bfont-78ba702105f983e7c3ffe8c71e5e2b73.svg | 238 +++++++++++++++ ...bfont-b01aba1c16b6c69c24fd81580c4b252f.eot | Bin 0 -> 23273 bytes ...0x100-f91ca0f37189f2d27c249be3a9b5fe8e.png | Bin 0 -> 180 bytes ...0x100-bb0051ba9b6d87ef3f9425d05cb2f7f8.png | Bin 0 -> 178 bytes ...1x400-0fe7774bbb53c9db24dcf4dc4514db77.png | Bin 0 -> 120 bytes ...1x400-e50e57d636a734253c3c0b4cb4cef861.png | Bin 0 -> 105 bytes ...1x400-3f7ec278f71651df1dda0e20ac460483.png | Bin 0 -> 111 bytes ...1x400-6522c988bbf45e6b805b6ed4adf70079.png | Bin 0 -> 110 bytes ...1x400-addad4f60fb36fc37c7ed9ff916af31e.png | Bin 0 -> 119 bytes ...1x100-7984ba05f627254dfdbdde97f999f415.png | Bin 0 -> 101 bytes ...6x240-6e4c17c299f104a87548b204269bb9e5.png | Bin 0 -> 4369 bytes ...6x240-7cb6a4006575c000b8f91394a06b8391.png | Bin 0 -> 4369 bytes ...6x240-3440f505d562d5b095634dcb3dcf7a07.png | Bin 0 -> 4369 bytes ...6x240-cb45397ab08fadc7e4f1314b5d84e26c.png | Bin 0 -> 4369 bytes ...6x240-b4b9d1b4f2de973c609e28b87fbfbd4d.png | Bin 0 -> 4369 bytes .../lhv-5114f0bee2d3c70c47403f17e9d287e8.png | Bin 0 -> 3417 bytes ...fest-9b19037852267cfe2c60a6bd51485d3f.json | 2 +- .../mid-79dabc481b840aac303e5e1cc7dde8c6.gif | Bin 0 -> 1566 bytes ...ordea-87b186d736c3c93685086c13ee0a9f21.png | Bin 0 -> 1181 bytes ...ifest-9d06c365b21295408f3ccd37298efffb.css | 30 ++ ...st-9d06c365b21295408f3ccd37298efffb.css.gz | Bin 0 -> 30221 bytes ...nifest-d9d0c29fad78a10a0c792a1715edd3d5.js | 10 + ...est-d9d0c29fad78a10a0c792a1715edd3d5.js.gz | Bin 0 -> 90017 bytes ...ifest-71050a07965f499a5e7d6973a1389b1b.css | 30 ++ ...st-71050a07965f499a5e7d6973a1389b1b.css.gz | Bin 0 -> 30170 bytes ...nifest-d9d0c29fad78a10a0c792a1715edd3d5.js | 10 + ...est-d9d0c29fad78a10a0c792a1715edd3d5.js.gz | Bin 0 -> 90017 bytes ...cation-becf26b2259105fe47b50b2d3c80138c.js | 1 + ...ion-becf26b2259105fe47b50b2d3c80138c.js.gz | Bin 0 -> 333 bytes ...alpha-84eeebabe667b9b75b7b050eeee16eeb.png | Bin 0 -> 7089 bytes ...pment-d24ec62be8078e61a3c656b83fa8fe9b.png | Bin 0 -> 14496 bytes ...aging-672bd21ed4b9cb3245ea44f3a2629bf0.png | Bin 0 -> 12294 bytes ...vicon-c06dd6a542ea15147e6794e03643f87c.ico | 0 .../seb-b1fa76625f31c3f4d0b84d450dd4c383.png | Bin 0 -> 2439 bytes ...lect2-4a19e1b1ee05dc61304a3f9cf69ed866.png | Bin 0 -> 613 bytes ...inner-a9ae0d27964eb30e49e3396bb2b4bd3d.gif | Bin 0 -> 1849 bytes ...ct2x2-3bb6e2999d204bf36746d95f840e6b51.png | Bin 0 -> 845 bytes .../pdf-ef071ef29698676d4abe7c36b565496f.css | 1 + ...df-ef071ef29698676d4abe7c36b565496f.css.gz | Bin 0 -> 19614 bytes ...aging-672bd21ed4b9cb3245ea44f3a2629bf0.png | Bin 0 -> 12294 bytes .../swed-b9efaf29f99a76ecc01b03803be7a88d.png | Bin 0 -> 1521 bytes .../test-84eeebabe667b9b75b7b050eeee16eeb.png | Bin 0 -> 7089 bytes 78 files changed, 1582 insertions(+), 1 deletion(-) create mode 100644 public/assets/admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js create mode 100644 public/assets/admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js.gz create mode 100644 public/assets/admin-manifest-701249458372f015ab0b876ee831bbb1.css create mode 100644 public/assets/admin-manifest-701249458372f015ab0b876ee831bbb1.css.gz create mode 100644 public/assets/admin/application-6a07f91041ad3f20e1b1d5458955fc91.js create mode 100644 public/assets/admin/application-6a07f91041ad3f20e1b1d5458955fc91.js.gz create mode 100644 public/assets/alpha-84eeebabe667b9b75b7b050eeee16eeb.png create mode 100644 public/assets/bg-841fa022251d290635254dbbc3097daf.jpg create mode 100644 public/assets/bootstrap/glyphicons-halflings-regular-050f85c5fbaa79689431c2a1f211fe2a.eot create mode 100644 public/assets/bootstrap/glyphicons-halflings-regular-3c8f142df5ab3046bbeb3c3310ae4fa9.svg create mode 100644 public/assets/bootstrap/glyphicons-halflings-regular-632d47971ce98f67252b59ec394cb688.ttf create mode 100644 public/assets/bootstrap/glyphicons-halflings-regular-b5493d564382942c09f766d4c2b51f0a.woff2 create mode 100644 public/assets/bootstrap/glyphicons-halflings-regular-e88ed3ff660b39de62652ed99f351552.woff create mode 100644 public/assets/danske-fa2a4fcd35b59cb1255f800185840276.png create mode 100644 public/assets/development-d24ec62be8078e61a3c656b83fa8fe9b.png create mode 100644 public/assets/eis-logo-et-fd17d396191bd4e667509390f1922892.png create mode 100644 public/assets/etelkalight-webfont-49e7a69f10dc2fb97fb75b4b600540fd.svg create mode 100644 public/assets/etelkalight-webfont-635643de24bc05d241849d2d94360411.woff create mode 100644 public/assets/etelkalight-webfont-732b53bcc82de772b8fad153dba9e8ce.ttf create mode 100644 public/assets/etelkalight-webfont-c0ee4f9aa372df807632e0bb0d0c5f44.eot create mode 100644 public/assets/etelkalightbold-webfont-058000aa817bc9d3d3277193322e1571.eot create mode 100644 public/assets/etelkalightbold-webfont-2228057f2bc65595b1aa6bb978fdc024.svg create mode 100644 public/assets/etelkalightbold-webfont-a4d498eb3e03127324d20d39402b737c.ttf create mode 100644 public/assets/etelkalightbold-webfont-ca5e2f470b251e7706b3fd222f6c452b.woff create mode 100644 public/assets/etelkalightitalic-webfont-0331b1a437f2be83bd1def92da31a621.eot create mode 100644 public/assets/etelkalightitalic-webfont-11ecd04590d9c57d06af4fd7f1f200a1.woff create mode 100644 public/assets/etelkalightitalic-webfont-c86d64373f2e5820cb9c7579744d862b.svg create mode 100644 public/assets/etelkalightitalic-webfont-eeab2ccc14859e347751e00b94c7468d.ttf create mode 100644 public/assets/favicon-2435a1ee9e9dfca133abbca02619c8d9.ico create mode 100644 public/assets/id_card-9926a89250d68222f45669dd7984c90d.gif create mode 100644 public/assets/infotexb-webfont-0c710174eb8081bb570dcfc25caafa10.svg create mode 100644 public/assets/infotexb-webfont-71f78522d2a2c5a623ae6793fc18368e.woff create mode 100644 public/assets/infotexb-webfont-8d885bee87d1477c6db0b59dd52fe896.eot create mode 100644 public/assets/infotexb-webfont-e7609a76f035df9ef1161dea0cafc89c.ttf create mode 100644 public/assets/infotexm-webfont-3ce446804ee12a1aa4f0d3c67a2ec305.woff create mode 100644 public/assets/infotexm-webfont-5869797caccf6ab4d73938faf6b8588e.ttf create mode 100644 public/assets/infotexm-webfont-78ba702105f983e7c3ffe8c71e5e2b73.svg create mode 100644 public/assets/infotexm-webfont-b01aba1c16b6c69c24fd81580c4b252f.eot create mode 100644 public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-f91ca0f37189f2d27c249be3a9b5fe8e.png create mode 100644 public/assets/jquery-ui/ui-bg_flat_75_ffffff_40x100-bb0051ba9b6d87ef3f9425d05cb2f7f8.png create mode 100644 public/assets/jquery-ui/ui-bg_glass_55_fbf9ee_1x400-0fe7774bbb53c9db24dcf4dc4514db77.png create mode 100644 public/assets/jquery-ui/ui-bg_glass_65_ffffff_1x400-e50e57d636a734253c3c0b4cb4cef861.png create mode 100644 public/assets/jquery-ui/ui-bg_glass_75_dadada_1x400-3f7ec278f71651df1dda0e20ac460483.png create mode 100644 public/assets/jquery-ui/ui-bg_glass_75_e6e6e6_1x400-6522c988bbf45e6b805b6ed4adf70079.png create mode 100644 public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-addad4f60fb36fc37c7ed9ff916af31e.png create mode 100644 public/assets/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100-7984ba05f627254dfdbdde97f999f415.png create mode 100644 public/assets/jquery-ui/ui-icons_222222_256x240-6e4c17c299f104a87548b204269bb9e5.png create mode 100644 public/assets/jquery-ui/ui-icons_2e83ff_256x240-7cb6a4006575c000b8f91394a06b8391.png create mode 100644 public/assets/jquery-ui/ui-icons_454545_256x240-3440f505d562d5b095634dcb3dcf7a07.png create mode 100644 public/assets/jquery-ui/ui-icons_888888_256x240-cb45397ab08fadc7e4f1314b5d84e26c.png create mode 100644 public/assets/jquery-ui/ui-icons_cd0a0a_256x240-b4b9d1b4f2de973c609e28b87fbfbd4d.png create mode 100644 public/assets/lhv-5114f0bee2d3c70c47403f17e9d287e8.png create mode 100644 public/assets/mid-79dabc481b840aac303e5e1cc7dde8c6.gif create mode 100644 public/assets/nordea-87b186d736c3c93685086c13ee0a9f21.png create mode 100644 public/assets/registrant-manifest-9d06c365b21295408f3ccd37298efffb.css create mode 100644 public/assets/registrant-manifest-9d06c365b21295408f3ccd37298efffb.css.gz create mode 100644 public/assets/registrant-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js create mode 100644 public/assets/registrant-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js.gz create mode 100644 public/assets/registrar-manifest-71050a07965f499a5e7d6973a1389b1b.css create mode 100644 public/assets/registrar-manifest-71050a07965f499a5e7d6973a1389b1b.css.gz create mode 100644 public/assets/registrar-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js create mode 100644 public/assets/registrar-manifest-d9d0c29fad78a10a0c792a1715edd3d5.js.gz create mode 100644 public/assets/registrar/application-becf26b2259105fe47b50b2d3c80138c.js create mode 100644 public/assets/registrar/application-becf26b2259105fe47b50b2d3c80138c.js.gz create mode 100644 public/assets/registrar/bg-alpha-84eeebabe667b9b75b7b050eeee16eeb.png create mode 100644 public/assets/registrar/bg-development-d24ec62be8078e61a3c656b83fa8fe9b.png create mode 100644 public/assets/registrar/bg-staging-672bd21ed4b9cb3245ea44f3a2629bf0.png create mode 100644 public/assets/registrar/favicon-c06dd6a542ea15147e6794e03643f87c.ico create mode 100644 public/assets/seb-b1fa76625f31c3f4d0b84d450dd4c383.png create mode 100755 public/assets/select2-4a19e1b1ee05dc61304a3f9cf69ed866.png create mode 100755 public/assets/select2-spinner-a9ae0d27964eb30e49e3396bb2b4bd3d.gif create mode 100755 public/assets/select2x2-3bb6e2999d204bf36746d95f840e6b51.png create mode 100644 public/assets/shared/pdf-ef071ef29698676d4abe7c36b565496f.css create mode 100644 public/assets/shared/pdf-ef071ef29698676d4abe7c36b565496f.css.gz create mode 100644 public/assets/staging-672bd21ed4b9cb3245ea44f3a2629bf0.png create mode 100644 public/assets/swed-b9efaf29f99a76ecc01b03803be7a88d.png create mode 100644 public/assets/test-84eeebabe667b9b75b7b050eeee16eeb.png diff --git a/public/assets/admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js b/public/assets/admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js new file mode 100644 index 000000000..a4eadcf6d --- /dev/null +++ b/public/assets/admin-manifest-6e6fcf039a6b92e085d41d339fec5884.js @@ -0,0 +1,10 @@ +!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function n(t){var e=t.length,n=re.type(t);return"function"===n||re.isWindow(t)?!1:1===t.nodeType&&e?!0:"array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t}function i(t,e,n){if(re.isFunction(e))return re.grep(t,function(t,i){return!!e.call(t,i,t)!==n});if(e.nodeType)return re.grep(t,function(t){return t===e!==n});if("string"==typeof e){if(he.test(e))return re.filter(e,t,n);e=re.filter(e,t)}return re.grep(t,function(t){return re.inArray(t,e)>=0!==n})}function r(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function o(t){var e=we[t]={};return re.each(t.match(be)||[],function(t,n){e[n]=!0}),e}function a(){fe.addEventListener?(fe.removeEventListener("DOMContentLoaded",s,!1),t.removeEventListener("load",s,!1)):(fe.detachEvent("onreadystatechange",s),t.detachEvent("onload",s))}function s(){(fe.addEventListener||"load"===event.type||"complete"===fe.readyState)&&(a(),re.ready())}function l(t,e,n){if(void 0===n&&1===t.nodeType){var i="data-"+e.replace(De,"-$1").toLowerCase();if(n=t.getAttribute(i),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:_e.test(n)?re.parseJSON(n):n}catch(r){}re.data(t,e,n)}else n=void 0}return n}function u(t){var e;for(e in t)if(("data"!==e||!re.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function c(t,e,n,i){if(re.acceptData(t)){var r,o,a=re.expando,s=t.nodeType,l=s?re.cache:t,u=s?t[a]:t[a]&&a;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof e)return u||(u=s?t[a]=V.pop()||re.guid++:a),l[u]||(l[u]=s?{}:{toJSON:re.noop}),("object"==typeof e||"function"==typeof e)&&(i?l[u]=re.extend(l[u],e):l[u].data=re.extend(l[u].data,e)),o=l[u],i||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[re.camelCase(e)]=n),"string"==typeof e?(r=o[e],null==r&&(r=o[re.camelCase(e)])):r=o,r}}function d(t,e,n){if(re.acceptData(t)){var i,r,o=t.nodeType,a=o?re.cache:t,s=o?t[re.expando]:re.expando;if(a[s]){if(e&&(i=n?a[s]:a[s].data)){re.isArray(e)?e=e.concat(re.map(e,re.camelCase)):e in i?e=[e]:(e=re.camelCase(e),e=e in i?[e]:e.split(" ")),r=e.length;for(;r--;)delete i[e[r]];if(n?!u(i):!re.isEmptyObject(i))return}(n||(delete a[s].data,u(a[s])))&&(o?re.cleanData([t],!0):ne.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function h(){return!0}function p(){return!1}function f(){try{return fe.activeElement}catch(t){}}function g(t){var e=Le.split("|"),n=t.createDocumentFragment();if(n.createElement)for(;e.length;)n.createElement(e.pop());return n}function m(t,e){var n,i,r=0,o=typeof t.getElementsByTagName!==Ce?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Ce?t.querySelectorAll(e||"*"):void 0;if(!o)for(o=[],n=t.childNodes||t;null!=(i=n[r]);r++)!e||re.nodeName(i,e)?o.push(i):re.merge(o,m(i,e));return void 0===e||e&&re.nodeName(t,e)?re.merge([t],o):o}function v(t){Ee.test(t.type)&&(t.defaultChecked=t.checked)}function y(t,e){return re.nodeName(t,"table")&&re.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==re.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=Ye.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var n,i=0;null!=(n=t[i]);i++)re._data(n,"globalEval",!e||re._data(e[i],"globalEval"))}function k(t,e){if(1===e.nodeType&&re.hasData(t)){var n,i,r,o=re._data(t),a=re._data(e,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,r=s[n].length;r>i;i++)re.event.add(e,n,s[n][i])}a.data&&(a.data=re.extend({},a.data))}}function C(t,e){var n,i,r;if(1===e.nodeType){if(n=e.nodeName.toLowerCase(),!ne.noCloneEvent&&e[re.expando]){r=re._data(e);for(i in r.events)re.removeEvent(e,i,r.handle);e.removeAttribute(re.expando)}"script"===n&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===n?(e.parentNode&&(e.outerHTML=t.outerHTML),ne.html5Clone&&t.innerHTML&&!re.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===n&&Ee.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===n?e.defaultSelected=e.selected=t.defaultSelected:("input"===n||"textarea"===n)&&(e.defaultValue=t.defaultValue)}}function _(e,n){var i,r=re(n.createElement(e)).appendTo(n.body),o=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(r[0]))?i.display:re.css(r[0],"display");return r.detach(),o}function D(t){var e=fe,n=Je[t];return n||(n=_(t,e),"none"!==n&&n||(Ge=(Ge||re("