Depp vendorized

This commit is contained in:
Priit Tark 2015-04-07 15:33:41 +03:00
parent 98ace9d49f
commit 65f50c23f0
154 changed files with 4485 additions and 29 deletions

View file

@ -65,8 +65,7 @@ gem 'deep_cloneable', '~> 2.1.1'
gem 'digidoc_client', '~> 0.2.1'
# epp + repp client
gem 'depp', github: 'domify/depp', ref: 'bac84dba62baa1b6465523f52df9eb3140f4d1ee'
# gem 'depp', path: '../depp'
gem 'depp', path: 'vendor/gems/depp'
gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp'
# for importing legacy db

View file

@ -8,26 +8,6 @@ GIT
activesupport (>= 3.0, < 6.0)
request_store (~> 1.1.0)
GIT
remote: git://github.com/domify/depp.git
revision: bac84dba62baa1b6465523f52df9eb3140f4d1ee
ref: bac84dba62baa1b6465523f52df9eb3140f4d1ee
specs:
depp (0.0.2)
coderay (>= 1.1.0)
coffee-rails (>= 4.1.0)
countries (>= 0.9.3)
epp-xml (>= 0.10.4)
figaro (>= 1.1.0)
haml-rails (>= 0.9.0)
jquery-rails (>= 4.0.3)
kaminari (~> 0.16.3)
nokogiri (>= 1.6.6.2)
rails (>= 4.2.1)
sass-rails (>= 5.0.0)
uglifier (>= 2.6.1)
uuidtools (>= 2.1.4)
GIT
remote: git://github.com/gitlabeu/epp.git
revision: 505c3f2739eb1da918e54111aecfb138a822739d
@ -47,6 +27,24 @@ GIT
nokogiri (~> 1.6.0)
ruby_parser (~> 3.5)
PATH
remote: vendor/gems/depp
specs:
depp (0.0.2)
coderay (>= 1.1.0)
coffee-rails (>= 4.1.0)
countries (>= 0.9.3)
epp-xml (>= 0.10.4)
figaro (>= 1.1.0)
haml-rails (>= 0.9.0)
jquery-rails (>= 4.0.3)
kaminari (~> 0.16.3)
nokogiri (>= 1.6.6.2)
rails (>= 4.2.1)
sass-rails (>= 5.0.0)
uglifier (>= 2.6.1)
uuidtools (>= 2.1.4)
GEM
remote: https://rubygems.org/
specs:
@ -147,7 +145,7 @@ GEM
coffee-rails (4.1.0)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.0)
coffee-script (2.3.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.9.1)
@ -182,7 +180,7 @@ GEM
builder (~> 3.2)
equalizer (0.0.11)
erubis (2.7.0)
execjs (2.4.0)
execjs (2.5.0)
fabrication (2.12.2)
faker (1.3.0)
i18n (~> 0.5)
@ -223,7 +221,7 @@ GEM
guard-rubocop (1.1.0)
guard (~> 2.0)
rubocop (~> 0.20)
gyoku (1.3.0)
gyoku (1.3.1)
builder (>= 2.1.2)
haml (4.0.6)
tilt
@ -301,7 +299,7 @@ GEM
cliver (~> 0.3.1)
multi_json (~> 1.0)
websocket-driver (>= 0.2.0)
polyamorous (1.1.0)
polyamorous (1.2.0)
activerecord (>= 3.0)
powerpack (0.0.9)
pry (0.10.1)
@ -405,7 +403,7 @@ GEM
virtus (~> 1.0)
safe_yaml (1.0.4)
sass (3.4.13)
sass-rails (5.0.2)
sass-rails (5.0.1)
railties (>= 4.0.0, < 5.0)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
@ -437,7 +435,7 @@ GEM
temple (~> 0.6.9)
tilt (>= 1.3.3, < 2.1)
slop (3.6.0)
spring (1.3.3)
spring (1.3.4)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (2.12.3)
@ -454,7 +452,7 @@ GEM
systemu (2.6.5)
temple (0.6.10)
terminal-table (1.4.5)
therubyracer (0.12.1)
therubyracer (0.12.2)
libv8 (~> 3.16.14.0)
ref
thor (0.19.1)

1
depp Symbolic link
View file

@ -0,0 +1 @@
vendor/gems/depp

17
vendor/gems/depp/Gemfile vendored Normal file
View file

@ -0,0 +1,17 @@
source 'https://rubygems.org'
# Declare your gem's dependencies in depp.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
gemspec
gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp'
# Declare any dependencies that are still in development here instead of in
# your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org.
# To use a debugger
# gem 'byebug', group: [:development, :test]

182
vendor/gems/depp/Gemfile.lock vendored Normal file
View file

@ -0,0 +1,182 @@
GIT
remote: git://github.com/gitlabeu/epp.git
revision: 505c3f2739eb1da918e54111aecfb138a822739d
specs:
epp (1.4.2)
hpricot
libxml-ruby
PATH
remote: .
specs:
depp (0.0.2)
coderay (>= 1.1.0)
coffee-rails (>= 4.1.0)
countries (>= 0.9.3)
epp-xml (>= 0.10.4)
figaro (>= 1.1.0)
haml-rails (>= 0.9.0)
jquery-rails (>= 4.0.3)
nokogiri (>= 1.6.6.2)
rails (>= 4.2.1)
sass-rails (>= 5.0.0)
uglifier (>= 2.6.1)
uuidtools (>= 2.1.4)
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.2.1)
actionpack (= 4.2.1)
actionview (= 4.2.1)
activejob (= 4.2.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.1)
actionview (= 4.2.1)
activesupport (= 4.2.1)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
actionview (4.2.1)
activesupport (= 4.2.1)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.1)
activejob (4.2.1)
activesupport (= 4.2.1)
globalid (>= 0.3.0)
activemodel (4.2.1)
activesupport (= 4.2.1)
builder (~> 3.1)
activerecord (4.2.1)
activemodel (= 4.2.1)
activesupport (= 4.2.1)
arel (~> 6.0)
activesupport (4.2.1)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
arel (6.0.0)
builder (3.2.2)
coderay (1.1.0)
coffee-rails (4.1.0)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.0)
coffee-script (2.3.0)
coffee-script-source
execjs
coffee-script-source (1.9.1)
countries (0.11.3)
currencies (~> 0.4.2)
i18n_data (~> 0.6.0)
currencies (0.4.2)
epp-xml (0.10.4)
activesupport (~> 4.1)
builder (~> 3.2)
erubis (2.7.0)
execjs (2.4.0)
figaro (1.1.0)
thor (~> 0.14)
globalid (0.3.3)
activesupport (>= 4.1.0)
haml (4.0.6)
tilt
haml-rails (0.9.0)
actionpack (>= 4.0.1)
activesupport (>= 4.0.1)
haml (>= 4.0.6, < 5.0)
html2haml (>= 1.0.1)
railties (>= 4.0.1)
hike (1.2.3)
hpricot (0.8.6)
html2haml (2.0.0)
erubis (~> 2.7.0)
haml (~> 4.0.0)
nokogiri (~> 1.6.0)
ruby_parser (~> 3.5)
i18n (0.7.0)
i18n_data (0.6.3)
jquery-rails (4.0.3)
rails-dom-testing (~> 1.0)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (1.8.2)
libxml-ruby (2.8.0)
loofah (2.0.1)
nokogiri (>= 1.5.9)
mail (2.6.3)
mime-types (>= 1.16, < 3)
mime-types (2.4.3)
mini_portile (0.6.2)
minitest (5.5.1)
multi_json (1.11.0)
nokogiri (1.6.6.2)
mini_portile (~> 0.6.0)
rack (1.6.0)
rack-test (0.6.3)
rack (>= 1.0)
rails (4.2.1)
actionmailer (= 4.2.1)
actionpack (= 4.2.1)
actionview (= 4.2.1)
activejob (= 4.2.1)
activemodel (= 4.2.1)
activerecord (= 4.2.1)
activesupport (= 4.2.1)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.1)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.6)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6.0)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.2)
loofah (~> 2.0)
railties (4.2.1)
actionpack (= 4.2.1)
activesupport (= 4.2.1)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (10.4.2)
ruby_parser (3.6.5)
sexp_processor (~> 4.1)
sass (3.4.13)
sass-rails (5.0.1)
railties (>= 4.0.0, < 5.0)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (~> 1.1)
sexp_processor (4.5.0)
sprockets (2.12.3)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.2.4)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
thor (0.19.1)
thread_safe (0.3.5)
tilt (1.4.1)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (2.7.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
uuidtools (2.1.5)
PLATFORMS
ruby
DEPENDENCIES
depp!
epp (~> 1.4.2)!

20
vendor/gems/depp/MIT-LICENSE vendored Normal file
View file

@ -0,0 +1,20 @@
Copyright 2015 Priit Tark
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

23
vendor/gems/depp/README.md vendored Normal file
View file

@ -0,0 +1,23 @@
Depp
====
EPP/REPP Rails engine
Installation
------------
Add Depp and epp to your Gemfile:
gem 'depp', github: 'domify/depp'
gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp'
Mount Depp to your application routes, example:
mount Depp::Engine, at: '/depp'
Depp requires login_url helper, example in routes:
get '/login', to: 'sessions#login', as: 'login'
Depp requires current_user helper in controller

37
vendor/gems/depp/Rakefile vendored Normal file
View file

@ -0,0 +1,37 @@
begin
require 'bundler/setup'
rescue LoadError
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
end
require 'rdoc/task'
RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = 'Depp'
rdoc.options << '--line-numbers'
rdoc.rdoc_files.include('README.rdoc')
rdoc.rdoc_files.include('lib/**/*.rb')
end
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
load 'rails/tasks/engine.rake'
load 'rails/tasks/statistics.rake'
Bundler::GemHelper.install_tasks
require 'rake/testtask'
Rake::TestTask.new(:test) do |t|
t.libs << 'lib'
t.libs << 'test'
t.pattern = 'test/**/*_test.rb'
t.verbose = false
end
task default: :test

1
vendor/gems/depp/TODO vendored Normal file
View file

@ -0,0 +1 @@
* add config/application.yml default with rake task

View file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

View file

@ -0,0 +1,31 @@
#= require jquery
#= require jquery_ujs
#= require turbolinks
#= require bootstrap-sprockets
#= require jquery.nested_attributes
$(document).on 'ready page:load', ->
$('.js-contact-form').on 'restoreDefault', (e) ->
form = $(e.target)
form.find('.js-ident-tip').hide()
switch $('.js-ident-country-code option:selected').val()
when 'EE'
$('.js-ident-type').find('option[value=birthday]').prop('disabled', true)
else
$('.js-ident-type').find('option[value=birthday]').prop('disabled', false)
$('.js-ident-country-code').change (e) ->
form = $('.js-contact-form')
form.trigger 'restoreDefault'
$('.js-ident-type').change (e) ->
form = $('.js-contact-form')
form.trigger 'restoreDefault'
switch e.target.value
# when 'bic'
# when 'priv'
when 'birthday'
form.find('.js-ident-tip').show()
$('.js-contact-form').trigger('restoreDefault')

View file

@ -0,0 +1,3 @@
//= require './custom-boostrap'
//= require './general'
//= require './overwrites'

View file

@ -0,0 +1,5 @@
$font-family-sans-serif: 'EtelkaLightProRegular', Arial, Helvetica, sans-serif;
$font-family-serif: 'EtelkaLightProBold', Georgia, "Times New Roman", Times, serif;
@import "bootstrap-sprockets";
@import "bootstrap";

View file

@ -0,0 +1,226 @@
html
font-size: 100%
overflow-y: scroll
-webkit-text-size-adjust: 100%
-ms-text-size-adjust: 100%
body
background: url(image_path('bg.jpg'))
h1
font-size: 26px
margin-bottom: 16px
a
color: #008fd7
text-decoration: none
a:hover,
a:active
color: #008fd7
outline: 0
h1, h2, h3, h4, h1 a, h2 a, h3 a, h4 a
color: #272f34
text-decoration: none
font-weight: normal
font-family: 'EtelkaLightProBold'
h1
font-size: 22px
text-transform: uppercase
body,
button,
input,
select,
textarea
font-family: 'EtelkaLightProRegular', Arial, Helvetica, sans-serif
color: #5d6064
font-size: 13px
abbr[title]
border-bottom: 1px dotted
b,
strong
font-weight: normal
font-family: 'EtelkaLightProBold'
blockquote
margin: 1em 40px
dfn
font-style: italic
mark
background: #ff0
color: #000
pre,
code,
kbd,
samp
font-family: monospace, serif
_font-family: 'courier new', monospace
font-size: 1em
pre
white-space: pre
white-space: pre-wrap
word-wrap: break-word
q
quotes: none
q:before,
q:after
content: ''
content: none
small
font-size: 75%
sub,
sup
font-size: 75%
line-height: 0
position: relative
vertical-align: baseline
sup
top: -0.5em
sub
bottom: -0.25em
.title-row
margin-bottom: 22px
.app-nav
padding-top: 7px
.general-tab
padding-top: 30px
padding-right: 20px
border-top: 0px
.container
border-radius: 3px
width: 860px
body > .container
background: #F8F8F8
margin-bottom: 50px
min-height: 600px
padding: 30px 30px 56px 30px
.container.version
background: transparent
margin-top: -116px
min-height: 0px
text-align: right
font-size: 12px
color: gray
.container.subnav
background: transparent
min-height: 0
padding: 0 46px 0 0
margin-bottom: 0
ul.nav
li a
background: #E7E7E7
height: 33px
line-height: 12px
color: gray
&:hover
color: #333
li.active a
background: #F8F8F8
font-weight: bold
color: #333
.subactions
h4
margin-bottom: 20px
margin-top: 10px
min-height: 600px
.sidebar
min-height: 400px
.content
margin-right: 240px
margin-left: 0
h4
margin: 0
.top-actions
margin-top: 12px
margin-bottom: 16px
float: right
.navbar-brand
line-height: 12px
padding-top: 20px
padding-bottom: 5px
.navbar-brand small
display: block
font-size: 10px
.footer
color: #777
padding-top: 70px
padding-bottom: 10px
font-size: 10px
.domify
td
vertical-align: middle !important
body.login
padding-top: 40px
padding-bottom: 40px
.form-signin
.form-signin-heading,
.form-signin
.checkbox
margin-bottom: 10px
.form-signin
max-width: 330px
padding: 15px
margin: 0 auto
input[type="text"]
margin-bottom: 8px
input[type="password"]
margin-bottom: 10px
.btn-lg
margin-top: 28px
.checkbox
font-weight: normal
.form-control
position: relative
height: auto
-webkit-box-sizing: border-box
-moz-box-sizing: border-box
box-sizing: border-box
padding: 10px
font-size: 16px
.form-control:focus
z-index: 2
// fix label position for medium screen
@media (min-width: 768px) and (max-width: 991px)
.form-horizontal .control-label
text-align: left

View file

@ -0,0 +1 @@
// Overwrite this file at your application app/assets/stylesheets/depp/overwrite.sass

View file

@ -0,0 +1,54 @@
module Depp
# class ApplicationController < ::ApplicationController
class ApplicationController < ActionController::Base
include CurrentUserHelper
include ApplicationHelper
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
helper_method :depp_current_user
rescue_from(Errno::ECONNRESET, Errno::ECONNREFUSED) do |exception|
redirect_to login_url, alert: t(:no_connection_to_registry)
end
before_action :authenticate_user
def authenticate_user
if ENV['session_timeout']
redirect_to main_app.login_url and return unless depp_current_user && session[:last_seen]
if (session[:last_seen].to_i + ENV['session_timeout'].to_i) < Time.now.to_i
session_timeout
else
session[:last_seen] = Time.now.to_i
end
else
redirect_to main_app.login_url and return unless depp_current_user
end
end
def session_timeout
reset_session
flash[:alert] = t('your_session_has_timed_out')
redirect_to main_app.login_url and return
end
def depp_current_user
return nil unless current_user
@depp_current_user ||= Depp::User.new(
tag: current_user.username,
password: current_user.password
)
end
def response_ok?
@data.css('result').each do |x|
success_codes = %(1000, 1300, 1301)
return false unless success_codes.include?(x['code'])
end
true
end
end
end

View file

@ -0,0 +1,84 @@
module Depp
class ContactsController < ApplicationController
before_action :init_epp_contact
def index
limit, offset = pagination_details
res = depp_current_user.repp_request('contacts', { details: true, limit: limit, offset: offset })
flash.now[:epp_results] = [{ 'code' => res.code, 'msg' => res.message }]
@response = res.parsed_body.with_indifferent_access if res.code == '200'
@contacts = @response ? @response[:contacts] : []
@paginatable_array = Kaminari.paginate_array(
[], total_count: @response[:total_number_of_records]
).page(params[:page]).per(limit)
end
def new
@contact = Depp::Contact.new
end
def show
@contact = Depp::Contact.find_by_id(params[:id])
end
def edit
@contact = Depp::Contact.find_by_id(params[:id])
end
def create
@contact = Depp::Contact.new(params[:contact])
if @contact.save
redirect_to contact_url(@contact.id)
else
render 'new'
end
end
def update
@contact = Depp::Contact.new(params[:contact])
if @contact.update_attributes(params[:contact])
redirect_to contact_url(@contact.id)
else
render 'edit'
end
end
def delete
@contact = Depp::Contact.find_by_id(params[:id])
end
def destroy
@contact = Depp::Contact.new(params[:contact])
if @contact.delete
redirect_to contacts_url, notice: t(:destroyed)
else
render 'delete'
end
end
def check
@ids = params[:contacts]
# if @ids
# @contacts = []
# @ids.split(',').each do |id|
# @contacts << id.strip
# end
# end
return unless @ids
@data = @contact.check(@ids)
@contacts = Depp::Contact.construct_check_hash_from_data(@data)
end
private
def init_epp_contact
Depp::Contact.user = depp_current_user
end
end
end

View file

@ -0,0 +1,107 @@
module Depp
class DomainsController < ApplicationController
before_action :init_domain, except: :new
def index
limit, offset = pagination_details
res = depp_current_user.repp_request('domains', { details: true, limit: limit, offset: offset })
flash.now[:epp_results] = [{ 'code' => res.code, 'msg' => res.message }]
@response = res.parsed_body.with_indifferent_access if res.code == '200'
@contacts = @response ? @response[:contacts] : []
@paginatable_array = Kaminari.paginate_array(
[], total_count: @response[:total_number_of_records]
).page(params[:page]).per(limit)
end
def info
@data = @domain.info(params[:domain_name]) if params[:domain_name]
if response_ok?
render 'info'
else
flash[:alert] = t('domain_not_found')
redirect_to domains_path and return
end
end
def check
if params[:domain_name]
@data = @domain.check(params[:domain_name])
render 'check_index' and return unless response_ok?
else
render 'check_index'
end
end
def new
@domain_params = Depp::Domain.default_params
end
def create
@domain_params = params[:domain]
@data = @domain.create(@domain_params)
if response_ok?
redirect_to info_domains_path(domain_name: @domain_params[:name])
else
render 'new'
end
end
def edit
@data = @domain.info(params[:domain_name])
@domain_params = Depp::Domain.construct_params_from_server_data(@data)
end
def update
@domain_params = params[:domain]
@data = @domain.update(@domain_params)
if response_ok?
redirect_to info_domains_path(domain_name: @domain_params[:name])
else
params[:domain_name] = @domain_params[:name]
render 'new'
end
end
def delete; end
def destroy
@data = @domain.delete(params[:domain])
@results = @data.css('result')
if response_ok?
params[:domain_name] = nil
render 'info_index'
else
params[:domain_name] = params[:domain][:name]
render 'delete'
end
end
def renew
if params[:domain_name] && params[:cur_exp_date]
@data = @domain.renew(params)
render 'renew_index' and return unless response_ok?
else
render 'renew_index'
end
end
def transfer
if params[:domain_name]
@data = @domain.transfer(params)
render 'transfer_index' and return unless response_ok?
else
render 'transfer_index'
end
end
private
def init_domain
@domain = Depp::Domain.new(current_user: depp_current_user)
end
end
end

View file

@ -0,0 +1,17 @@
module Depp
class KeyrelaysController < ApplicationController
def show; end
def create
keyrelay = Depp::Keyrelay.new(current_user: depp_current_user)
@data = keyrelay.keyrelay(params)
if response_ok?
flash[:epp_results] = [{ 'code' => '1000', 'msg' => 'Command completed successfully' }]
redirect_to keyrelay_path
else
render 'show'
end
end
end
end

View file

@ -0,0 +1,50 @@
module Depp
class PollsController < ApplicationController
before_action :init_epp_xml
def show
@data = depp_current_user.request(@ex.poll)
end
def destroy
@data = depp_current_user.request(@ex.poll(poll: {
value: '', attrs: { op: 'ack', msgID: params[:id] }
}))
@results = @data.css('result')
@data = depp_current_user.request(@ex.poll)
render 'show'
end
def confirm_keyrelay
domain_params = params[:domain]
@data = @domain.confirm_keyrelay(domain_params)
if response_ok?
redirect_to info_domains_path(domain_name: domain_params[:name])
else
@results = @data.css('result')
@data = depp_current_user.request(@ex.poll)
render 'show'
end
end
def confirm_transfer
domain_params = params[:domain]
@data = @domain.confirm_transfer(domain_params)
@results = @data.css('result')
@data = depp_current_user.request(@ex.poll)
render 'show'
end
private
def init_epp_xml
@ex = EppXml::Session.new(cl_trid_prefix: depp_current_user.tag)
@domain = Depp::Domain.new(current_user: depp_current_user)
end
end
end

View file

@ -0,0 +1,23 @@
module Depp
class XmlConsolesController < ApplicationController
def show; end
def create
begin
@result = depp_current_user.server.request(params[:payload])
rescue
@result = 'CONNECTION ERROR - Is the EPP server running?'
end
render :show
end
def load_xml
# binding.pry
cl_trid = "#{depp_current_user.tag}-#{Time.now.to_i}"
xml_dir_path = Depp::Engine.root + 'app/views/depp/xml_consoles/epp_requests'
xml = File.read("#{xml_dir_path}/#{params[:obj]}/#{params[:epp_action]}.xml")
xml.gsub!('<clTRID>ABC-12345</clTRID>', "<clTRID>#{cl_trid}</clTRID>")
render text: xml
end
end
end

View file

@ -0,0 +1,29 @@
module Depp
module ApplicationHelper
def unstable_env
return nil if Rails.env.production?
Rails.env
end
def env_style
return '' if unstable_env.nil?
"background-image: url(#{image_path("depp/bg-#{unstable_env}.png")});"
end
def ident_for(contact)
case contact.ident_type
when 'birthday'
"#{contact.ident} [#{contact.ident_type}]"
else
"#{contact.ident} [#{contact.ident_country_code} #{contact.ident_type}]"
end
end
def pagination_details
params[:page] ||= 1
limit = ENV['depp_records_on_page'] || DEPP_RECORDS_ON_PAGE
offset = ((params[:page].to_i - 1) * limit.to_i)
[limit, offset]
end
end
end

View file

View file

@ -0,0 +1,293 @@
module Depp
class Contact
include ActiveModel::Model
attr_accessor :id, :name, :email, :phone, :org_name,
:ident, :ident_type, :ident_country_code,
:street, :city, :zip, :state, :country_code,
:password, :legal_document, :statuses, :code
DISABLED = 'Disabled'
DISCLOSURE_TYPES = [DISABLED, '1', '0']
TYPES = %w( bic priv birthday )
SELECTION_TYPES = [
[ 'Business code', 'bic' ],
[ 'Personal identification code', 'priv' ],
[ 'Birthday', 'birthday' ]
]
class << self
def new_from_params(params)
new(
id: params[:code],
code: params[:code],
email: params[:email],
phone: params[:phone],
ident: params[:ident],
ident_type: params[:ident_type],
ident_country_code: params[:ident_country_code],
# postalInfo
name: params[:name],
org_name: params[:org_name],
# address
street: params[:street],
city: params[:city],
zip: params[:zip],
state: params[:state],
country_code: params[:country_code],
)
end
def find_by_id(id)
data = info_xml(id)
res = data.css('epp response resData infData')
new(
id: res.css('id').text,
code: res.css('id').text,
email: res.css('email').text,
phone: res.css('voice').text,
ident: res.css('ident').text,
ident_type: res.css('ident').first.try(:attributes).try(:[], 'type').try(:value),
ident_country_code: res.css('ident').first.try(:attributes).try(:[], 'cc').try(:value),
# postalInfo
name: res.css('postalInfo name').text,
org_name: res.css('postalInfo org').text,
# address
street: res.css('postalInfo addr street').text,
city: res.css('postalInfo addr city').text,
zip: res.css('postalInfo addr pc').text,
state: res.css('postalInfo addr sp').text,
country_code: res.css('postalInfo addr cc').text,
# authInfo
password: res.css('authInfo pw').text,
# statuses
statuses: data.css('status').map { |s| [s['s'], s.text] }
)
end
def user=(user)
@user = user
@epp_xml = EppXml::Contact.new(cl_trid_prefix: user.tag)
end
def epp_xml
@epp_xml
end
def user
@user
end
def info_xml(id, password = nil)
xml = epp_xml.info(
id: { value: id },
authInfo: { pw: { value: password } }
)
user.request(xml)
end
def construct_check_hash_from_data(data)
res = data.css('epp response resData chkData cd')
@contacts = []
res.each do |_r|
id = res.css('id').try(:text)
reason = res.css('reason').present? ? res.css('reason').text : I18n.t(:available)
@contacts << { id: id, reason: reason }
end
@contacts
end
def contact_id_from_xml(data)
id = data.css('epp response resData creData id').text
id.blank? ? nil : id
end
def construct_create_disclosure_xml(cph, flag)
xml = { disclose: {} }
cph.each do |k, v|
xml[:disclose][k] = {}
xml[:disclose][k][:value] = v
end
xml[:disclose][:attrs] = {}
xml[:disclose][:attrs][:flag] = flag
xml.with_indifferent_access
end
def extract_disclosure_hash(cpd) # cpd = contact_params[:disclose]
return {} unless cpd
cpd = cpd.delete_if { |k, v| v if v != '1' && k == 'flag' }
cpd
end
def extract_info_disclosure(data)
hash = {}
data.css('disclose').each do |d|
flag = d.attributes['flag'].value
next unless flag
hash[flag] = {}
d.children.each do |c|
hash[flag][c.name] = flag if %w( name email fax voice addr org_name ).include?(c.name)
end
end
hash
end
end
def initialize(attributes={})
super
self.country_code = 'EE' if country_code.blank?
self.ident_type = 'bic' if ident_type.blank?
self.ident_country_code = 'EE' if ident_country_code.blank?
end
def save
create_xml = Depp::Contact.epp_xml.create(
{
id: { value: code },
email: { value: email },
voice: { value: phone },
postalInfo: {
name: { value: name },
org: { value: org_name },
addr: {
street: { value: street },
city: { value: city },
pc: { value: zip },
sp: { value: state },
cc: { value: country_code }
}
}
},
extension_xml
)
data = Depp::Contact.user.request(create_xml)
self.id = data.css('id').text
handle_errors(data)
end
def update_attributes(params)
self.ident_country_code = params[:ident_country_code]
self.ident_type = params[:ident_type]
self.ident = params[:ident]
self.name = params[:name]
self.email = params[:email]
self.phone = params[:phone]
self.org_name = params[:org_name]
self.street = params[:street]
self.city = params[:city]
self.zip = params[:zip]
self.state = params[:state]
self.country_code = params[:country_code]
update_xml = Depp::Contact.epp_xml.update(
{
id: { value: id },
chg: {
voice: { value: phone },
email: { value: email },
postalInfo: {
name: { value: name },
org: { value: org_name },
addr: {
street: { value: street },
city: { value: city },
pc: { value: zip },
sp: { value: state },
cc: { value: country_code }
}
}
},
authInfo: {
pw: { value: password }
}
},
extension_xml
)
data = Depp::Contact.user.request(update_xml)
handle_errors(data)
end
def delete
delete_xml = Contact.epp_xml.delete(
{
id: { value: id },
authInfo: { pw: { value: password } }
},
extension_xml
)
data = Depp::Contact.user.request(delete_xml)
handle_errors(data)
end
def extension_xml
ident_xml.merge(legal_document_xml)
end
def ident_xml
{
_anonymus: [
ident: { value: ident, attrs: { type: ident_type, cc: ident_country_code } }
]
}
end
def legal_document_xml
return {} if legal_document.blank?
type = legal_document.original_filename.split('.').last.downcase
{
_anonymus: [
legalDocument: { value: Base64.encode64(legal_document.read), attrs: { type: type } }
]
}
end
def check(id)
xml = epp_xml.check(id: { value: id })
current_user.request(xml)
end
def country_name
Country.new(country_code)
end
def bic?
ident_type == 'bic'
end
def priv?
ident_type == 'priv'
end
def persisted?
id.present?
end
def handle_errors(data)
data.css('result').each do |x|
success_codes = %(1000, 1300, 1301)
unless success_codes.include?(x['code'])
message = "#{x.css('msg').text} #{x.css('value').text}"
attr = message.split('[').last.strip.sub(']','') if message.include?('[')
attr = :base if attr.nil?
attr = 'phone' if attr == 'voice'
errors.add(attr, message)
end
end
errors.blank?
end
end
end

View file

@ -0,0 +1,25 @@
module Depp
class Dnskey
FLAGS = [
['0 - not for DNSSEC validation', 0],
['256 - ZSK', 256],
['257 - KSK', 257]
]
ALGORITHMS = [
['3 - DSA/SHA-1', 3],
['5 - RSA/SHA-1', 5],
['6 - DSA-NSEC3-SHA1', 6],
['7 - RSASHA1-NSEC3-SHA1', 7],
['8 - RSA/SHA-256', 8],
['252 - Reserved for Indirect Keys', 252],
['253 - Private algorithm', 253],
['254 - Private algorithm OID', 254],
['255 - Reserved', 255]
]
PROTOCOLS = [3]
DS_DIGEST_TYPES = [1, 2]
end
end

View file

@ -0,0 +1,300 @@
module Depp
class Domain
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :current_user, :epp_xml
DOMAIN_STATUSES = %w(
clientDeleteProhibited
clientHold
clientRenewProhibited
clientTransferProhibited
clientUpdateProhibited
)
def initialize(args = {})
self.current_user = args[:current_user]
self.epp_xml = EppXml::Domain.new(cl_trid_prefix: current_user.tag)
end
def info(domain_name)
xml = epp_xml.info(name: { value: domain_name })
current_user.request(xml)
end
def check(domain_name)
xml = epp_xml.check(
_anonymus: [
name: { value: domain_name }
]
)
current_user.request(xml)
end
def create(domain_params)
xml = epp_xml.create({
name: { value: domain_params[:name] },
registrant: { value: domain_params[:registrant] },
period: { value: domain_params[:period], attrs: { unit: domain_params[:period_unit] } },
ns: Domain.create_nameservers_hash(domain_params),
_anonymus: Domain.create_contacts_hash(domain_params)
}, {
_anonymus: Domain.create_dnskeys_hash(domain_params)
}, Domain.construct_custom_params_hash(domain_params))
current_user.request(xml)
end
def update(domain_params)
data = current_user.request(epp_xml.info(name: { value: domain_params[:name] }))
old_domain_params = Depp::Domain.construct_params_from_server_data(data)
xml = epp_xml.update(
Depp::Domain.construct_edit_hash(domain_params, old_domain_params),
Depp::Domain.construct_ext_edit_hash(domain_params, old_domain_params),
Depp::Domain.construct_custom_params_hash(domain_params)
)
current_user.request(xml)
end
def delete(domain_params)
xml = epp_xml.delete({
name: { value: domain_params[:name] }
}, Depp::Domain.construct_custom_params_hash(domain_params))
current_user.request(xml)
end
def renew(params)
current_user.request(epp_xml.renew(
name: { value: params[:domain_name] },
curExpDate: { value: params[:cur_exp_date] },
period: { value: params[:period], attrs: { unit: params[:period_unit] } }
))
end
def transfer(params)
op = params[:query] ? 'query' : nil
op = params[:approve] ? 'approve' : op
op = params[:reject] ? 'reject' : op
current_user.request(epp_xml.transfer({
name: { value: params[:domain_name] },
authInfo: { pw: { value: params[:password] } }
}, op, Domain.construct_custom_params_hash(params)))
end
def confirm_keyrelay(domain_params)
xml = epp_xml.update({
name: { value: domain_params[:name] }
}, {
add: Domain.create_dnskeys_hash(domain_params)
})
current_user.request(xml)
end
def confirm_transfer(domain_params)
data = current_user.request(epp_xml.info(name: { value: domain_params[:name] }))
pw = data.css('pw').text
xml = epp_xml.transfer({
name: { value: domain_params[:name] },
authInfo: { pw: { value: pw } }
}, 'approve')
current_user.request(xml)
end
class << self
def default_params
ret = {}
ret[:contacts_attributes] ||= {}
ENV['default_admin_contacts_count'].to_i.times do |i|
ret[:contacts_attributes][i] = { code: '', type: 'admin' }
end
ret[:nameservers_attributes] ||= {}
ENV['default_nameservers_count'].to_i.times do |i|
ret[:nameservers_attributes][i] = {}
end
ret[:dnskeys_attributes] ||= { 0 => {} }
ret[:statuses_attributes] ||= { 0 => {} }
ret.with_indifferent_access
end
def construct_params_from_server_data(data) # rubocop:disable Metrics/MethodLength
ret = default_params
ret[:name] = data.css('name').text
ret[:registrant] = data.css('registrant').text
data.css('contact').each_with_index do |x, i|
ret[:contacts_attributes][i] = { code: x.text, type: x['type'] }
end
data.css('hostAttr').each_with_index do |x, i|
ret[:nameservers_attributes][i] = {
hostname: x.css('hostName').text,
ipv4: x.css('hostAddr[ip="v4"]').text,
ipv6: x.css('hostAddr[ip="v6"]').text
}
end
data.css('dsData').each_with_index do |x, i|
ds = {
ds_key_tag: x.css('keyTag').first.try(:text),
ds_alg: x.css('alg').first.try(:text),
ds_digest_type: x.css('digestType').first.try(:text),
ds_digest: x.css('digest').first.try(:text)
}
kd = x.css('keyData').first
ds.merge!({
flags: kd.css('flags').first.try(:text),
protocol: kd.css('protocol').first.try(:text),
alg: kd.css('alg').first.try(:text),
public_key: kd.css('pubKey').first.try(:text)
}) if kd
ret[:dnskeys_attributes][i] = ds
end
data.css('status').each_with_index do |x, i|
next unless DOMAIN_STATUSES.include?(x['s'])
ret[:statuses_attributes][i] = {
code: x['s'],
description: x.text
}
end
ret
end
def construct_custom_params_hash(domain_params)
custom_params = {}
if domain_params[:legal_document].present?
type = domain_params[:legal_document].original_filename.split('.').last.downcase
custom_params = {
_anonymus: [
legalDocument: { value: Base64.encode64(domain_params[:legal_document].read), attrs: { type: type } }
]
}
end
custom_params
end
def construct_edit_hash(domain_params, old_domain_params)
contacts = create_contacts_hash(domain_params) - create_contacts_hash(old_domain_params)
statuses = create_statuses_hash(domain_params) - create_statuses_hash(old_domain_params)
add_anon = contacts + statuses
contacts = create_contacts_hash(old_domain_params) - create_contacts_hash(domain_params)
statuses = create_statuses_hash(old_domain_params) - create_statuses_hash(domain_params)
rem_anon = contacts + statuses
if domain_params[:registrant] != old_domain_params[:registrant]
chg = [{ registrant: { value: domain_params[:registrant] } }]
end
{
name: { value: domain_params[:name] },
chg: chg,
add: [
{ ns: create_nameservers_hash(domain_params) - create_nameservers_hash(old_domain_params) },
{ _anonymus: add_anon }
],
rem: [
{ ns: create_nameservers_hash(old_domain_params) - create_nameservers_hash(domain_params) },
{ _anonymus: rem_anon }
]
}
end
def construct_ext_edit_hash(domain_params, old_domain_params)
{
add: create_dnskeys_hash(domain_params) - create_dnskeys_hash(old_domain_params),
rem: create_dnskeys_hash(old_domain_params) - create_dnskeys_hash(domain_params)
}
end
def create_nameservers_hash(domain_params)
ret = []
domain_params[:nameservers_attributes].each do |_k, v|
next if v['hostname'].blank?
host_attr = []
host_attr << { hostName: { value: v['hostname'] } }
host_attr << { hostAddr: { value: v['ipv4'], attrs: { ip: 'v4' } } } if v['ipv4'].present?
host_attr << { hostAddr: { value: v['ipv6'], attrs: { ip: 'v6' } } } if v['ipv6'].present?
ret << { hostAttr: host_attr }
end
ret
end
def create_contacts_hash(domain_params)
ret = []
domain_params[:contacts_attributes].each do |_k, v|
next if v['code'].blank?
ret << {
contact: { value: v['code'], attrs: { type: v['type'] } }
}
end
ret
end
def create_dnskeys_hash(domain_params)
ret = []
domain_params[:dnskeys_attributes].each do |_k, v|
if v['ds_key_tag'].blank?
kd = create_key_data_hash(v)
ret << {
keyData: kd
} if kd
else
ret << {
dsData: [
keyTag: { value: v['ds_key_tag'] },
alg: { value: v['ds_alg'] },
digestType: { value: v['ds_digest_type'] },
digest: { value: v['ds_digest'] },
keyData: create_key_data_hash(v)
]
}
end
end
ret
end
def create_key_data_hash(key_data_params)
return nil if key_data_params['public_key'].blank?
{
flags: { value: key_data_params['flags'] },
protocol: { value: key_data_params['protocol'] },
alg: { value: key_data_params['alg'] },
pubKey: { value: key_data_params['public_key'] }
}
end
def create_statuses_hash(domain_params)
ret = []
domain_params[:statuses_attributes].each do |_k, v|
next if v['code'].blank?
ret << {
status: { value: v['description'], attrs: { s: v['code'] } }
}
end
ret
end
end
end
end

View file

@ -0,0 +1,41 @@
module Depp
class Keyrelay
attr_accessor :current_user, :epp_xml
def initialize(args = {})
self.current_user = args[:current_user]
self.epp_xml = EppXml::Keyrelay.new(cl_trid_prefix: current_user.tag)
end
def keyrelay(params) # rubocop:disable Metrics/MethodLength
custom_params = {}
if params[:legal_document].present?
type = params[:legal_document].original_filename.split('.').last.downcase
custom_params = {
_anonymus: [
legalDocument: { value: Base64.encode64(params[:legal_document].read), attrs: { type: type } }
]
}
end
xml = epp_xml.keyrelay({
name: { value: params['domain_name'] },
keyData: {
flags: { value: params['key_data_flags'] },
protocol: { value: params['key_data_protocol'] },
alg: { value: params['key_data_alg'] },
pubKey: { value: params['key_data_public_key'] }
},
authInfo: {
pw: { value: params['password'] }
},
expiry: {
relative: { value: params['expiry_relative'] },
absolute: { value: params['expiry_absolute'] }
}
}, custom_params)
current_user.request(xml)
end
end
end

View file

@ -0,0 +1,92 @@
module Depp
class User
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :tag, :password, :pki
validates :tag, :password, presence: true
validate :validate_existance_in_server
def initialize(args = {})
args.each { |k, v| send(k.to_s + '=', v) }
end
def server
client_cert = File.read(ENV['cert_path'])
client_key = File.read(ENV['key_path'])
port = Rails.env.test? ? 701 : ENV['epp_port']
@server_cache ||= Epp::Server.new({
server: ENV['epp_hostname'],
tag: tag,
password: password,
port: port,
cert: OpenSSL::X509::Certificate.new(client_cert),
key: OpenSSL::PKey::RSA.new(client_key)
})
end
def request(xml)
Nokogiri::XML(server.request(xml)).remove_namespaces!
end
def repp_request(path, params = {})
client_cert = File.read(ENV['cert_path'])
client_key = File.read(ENV['key_path'])
uri = URI.parse("#{ENV['repp_url']}#{path}")
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req.basic_auth tag, password
res = Net::HTTP.start(uri.hostname, uri.port,
use_ssl: (uri.scheme == 'https'),
verify_mode: OpenSSL::SSL::VERIFY_NONE,
cert: OpenSSL::X509::Certificate.new(client_cert),
key: OpenSSL::PKey::RSA.new(client_key)
) do |http|
http.request(req)
end
ret = OpenStruct.new(code: res.code)
ret.parsed_body = JSON.parse(res.body) if res.body.present?
if ret.parsed_body && ret.parsed_body['error']
ret.message = ret.parsed_body['error']
else
ret.message = res.message
end
ret
end
private
def validate_existance_in_server
return if errors.any?
res = server.open_connection
unless Nokogiri::XML(res).css('greeting')
errors.add(:base, :failed_to_open_connection_to_epp_server)
server.close_connection # just in case
return
end
ex = EppXml::Session.new(cl_trid_prefix: tag)
xml = ex.login(clID: { value: tag }, pw: { value: password })
res = server.send_request(xml)
if Nokogiri::XML(res).css('result').first['code'] != '1000'
errors.add(:base, :authorization_error)
end
server.close_connection
rescue OpenSSL::SSL::SSLError
errors.add(:base, :invalid_cert)
end
end
end

View file

@ -0,0 +1,24 @@
= form_for(@contact, html: {class: 'form-horizontal js-contact-form'}) do |f|
= render 'depp/shared/error_messages', f: f
= f.hidden_field :id
= f.hidden_field :password
.row
.col-md-12
= render 'depp/contacts/form_partials/general', f: f
.row
.col-md-12
= render 'depp/contacts/form_partials/address', f: f
- if !@contact.persisted?
.row
.col-md-12
= render 'depp/contacts/form_partials/code', f: f
.row
.col-md-12
= render 'depp/contacts/form_partials/legal_document', f: f
.row
.col-md-12.text-right
- if @contact.persisted?
= button_tag(t(:save), class: 'btn btn-primary')
- else
= button_tag(t(:create), class: 'btn btn-primary')

View file

@ -0,0 +1,33 @@
= render 'depp/shared/title', name: t(:contact_info)
%hr
.row
.col-md-12
= form_tag check_contacts_path, class: 'form-horizontal', method: :get do
.col-md-11
.form-group
= text_field_tag :contacts, params[:contacts], class: 'form-control', autocomplete: 'off'
.col-md-1.text-right.text-center-xs
.form-group
.col-md-offset-2.col-md-10
%button.btn.btn-primary
&nbsp;
%span.glyphicon.glyphicon-search
&nbsp;
- if @contacts
%hr
.row
.col-md-12
.table-responsive
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
%th= t('id')
%th= t('value')
%tbody
- @contacts.each do |contact|
%tr
%td= contact[:id]
%td= contact[:reason]

View file

@ -0,0 +1,18 @@
- if @contact.persisted?
= render 'depp/shared/title', name: "#{t(:delete)}: #{@contact.name}"
= form_for(@contact, class: 'form-horizontal', multipart: true, method: :delete) do |f|
= render 'depp/shared/error_messages', f: f
= f.hidden_field :id
= f.hidden_field :password
.row
.col-md-12
= render 'depp/contacts/form_partials/legal_document', f: f
%hr
.row
.col-md-12.text-right
= button_tag t(:delete), class: 'btn btn-danger'
- else
%h2= "#{t(:delete)}: #{t(:not_found)}"

View file

@ -0,0 +1,3 @@
= render 'depp/shared/title', name: "#{t(:edit)}: #{@contact.name}"
= render 'form'

View file

@ -0,0 +1,33 @@
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:address)
.panel-body
.form-group
.col-md-2.control-label
= f.label :street, t(:street) + '*'
.col-md-10
= f.text_field :street, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :city, t(:city) + '*'
.col-md-10
= f.text_field :city, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :zip, t(:zip) + '*'
.col-md-10
= f.text_field :zip, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :state, t(:state)
.col-md-10
= f.text_field :state, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :country_code, t(:country) + '*'
.col-md-10
= f.select(:country_code, SortedCountry.all_options(f.object.country_code))

View file

@ -0,0 +1,9 @@
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:code)
.panel-body
.form-group
.col-md-2.control-label
= f.label :code
.col-md-10
= f.text_field :code, class: 'form-control'

View file

@ -0,0 +1,41 @@
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('contact_disclosure')
.panel-body
.form-group
= label_tag :contact_disclose_flag, t('flag_type'), class: 'col-md-2 control-label'
.col-md-10
=# check_box_tag('contact[disclose][sv_policy]', @contact_params[:disclose][:sv_policy], class: 'form-control')
= select_tag('contact[disclose][flag]', options_for_select(Depp::Contact::DISCLOSURE_TYPES) )
.panel-body
.form-group
= label_tag :contact_disclose_name, t('name'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][name]')
.form-group
= label_tag :contact_disclose_email, t('email'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][email]')
.form-group
= label_tag :contact_disclose_org_name, t('org_name'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][org_name]')
.form-group
= label_tag :contact_disclose_address, t('address'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][address]')
.form-group
= label_tag :contact_disclose_voice, t('voice'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][voice]')
.form-group
= label_tag :contact_disclose_fax, t('fax'), class: 'col-md-2 control-label'
.col-md-10
= check_box_tag('contact[disclose][fax]')

View file

@ -0,0 +1,50 @@
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:ident)
.panel-body
.form-group
.col-md-2.control-label
= f.label :ident_country_code, t(:country) + '*'
.col-md-10
= f.select(:ident_country_code, SortedCountry.all_options(f.object.ident_country_code), {},
class: 'js-ident-country-code')
.form-group
.col-md-2.control-label
= f.label :ident_type, t(:type) + '*'
.col-md-10
= f.select(:ident_type, Depp::Contact::SELECTION_TYPES, { selected: f.object.ident_type },
class: 'js-ident-type')
.form-group
.col-md-2.control-label
= f.label :ident, t(:ident) + '*'
.col-md-10
= f.text_field :ident, class: 'form-control'
- tip_visibility = f.object.ident_type == 'birthday' ? '' : 'display: none'
.js-ident-tip{ style: tip_visibility }
= t(:birthday_format)
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:general)
.panel-body
.form-group
.col-md-2.control-label
= f.label :name, t(:name) + '*'
.col-md-10
= f.text_field :name, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :email, t(:email) + '*'
.col-md-10
= f.text_field :email, class: 'form-control'
.form-group
.col-md-2.control-label
= f.label :phone, t(:phone) + '*'
.col-md-10
= f.text_field(:phone, class: 'form-control', placeholder: '+372.12323344')

View file

@ -0,0 +1,12 @@
.form-group
.col-md-10
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:legal_document)
.panel-body
.form-group
.col-md-3.control-label
= f.label :legal_document, t(:legal_document)
.col-md-7
= f.file_field :legal_document, :value => ''

View file

@ -0,0 +1,25 @@
- content_for :actions do
= link_to(t(:new), new_contact_path, class: 'btn btn-primary')
= render 'depp/shared/title', name: t(:contacts)
- if @response
.panel.panel-default
.table-responsive
%table.table.table-hover.table-bordered.table-condensed.domify
%thead
%tr
%th{class: 'col-xs-3'}= t(:name)
%th{class: 'col-xs-3'}= t(:code)
%th{class: 'col-xs-3'}= t(:ident)
%th{class: 'col-xs-3'}= t(:actions)
%tbody
- @contacts.each do |c|
%tr
%td= link_to(c[:name], contact_path(id: c[:code]))
%td= c[:code]
%td= c[:ident]
%td
= link_to(t(:edit), edit_contact_path(c[:code]), class: 'btn btn-primary btn-xs')
= link_to(t(:delete), delete_contact_path(c[:code]), class: 'btn btn-default btn-xs')
= paginate @paginatable_array

View file

@ -0,0 +1,19 @@
= render 'depp/shared/title', name: t(:contacts_info)
.row
.col-md-12
= form_tag contact_path, class: 'form-horizontal', method: :get do
.form-group
= label_tag :contact_id, t('contact_id'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :contact_id, params[:contact_id], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag :password, t('password'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :password, params[:password], class: 'form-control', autocomplete: 'off'
.form-group
.col-md-offset-2.col-md-10
%button.btn.btn-primary
&nbsp;
%span.glyphicon.glyphicon-search
&nbsp;

View file

@ -0,0 +1,3 @@
= render 'depp/shared/title', name: t(:new_contact)
= render 'form'

View file

@ -0,0 +1,23 @@
.panel.panel-default
.panel-heading
%h3.panel-title= t(:address)
.panel-body
%dl.dl-horizontal
- if @contact.org_name.present?
%dt= t(:org_name)
%dd= @contact.org_name
%dt= t(:street)
%dd= @contact.street
%dt= t(:city)
%dd= @contact.city
%dt= t(:zip)
%dd= @contact.zip
%dt= t(:state)
%dd= @contact.state
%dt= t(:country)
%dd= @contact.country_name

View file

@ -0,0 +1,10 @@
- @contact[:disclose].each do |flag, data|
- next if data.empty?
.panel.panel-default
.panel-heading
%h3.panel-title= t("disclosure-#{flag}")
.panel-body
%dl.dl-horizontal
- data.each do |k,v|
%dt= t(k)

View file

@ -0,0 +1,23 @@
.panel.panel-default
.panel-heading
%h3.panel-title= t(:general)
.panel-body
%dl.dl-horizontal
%dt= t(:ident)
%dd= ident_for(@contact)
%br
%dt= t(:email)
%dd= @contact.email
%dt= t(:phone)
%dd= @contact.phone
%br
%dt= t(:contact_code)
%dd= @contact.id
%dt= t(:password)
%dd= @contact.password

View file

@ -0,0 +1,16 @@
.panel.panel-default
.panel-heading
%h3.panel-title= t(:statuses)
.table-responsive
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
%th{class: 'col-xs-6'}= t(:status)
%th{class: 'col-xs-6'}= t(:description)
%tbody
- statuses.each do |s|
%tr
%td= s.first
%td= s.second

View file

@ -0,0 +1,16 @@
- if @contact.id.present?
- content_for :actions do
= link_to(t(:edit), edit_contact_path(@contact.id), class: 'btn btn-primary')
= link_to(t(:delete), delete_contact_path(@contact.id), class: 'btn btn-default')
= render 'depp/shared/title', name: truncate(@contact.name)
.row
.col-md-6= render 'depp/contacts/partials/general'
.col-md-6= render 'depp/contacts/partials/address'
.row
.col-md-12= render 'depp/contacts/partials/statuses', statuses: @contact.statuses
- else
.row
.col-sm-6
%h1= t(:not_found)

View file

@ -0,0 +1,10 @@
= form_tag check_domains_path, class: 'form-horizontal', method: :get do
.col-md-11
.form-group
= text_field_tag :domain_name, params[:domain_name], class: 'form-control', placeholder: t('domain_name'), autocomplete: 'off'
.col-md-1.text-right.text-center-xs
.form-group
%button.btn.btn-primary
&nbsp;
%span.glyphicon.glyphicon-search
&nbsp;

View file

@ -0,0 +1,41 @@
- path = (params[:domain_name]) ? update_domains_path : domains_path
= form_tag(path, class: 'form-horizontal', multipart: true) do
.row
.col-md-12
/ Nav tabs
%ul.nav.nav-tabs{:role => "tablist", id: 'tabs'}
%li.active
%a{"data-toggle" => "tab", :href => "#general-tab", :role => "tab"}= t('general')
- if params['domain_name']
%li
%a{"data-toggle" => "tab", :href => "#statuses-tab", :role => "tab"}= t('statuses')
/ Tab panes
.tab-content
#general-tab.tab-pane.active
= render 'depp/domains/form_partials/general'
= render 'depp/domains/form_partials/contacts'
%hr
= render 'depp/domains/form_partials/nameservers'
%hr
= render 'depp/domains/form_partials/dnskeys'
- if params['domain_name']
#statuses-tab.tab-pane
= render 'depp/domains/form_partials/statuses'
.panel.panel-default
.panel-heading.clearfix
.pull-left= t(:legal_document)
.panel-body
.form-group
= label_tag 'domain[legal_document]', t('legal_document'),class: 'col-md-3 control-label'
.col-md-9
= file_field_tag 'domain[legal_document]'
.row
.col-md-12.text-right
= button_tag(t('shared.save'), class: 'btn btn-primary')
:javascript
$(function () {
$('#tabs a:first').tab('show')
})

View file

@ -0,0 +1,25 @@
= render 'depp/shared/title', name: t(:check_domain)
.row
.col-md-12
= render 'check_form'
%hr
.row
.col-md-12
.panel.panel-default
.panel-heading
%h3.panel-title= t('result')
.panel-body
%dl.dl-horizontal
%dt= t('name')
%dd= @data.css('name').text
- name = @data.css('name').first
%dt= t('available')
%dd= name['avail']
- if @data.css('reason').text.present?
%dt= t('reason')
%dd= @data.css('reason').text

View file

@ -0,0 +1,5 @@
= render 'depp/shared/title', name: t(:check_domain)
.row
.col-md-12
= render 'check_form'

View file

@ -0,0 +1,17 @@
= render 'depp/shared/title', name: "#{t(:delete)}: #{params[:domain_name]}"
= form_tag(destroy_domains_path, class: 'form-horizontal', multipart: true, method: :delete) do
.panel.panel-default
.panel-heading.clearfix
= t(:legal_document)
.panel-body
.form-group
.col-md-4.control-label
= label_tag 'domain[legal_document]', t('legal_document')
.col-md-6
= file_field_tag 'domain[legal_document]'
= hidden_field_tag 'domain[name]', params[:domain_name]
%hr
.row
.col-md-12.text-right
= button_tag t('delete'), class: 'btn btn-danger'

View file

@ -0,0 +1,4 @@
= render 'depp/shared/title', name: "#{t(:edit)}: #{params[:domain_name]}"
%hr
= render 'form'

View file

@ -0,0 +1,24 @@
#domain-contacts
- @domain_params['contacts_attributes'].each do |k, v|
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('contact')
.pull-right
= link_to(t('add_another'), '#', class: 'btn btn-primary btn-xs add-domain-contact')
= link_to(t('delete'), '#', class: 'btn btn-danger btn-xs destroy')
.panel-body
.form-group
= label_tag "domain_contacts_attributes_#{k}_type", t('contact_type'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[contacts_attributes][#{k}][type]", options_for_select(['admin', 'tech'], v['type']), {class: 'form-control'}
.form-group
= label_tag "domain_contacts_attributes_#{k}_code", t('contact_code'), class: 'col-md-2 control-label'
.col-md-10.has-feedback
= text_field_tag("domain[contacts_attributes][#{k}][code]", v['code'], class: 'form-control', placeholder: t('contact_code'), autocomplete: 'off')
:coffee
$("#domain-contacts").nestedAttributes
bindAddTo: $(".add-domain-contact")
afterAdd: (item) ->
item.find('select').each (k, v) ->
$(v).val($(v).find('option:first-child').val())

View file

@ -0,0 +1,57 @@
#dnskeys
- @domain_params['dnskeys_attributes'].each do |k, v|
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('dnskey')
.pull-right
= link_to(t('add_another'), '#', class: 'btn btn-primary btn-xs add-dnskey')
= link_to(t('delete'), '#', class: 'btn btn-danger btn-xs destroy')
.panel-body
- if ENV['show_ds_data_fields'] == 'true'
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_ds_key_tag", t('ds_key_tag'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[dnskeys_attributes][#{k}][ds_key_tag]", v['ds_key_tag'], {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_ds_alg", t('ds_algorithm'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[dnskeys_attributes][#{k}][ds_alg]", options_for_select(Depp::Dnskey::ALGORITHMS, v['ds_alg']), {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_ds_digest_type", t('ds_digest_type'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[dnskeys_attributes][#{k}][ds_digest_type]", options_for_select(Depp::Dnskey::DS_DIGEST_TYPES, v['ds_digest_type']), {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_ds_digest", t('ds_digest'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[dnskeys_attributes][#{k}][ds_digest]", v['ds_digest'], {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_flags", t('flags'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[dnskeys_attributes][#{k}][flags]", options_for_select(Depp::Dnskey::FLAGS, v['flags']), {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_protocol", t('protocol'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[dnskeys_attributes][#{k}][protocol]", options_for_select(Depp::Dnskey::PROTOCOLS, v['protocol']), {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_alg", t('alg'), class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[dnskeys_attributes][#{k}][alg]", options_for_select(Depp::Dnskey::ALGORITHMS, v['alg']), {class: 'form-control'}
.form-group
= label_tag "domain_dnskeys_attributes_#{k}_public_key", t('public_key'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[dnskeys_attributes][#{k}][public_key]", v['public_key'], class: 'form-control'
:coffee
$("#dnskeys").nestedAttributes
bindAddTo: $(".add-dnskey")
afterAdd: (item) ->
item.find('select').each (k, v) ->
$(v).val($(v).find('option:first-child').val())

View file

@ -0,0 +1,19 @@
.general-tab.panel.panel-default
.form-group
= label_tag :domain_name, t('name'), class: 'col-md-2 control-label'
.col-md-10
- readonly = params[:domain_name] ? true : false
= text_field_tag('domain[name]', @domain_params[:name], class: 'form-control', readonly: readonly)
- unless params[:domain_name]
.form-group
= label_tag :domain_period, t('period'), class: 'col-md-2 control-label'
.col-md-5
= text_field_tag('domain[period]', @domain_params[:period], class: 'form-control')
.col-md-5
= select_tag 'domain[period_unit]', options_for_select(['y', 'm', 'd'], @domain_params[:period_unit]), { class: 'form-control' }
.form-group
= label_tag :domain_registrant, t('registrant'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag('domain[registrant]', @domain_params[:registrant], class: 'form-control', placeholder: t('contact_code'), autocomplete: 'off')

View file

@ -0,0 +1,24 @@
#nameservers
- @domain_params['nameservers_attributes'].each do |k, v|
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('nameserver')
.pull-right
= link_to(t('add_another'), '#', class: 'btn btn-primary btn-xs add-nameserver')
= link_to(t('delete'), '#', class: 'btn btn-danger btn-xs destroy')
.panel-body
.form-group
= label_tag "domain_nameservers_attributes_#{k}_hostname", t('hostname'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[nameservers_attributes][#{k}][hostname]", v['hostname'], class: 'form-control'
.form-group
= label_tag "domain_nameservers_attributes_#{k}_ipv4", t('ipv4'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[nameservers_attributes][#{k}][ipv4]", v['ipv4'], class: 'form-control'
.form-group
= label_tag "domain_nameservers_attributes_#{k}_ipv6", t('ipv6'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[nameservers_attributes][#{k}][ipv6]", v['ipv6'], class: 'form-control'
:coffee
$("#nameservers").nestedAttributes
bindAddTo: $(".add-nameserver")

View file

@ -0,0 +1,24 @@
#domain-statuses
- @domain_params['statuses_attributes'].each do |k, v|
%br
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('status')
.pull-right
= link_to(t('add_another'), '#', class: 'btn btn-primary btn-xs add-domain-status')
= link_to(t('delete'), '#', class: 'btn btn-danger btn-xs destroy')
.panel-body
.form-group
= label_tag "domain_statuses_attributes_#{k}_code", t('code'),class: 'col-md-2 control-label'
.col-md-10
= select_tag "domain[statuses_attributes][#{k}][code]", options_for_select(Depp::Domain::DOMAIN_STATUSES, v['code']), {class: 'form-control', prompt: ''}
.form-group
= label_tag "domain_statuses_attributes_#{k}_description", t('description'),class: 'col-md-2 control-label'
.col-md-10
= text_field_tag "domain[statuses_attributes][#{k}][description]", v['description'], class: 'form-control', autocomplete: 'off'
:coffee
$("#domain-statuses").nestedAttributes
bindAddTo: $(".add-domain-status")
afterAdd: (item) ->
item.find('select').each (k, v) ->
$(v).val($(v).find('option:first-child').val())

View file

@ -0,0 +1,47 @@
- content_for :actions do
= link_to(t(:new), new_domain_path, class: 'btn btn-primary')
= link_to(t(:transfer), transfer_domains_path, class: 'btn btn-default')
= link_to(t(:keyrelay), keyrelay_path, class: 'btn btn-default')
= render 'depp/shared/title', name: t(:domains)
.row
.col-md-12{style: 'margin-bottom: -15px;'}
= form_tag info_domains_path, class: 'form-horizontal', method: :get do
.col-md-11
.form-group
= text_field_tag :domain_name, params[:domain_name], class: 'form-control', placeholder: t('domain_name'), autocomplete: 'off', autofocus: true
.col-md-1.text-right.text-center-xs
.form-group
%button.btn.btn-primary
&nbsp;
%span.glyphicon.glyphicon-search
&nbsp;
%hr
- if @response
.panel.panel-default
.table-responsive
%table.table.table-hover.table-bordered.table-condensed.domify
%thead
%tr
%th{class: 'col-xs-3'}= t(:name)
%th{class: 'col-xs-6'}= t(:valid)
%th{class: 'col-xs-3'}= t(:actions)
%tbody
- @response['domains'].each do |x|
%tr
%td= link_to(x['name'], info_domains_path(domain_name: x['name']))
%td
= Time.parse(x['valid_from']).try(:to_date)
\-
= Time.parse(x['valid_to']).try(:to_date)
%td
= link_to(t(:edit), edit_domains_path(domain_name: x['name']),
class: 'btn btn-primary btn-xs')
= link_to(t(:renew), renew_domains_path(domain_name: x['name']),
class: 'btn btn-default btn-xs')
= link_to(t(:delete), delete_domains_path(domain_name: x['name']),
class: 'btn btn-default btn-xs')
= paginate @paginatable_array

View file

@ -0,0 +1,26 @@
- content_for :actions do
= link_to(t(:edit), edit_domains_path(domain_name: params[:domain_name]),
class: 'btn btn-primary')
= link_to(t(:renew), renew_domains_path(domain_name: params[:domain_name]),
class: 'btn btn-default')
= link_to(t(:delete), delete_domains_path(domain_name: params[:domain_name]),
class: 'btn btn-default')
= render 'depp/shared/title', name: truncate(@data.css('name').text)
.row
.col-sm-12
- if @data.css('result').first['code'] == '1000'
.row
.col-md-12= render 'depp/domains/partials/general'
.row
.col-md-12= render 'depp/domains/partials/contacts'
.row
.col-md-12= render 'depp/domains/partials/statuses'
.row
.col-md-12= render 'depp/domains/partials/nameservers'
.row
.col-md-12= render 'depp/domains/partials/dnskeys'
- else
.row
.col-sm-6
%h1= t(:not_found)

View file

@ -0,0 +1,3 @@
= render 'depp/shared/title', name: t(:new_domain)
= render 'form'

View file

@ -0,0 +1,15 @@
#tech_contacts.panel.panel-default
.panel-heading.clearfix
%h3.panel-title= t(:contacts)
.table-responsive
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
%th{class: 'col-xs-4'}= t('type')
%th{class: 'col-xs-8'}= t('code')
%tbody
- @data.css('contact').each do |x|
%tr
%td= x['type']
%td= x.text

View file

@ -0,0 +1,33 @@
.panel.panel-default
.panel-heading
%h3.panel-title= t('dnskeys')
.panel-body{style: 'word-wrap: break-word;'}
- @data.css('dsData').each do |x|
%dl.dl-horizontal
- if x.css('keyTag').text.present?
%dt= t('ds_key_tag')
%dd= x.css('keyTag').text
- if x.css('alg').first.text.present?
%dt= t('ds_algorithm')
%dd= x.css('alg').first.text
- if x.css('digestType').text.present?
%dt= t('ds_digest_type')
%dd= x.css('digestType').text
- if x.css('digest').text.present?
%dt= t('ds_digest')
%dd= x.css('digest').text
%dt= t('flag')
%dd= x.css('flags').text
%dt= t('protocol')
%dd= x.css('protocol').text
%dt= t('algorithm')
%dd= x.css('keyData > alg').text
%dt= t('public_key')
%dd= x.css('pubKey').text

View file

@ -0,0 +1,22 @@
.panel.panel-default
.panel-heading
%h3.panel-title= t(:general)
.panel-body
%dl.dl-horizontal
%dt= t(:password)
%dd= @data.css('pw').text
%dt= t(:registrant)
%dd= @data.css('registrant').text
%dt= t(:registered)
%dd= @data.css('crDate').text
%dt= t(:valid_to)
%dd= @data.css('exDate').text
%dt= t(:created)
%dd= @data.css('crDate').text
%dt= t(:updated)
%dd= @data.css('upDate').text

View file

@ -0,0 +1,17 @@
#nameservers.panel.panel-default
.panel-heading.clearfix
%h3.panel-title= t(:nameservers)
.table-responsive
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
%th{class: 'col-xs-4'}= t('hostname')
%th{class: 'col-xs-4'}= t('ipv4')
%th{class: 'col-xs-4'}= t('ipv6')
%tbody
- @data.css('hostAttr').each do |x|
%tr
%td= x.css('hostName').text
%td= x.css('hostAddr[ip="v4"]').text
%td= x.css('hostAddr[ip="v6"]').text

View file

@ -0,0 +1,14 @@
#domain_statuses.panel.panel-default
.panel-heading.clearfix
%h3.panel-title= t(:statuses)
.table-responsive
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
%th{class: 'col-xs-6'}= t('status')
%th{class: 'col-xs-6'}= t('description')
%tbody
- @data.css('status').each do |x|
%tr
%td= x['s']
%td= x.text

View file

@ -0,0 +1,14 @@
= render 'depp/shared/title', name: t(:renew_domain)
.row
.col-md-12
.panel.panel-default
.panel-heading
%h3.panel-title= t('result')
.panel-body
%dl.dl-horizontal
%dt= t('domain_name')
%dd= @data.css('name').text
%dt= t('valid_to')
%dd= @data.css('exDate').text

View file

@ -0,0 +1,22 @@
= render 'depp/shared/title', name: t(:renew_domain)
.row
.col-md-12
= form_tag renew_domains_path, class: 'form-horizontal', method: :get do
.form-group
= label_tag :domain_name, t('name'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :domain_name, params[:domain_name], class: 'form-control', placeholder: t('domain_name'), autocomplete: 'off'
.form-group
= label_tag :cur_exp_date, t('cur_exp_date'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :cur_exp_date, params[:cur_exp_date], class: 'form-control', placeholder: 'yyyy-mm-dd', autocomplete: 'off'
.form-group
= label_tag :domain_period, t('period'), class: 'col-md-2 control-label'
.col-md-5
= text_field_tag(:period, params[:period], class: 'form-control')
.col-md-5
= select_tag :period_unit, options_for_select(['y', 'm', 'd'], params[:period_unit]), { class: 'form-control' }
.form-group
.col-md-offset-2.col-md-10
%button.btn.btn-primary= t('renew')

View file

@ -0,0 +1,16 @@
= render 'depp/shared/title', name: t(:transfer_domain)
.row
.col-md-12
.panel.panel-default
.panel-heading
%h3.panel-title= t('result')
.panel-body
%dl.dl-horizontal
%dt= t('domain_name')
%dd= @data.css('name').text
- @data.css('trnData').children.each do |x|
- next if x.blank?
%dt= t(x.name)
%dd= x.text

View file

@ -0,0 +1,22 @@
= render 'depp/shared/title', name: t(:transfer_domain)
.row
.col-md-12
= form_tag transfer_domains_path, class: 'form-horizontal', method: :post, multipart: true do
.form-group
= label_tag :domain_name, t('name'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :domain_name, params[:domain_name], class: 'form-control', placeholder: t('domain_name'), autocomplete: 'off', autofocus: true
.form-group
= label_tag :password, t('password'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :password, params[:password], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag 'legal_document', t('legal_document'),class: 'col-md-2 control-label'
.col-md-10
= file_field_tag 'legal_document'
.form-group
.col-md-offset-2.col-md-10
%button.btn.btn-primary{ name: 'query' }= t('query')
%button.btn.btn-primary{ name: 'approve' }= t('approve')
%button.btn.btn-primary{ name: 'reject' }= t('reject')

View file

@ -0,0 +1,55 @@
.row
.col-sm-12
%h2.text-center-xs= t('keyrelay')
%hr
.row
.col-md-12
= form_tag keyrelay_path, class: 'form-horizontal', method: :post, multipart: true do
.form-group
= label_tag :domain_name, t('domain_name'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :domain_name, params[:domain_name], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag :password, t('password'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :password, params[:password], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag :expiry_relative, t('expiry_relative'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :expiry_relative, params[:expiry_relative], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag :expiry_absolute, t('expiry_absolute'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :expiry_absolute, params[:expiry_absolute], class: 'form-control', autocomplete: 'off'
.form-group
= label_tag :key_data_flags, t('flag'), class: 'col-md-2 control-label'
.col-md-10
= select_tag :key_data_flags, options_for_select(Depp::Dnskey::FLAGS, params['key_data_flags']), {class: 'form-control'}
.form-group
= label_tag :key_data_protocol, t('protocol'), class: 'col-md-2 control-label'
.col-md-10
= select_tag :key_data_protocol, options_for_select(Depp::Dnskey::PROTOCOLS, params['key_data_protocol']), {class: 'form-control'}
.form-group
= label_tag :key_data_alg, t('algorithm'), class: 'col-md-2 control-label'
.col-md-10
= select_tag :key_data_alg, options_for_select(Depp::Dnskey::ALGORITHMS, params['key_data_alg']), {class: 'form-control'}
.form-group
= label_tag :key_data_public_key, t('public_key'), class: 'col-md-2 control-label'
.col-md-10
= text_field_tag :key_data_public_key, params['key_data_public_key'], class: 'form-control'
.form-group
= label_tag :legal_document, t('legal_document'),class: 'col-md-2 control-label'
.col-md-10
= file_field_tag :legal_document
.form-group
.col-md-offset-2.col-md-10
%button.btn.btn-primary= t('upload_key')

View file

@ -0,0 +1,89 @@
- if @data.css('msgQ').any?
- msg_q = @data.css('msgQ').first
.row
.col-sm-12
%h2= t('messages', count: msg_q['count'])
%hr
.row
.col-md-12
.panel.panel-default
.panel-heading.clearfix
.pull-left= t('message_no', id: msg_q['id'])
.pull-right
- if @data.css('panData').any? # this is a keyrelay request
= link_to(t('confirm'), 'javascript: void(0);', class: 'btn btn-primary btn-xs js-keyrelay-confirm')
- if @data.css('trnData trStatus').any? # this is a transfer request
- unless ['serverApproved', 'clientApproved'].include?(@data.css('trStatus').first.text)
= link_to(t('confirm'), 'javascript: void(0);', class: 'btn btn-primary btn-xs js-transfer-confirm')
= link_to(t('dequeue'), poll_path(id: msg_q['id']), method: :delete, class: 'btn btn-primary btn-xs')
.panel-body
%dl.dl-horizontal
%dt= t('message')
%dd= msg_q.css('msg').text
%dt= t('queue_date')
%dd= @data.css('qDate').text
%dl.dl-horizontal
/ keyrelay
- if @data.css('panData').any?
%dt= t('domain_name')
%dd= @data.css('name').text
%dt= t('password')
%dd= @data.css('pw').text
- if @data.css('relative').text.present?
%dt= t('expiry_relative')
%dd= @data.css('relative').text
- if @data.css('absolute').text.present?
%dt= t('expiry_absolute')
%dd= @data.css('absolute').text
%dt paDate
%dd= @data.css('paDate').text
%dt= t('flag')
%dd= @data.css('flags').text
%dt= t('protocol')
%dd= @data.css('protocol').text
%dt= t('algorithm')
%dd= @data.css('alg').text
%dt= t('public_key')
%dd= @data.css('pubKey').text
= form_tag confirm_keyrelay_poll_path, class: 'js-keyrelay-form' do
= hidden_field_tag 'domain[name]', @data.css('name').text
= hidden_field_tag 'domain[dnskeys_attributes][0][flags]', @data.css('flags').text
= hidden_field_tag 'domain[dnskeys_attributes][0][protocol]', @data.css('protocol').text
= hidden_field_tag 'domain[dnskeys_attributes][0][alg]', @data.css('alg').text
= hidden_field_tag 'domain[dnskeys_attributes][0][public_key]', @data.css('pubKey').text
- else
- if @data.css('trnData trStatus').any? # this is a transfer request
= form_tag confirm_transfer_poll_path, class: 'js-transfer-form' do
= hidden_field_tag 'domain[name]', @data.css('name').text
- @data.css('trnData').children.each do |x|
- next if x.blank?
%dt= t(x.name)
%dd= x.text
- else
.row
.col-sm-12
%h2= t('messages', count: 0)
%hr
.row
.col-md-12
%p.bg-info{style: 'padding: 15px;'}= t('you_have_no_new_messages')
:coffee
$(".js-keyrelay-confirm").on "click", ->
$(".js-keyrelay-form").submit()
$(".js-transfer-confirm").on "click", ->
$(".js-transfer-form").submit()

View file

@ -0,0 +1,29 @@
- if @data && @data.css('result')
- @results ||= @data.css('result')
- if @results || flash[:epp_results]
- success_codes = %(1000, 1300, 1301, 200)
- if @results
- @results.each do |x|
- next if success_codes.include?(x['code'])
.row
.col-md-12
%p{class: "alert alert-danger"}
= x.css('msg').text.split('[').first
- if x.css('value').text.present?
= " - #{x.css('value').text}"
%span.pull-right
= "[code: #{x['code']}]"
- if flash[:epp_results]
- flash[:epp_results].each do |x|
- next if success_codes.include?(x['code'])
.row
.col-md-12
%p{class: "alert alert-danger"}
= x['msg'].split('[').first
- if x['value'].present?
= " - #{x['value']}"
%span.pull-right
= "[code: #{x['code']}]"

View file

@ -0,0 +1,5 @@
- if f.object.errors.present?
.alert.alert-warning
%ul
- f.object.errors.messages.each do |message|
%li= message.second.first.split('[').first

View file

@ -0,0 +1,5 @@
- if object.errors.any?
%p.text-danger
- object.errors.each do |attr, err|
= err
%br

View file

@ -0,0 +1,4 @@
- if flash[:notice].present? || flash[:alert].present?
#flash
- type = (flash[:notice]) ? 'bg-success' : 'bg-danger'
.alert{class: type}= flash[:notice] || flash[:alert]

View file

@ -0,0 +1,4 @@
- display = (flash.empty?) ? 'none' : 'block'
#flash{style: "display: #{display};"}
- type = (flash[:notice]) ? 'bg-success' : 'bg-danger'
.alert{class: type}= flash[:notice] || flash[:alert]

View file

@ -0,0 +1,13 @@
- content_for :tabs do
.container.subnav
%ul.nav.nav-tabs.navbar-right
%li{role: :presentation, class: active == :domains ? 'active' : ''}
= link_to t(:all), domains_path
%li{role: :presentation, class: active == :new ? 'active' : ''}
= link_to t(:new), new_domain_path
%li{role: :presentation, class: active == :check ? 'active' : ''}
= link_to t(:check), check_domains_path
%li{role: :presentation, class: active == :transfer ? 'active' : ''}
= link_to t(:transfer), transfer_domains_path
%li{role: :presentation, class: active == :keyrelay ? 'active' : ''}
= link_to t(:keyrelay), keyrelay_path

View file

@ -0,0 +1,9 @@
- content_for :window_title do
%title= name
.row.title-row
.col-sm-6
%h1= name
.col-sm-6
.top-actions
= yield :actions

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<contact:check
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
</contact:check>
</check>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<contact:check
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
<contact:id>sh13</contact:id>
<contact:id>vsdfvq</contact:id>
</contact:check>
</check>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<create>
<contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:postalInfo>
<contact:name>Sillius Soddus</contact:name>
<contact:addr>
<contact:street>123 Example Dr.</contact:street>
<contact:street>Suite 100</contact:street>
<contact:street/>
<contact:city>Megaton</contact:city>
<contact:sp>F3 </contact:sp>
<contact:pc>201-33</contact:pc>
<contact:cc>EE</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+372.1234567</contact:voice>
<contact:email>example@test.example</contact:email>
</contact:create>
</create>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:ident type="bic" cc="EE">
123
</eis:ident>
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<delete>
<contact:delete
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
<contact:authInfo>
<contact:pw>wrong-one</contact:pw>
</contact:authInfo>
</contact:delete>
</delete>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<info>
<contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
<contact:authInfo>
<contact:pw>Aas34fq</contact:pw>
</contact:authInfo>
</contact:info>
</info>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<update>
<contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>sh8013</contact:id>
<contact:chg>
<contact:postalInfo>
<contact:name>John Doe</contact:name>
<contact:addr>
<contact:street>123 Example Dr.</contact:street>
<contact:street>Suite 100</contact:street>
<contact:city>Dulles</contact:city>
<contact:sp>VA</contact:sp>
<contact:pc>20166-6503</contact:pc>
<contact:cc>EE</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+123.7035555555</contact:voice>
<contact:email>jdoe@example.com</contact:email>
</contact:chg>
<contact:authInfo>
<contact:pw>2fooBAR</contact:pw>
</contact:authInfo>
</contact:update>
</update>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<domain:check
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
</domain:check>
</check>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<create>
<domain:create
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
<domain:period unit="y">1</domain:period>
<domain:ns>
<domain:hostAttr>
<domain:hostName>ns1.example.net</domain:hostName>
</domain:hostAttr>
<domain:hostAttr>
<domain:hostName>ns2.example.net</domain:hostName>
<domain:hostAddr ip="v4">192.0.2.2</domain:hostAddr>
<domain:hostAddr ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
</domain:hostAttr>
</domain:ns>
<domain:registrant>jd1234</domain:registrant>
<domain:contact type="admin">sh8013</domain:contact>
<domain:contact type="tech">sh8013</domain:contact>
<domain:contact type="tech">sh801333</domain:contact>
</domain:create>
</create>
<extension>
<secDNS:create xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
<secDNS:keyData>
<secDNS:flags>257</secDNS:flags>
<secDNS:protocol>3</secDNS:protocol>
<secDNS:alg>8</secDNS:alg>
<secDNS:pubKey>AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8</secDNS:pubKey>
</secDNS:keyData>
</secDNS:create>
</extension>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<delete>
<domain:delete
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
</domain:delete>
</delete>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<info>
<domain:info
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name hosts="all">example.ee</domain:name>
<domain:authInfo>
<domain:pw>2fooBAR</domain:pw>
</domain:authInfo>
</domain:info>
</info>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<renew>
<domain:renew
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
<domain:curExpDate>2014-08-07</domain:curExpDate>
<domain:period unit="y">1</domain:period>
</domain:renew>
</renew>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<transfer op="query">
<domain:transfer
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
<domain:authInfo>
<domain:pw roid="JD1234-REP">2BARfoo</domain:pw>
</domain:authInfo>
</domain:transfer>
</transfer>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<update>
<domain:update
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.ee</domain:name>
<domain:chg>
<domain:registrant>mak21</domain:registrant>
</domain:chg>
<domain:add>
<domain:ns>
<domain:hostObj>ns1.example.com</domain:hostObj>
<domain:hostObj>ns2.example.com</domain:hostObj>
</domain:ns>
<domain:contact type="tech">mak21</domain:contact>
<domain:status s="clientHold"
lang="en">Payment overdue.</domain:status>
<domain:status s="clientUpdateProhibited"/>
</domain:add>
<domain:rem>
<domain:ns>
<domain:hostObj>ns1.example.com</domain:hostObj>
</domain:ns>
<domain:contact type="tech">mak21</domain:contact>
<domain:status s="clientHold"/>
</domain:rem>
</domain:update>
</update>
<extension>
<secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
<secDNS:rem>
<secDNS:keyData>
<secDNS:pubKey>700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f</secDNS:pubKey>
</secDNS:keyData>
</secDNS:rem>
</secDNS:update>
</extension>
<extension>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
</eis:legalDocument>
</eis:extdata>
</extension>
<clTRID>ABC-12345</clTRID>
</command>
</epp>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext="urn:ietf:params:xml:ns:keyrelay-1.0">
<command>
<ext:keyrelay>
<ext:name>example6.ee</ext:name>
<ext:keyData>
<secDNS:flags>256</secDNS:flags>
<secDNS:protocol>3</secDNS:protocol>
<secDNS:alg>8</secDNS:alg>
<secDNS:pubKey>cmlraXN0aGViZXN0</secDNS:pubKey>
</ext:keyData>
<ext:authInfo>
<domain:pw>7521f360ae480e67c3096e4c046beb84</domain:pw>
</ext:authInfo>
<ext:expiry>
<ext:relative>P1D</ext:relative>
</ext:expiry>
</ext:keyrelay>
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
<eis:legalDocument type="pdf">JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==</eis:legalDocument>
</eis:extdata>
<ext:clTRID>1422542244</ext:clTRID>
</command>
</epp>

View file

@ -0,0 +1,66 @@
.row
.col-md-8
= form_tag(xml_console_path) do
.form-group
= text_area_tag(:payload, params[:payload], class: 'form-control', rows: 15, style: 'font-family:monospace; font-size: 11px;')
= button_tag t('send_epp_request'), class: 'btn btn-default'
.col-md-4
%h4 Domain
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'create'}}
Create
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'update'}}
Update
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'info'}}
Info
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'renew'}}
Renew
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'check'}}
Check
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'transfer'}}
Transfer
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'delete'}}
Delete
%h4 Keyrelay
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'keyrelay', epp_action: 'keyrelay'}}
Keyrelay
%h4 Contact
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'create'}}
Create
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'check'}}
Check
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'check_multiple'}}
Check(multiple)
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'delete'}}
Delete
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'info'}}
Info
,
%a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'contact', epp_action: 'update_chg'}}
Update(chg)
- if @result
%hr
.row
.col-md-12
= preserve do
= CodeRay.scan(@result.to_s.force_encoding("UTF-8"), :xml).div().html_safe
:javascript
$('.js-load-xml').click(function() {
$.get('xml_console/load_xml', {obj: $(this).data('obj'), epp_action: $(this).data('epp-action')}, function(data) {
$('textarea[name="payload"]').html(data);
});
});

View file

@ -0,0 +1,42 @@
%html{lang: I18n.locale.to_s}
%head
%meta{charset: "utf-8"}/
%meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}/
%meta{content: "width=device-width, initial-scale=1", name: "viewport"}/
%meta{content: "EPP-Client", name: "description"}/
%meta{content: "Gitlab LTD", name: "author"}/
= csrf_meta_tags
= stylesheet_link_tag 'depp/application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'depp/application', 'data-turbolinks-track' => true
= favicon_link_tag 'favicon.ico'
= yield :window_title
%body{:style => env_style}
/ Static navbar
.navbar.navbar-default.navbar-static-top{role: "navigation"}
.container
.navbar-header
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
%span.sr-only Toggle navigation
%span.icon-bar
%span.icon-bar
%span.icon-bar
= link_to 'EPP Client', root_path, class: 'navbar-brand'
.navbar-collapse.collapse
%ul.nav.navbar-nav
- active_class = %w(domains check renew tranfer keyrelays).include?(params[:controller]) ? 'active' :nil
%li{class: active_class}= link_to t(:domains), domains_path
- active_class = ['contacts'].include?(params[:controller]) ? 'active' :nil
%li{class: active_class}= link_to t(:contacts), contacts_path
- active_class = ['xml_consoles'].include?(params[:controller]) ? 'active' :nil
%li{class: active_class}= link_to t(:xml_console), xml_console_path
%ul.nav.navbar-nav.navbar-right
%li= link_to t(:log_out, user: depp_current_user.tag), '/logout'
/ /.nav-collapse
.container
= render 'depp/shared/flash'
= render 'depp/shared/epp_results'
= yield

12
vendor/gems/depp/bin/rails vendored Executable file
View file

@ -0,0 +1,12 @@
#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
ENGINE_ROOT = File.expand_path('../..', __FILE__)
ENGINE_PATH = File.expand_path('../../lib/depp/engine', __FILE__)
# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
require 'rails/all'
require 'rails/engine/commands'

126
vendor/gems/depp/config/locales/en.yml vendored Normal file
View file

@ -0,0 +1,126 @@
en:
activemodel:
errors:
models:
'depp/user':
attributes:
base:
failed_to_open_connection_to_epp_server: 'Failed to open connection to EPP server!'
authorization_error: 'Authorization error'
invalid_cert: 'Invalid certificate'
tag:
blank: "Username can't be blank"
password:
blank: "Password can't be blank"
username: 'Username'
password: 'Password'
log_in: 'Log in'
log_out: 'Log out (%{user})'
domain_name: 'Domain name'
domains: 'Domains'
register: 'Register'
check: 'Check'
contacts: 'Contacts'
domain_info: 'Domain info'
domain_details: 'Domain details'
xml_console: 'XML Console'
info: 'Info'
register: 'Register'
send_epp_request: 'Send EPP Request'
registrant: 'Registrant'
created_at: 'Created at'
valid_to: 'Valid to'
updated_at: 'Updated at'
tech_contacts: 'Tech contacts'
name: 'Name'
type: 'Type'
code: 'Code'
nameservers: 'Nameservers'
hostname: 'Hostname'
ipv4: 'IPv4'
ipv6: 'IPv6'
dnskeys: 'DNS Keys'
flag: 'Flag'
protocol: 'Protocol'
algorithm: 'Algorithm'
public_key: 'Public key'
ds_key_tag: 'DS key tag'
ds_algorithm: 'DS algorithm'
ds_digest_type: 'DS digest type'
ds_digest: 'DS digest'
statuses: 'Statuses'
status: 'Status'
description: 'Description'
check_domain: 'Check domain'
result: 'Result'
available: 'Available'
reason: 'Reason'
contact_code: 'Code'
add_another: 'Add another'
delete: 'Delete'
contact_type: 'Contact type'
edit_domain: 'Edit domain'
new_domain: 'New domain'
edit: 'Edit'
delete: 'Delete'
are_you_sure: 'Are you sure?'
renew: 'Renew'
renew_domain: 'Renew domain'
cur_exp_date: 'curExpDate'
transfer: 'Transfer'
query: 'Query'
transfer_domain: 'Transfer domain'
reject: 'Reject'
approve: 'Approve'
contact_info: 'Contact info'
contact_id: 'Contact ID'
address: 'Address'
street: 'Street'
city: 'City'
messages: 'Messages (%{count})'
message: 'Message'
message_no: 'Message #%{id}'
queue_date: 'Queue date'
messages_in_queue: 'Messages in queue'
you_have_no_new_messages: 'You have no new messages'
message_id: 'Message ID'
trStatus: 'Status'
reID: 'Transfer from'
reDate: 'Transfer requested at'
acID: 'Transfer to'
acDate: 'Accept date'
exDate: 'Valid to'
dequeue: 'Dequeue'
are_you_sure_you_want_to_delete_domain: 'Are you sure you want to delete domain %{domain}?'
keyrelay: 'Keyrelay'
expiry_relative: 'Expiry relative'
expiry_absolute: 'Expiry absolute'
upload_key: 'Upload key'
legal_document: 'Legal document'
delete_domain: 'Delete domain'
index: 'Index'
ident: 'Ident'
email: 'E-mail'
value: 'Value'
phone: 'Phone'
org_name: Org name
ident_type: Ident code
country: Country
period: Period
birthday_format: 'Insert birthday in format: YYYY-MM-DD'
your_session_has_timed_out: 'Your session has timed out. Please log in again.'
certificate_loaded: 'Certificate (already loaded)'
private_key_loaded: 'Private key (already loaded)'
credentials: 'Credentials'
pki: 'PKI'
zip: Postcode
contact_details: Contact Details
general: General
id_card: 'ID Card'
m_id: 'M-ID'
destroyed: It was successfully deleted.
not_found: Not found
no_connection_to_registry: Connection issue to the registry server! Please try again later.
domain_not_found: 'Domain was not found'
new_contact: 'New contact'

View file

@ -0,0 +1,4 @@
et:
username: 'Kasutajanimi'
password: 'Parool'
log_in: 'Logi sisse'

Some files were not shown because too many files have changed in this diff Show more