mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 17:37:17 +02:00
111297422-blocked_domains
This commit is contained in:
parent
4095450fb8
commit
11d543d967
5 changed files with 465 additions and 137 deletions
|
@ -2,20 +2,45 @@ class Admin::BlockedDomainsController < AdminController
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
def index
|
def index
|
||||||
bd = BlockedDomain.first_or_initialize
|
bd = BlockedDomain.pluck(:name)
|
||||||
@blocked_domains = bd.names.join("\n")
|
if bd
|
||||||
|
@blocked_domains = bd.to_yaml.gsub("---\n", '').gsub("-", '').gsub(/\.\.\..?\n/, '')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
names = params[:blocked_domains].split("\r\n").map(&:strip)
|
@blocked_domains = params[:blocked_domains]
|
||||||
|
|
||||||
bd = BlockedDomain.first_or_create
|
begin
|
||||||
|
params[:blocked_domains] = "---\n" if params[:blocked_domains].blank?
|
||||||
|
names = YAML.load(params[:blocked_domains])
|
||||||
|
fail if names == false
|
||||||
|
rescue
|
||||||
|
flash.now[:alert] = I18n.t('invalid_yaml')
|
||||||
|
logger.warn 'Invalid YAML'
|
||||||
|
render :index and return
|
||||||
|
end
|
||||||
|
|
||||||
if bd.update(names: names)
|
result = true
|
||||||
|
BlockedDomain.transaction do
|
||||||
|
# removing old ones
|
||||||
|
existing = BlockedDomain.any_of_domains(names).pluck(:id)
|
||||||
|
BlockedDomain.where.not(id: existing).destroy_all
|
||||||
|
|
||||||
|
#updating and adding
|
||||||
|
names.each do |name|
|
||||||
|
rec = BlockedDomain.find_or_initialize_by(name: name)
|
||||||
|
unless rec.save
|
||||||
|
result = false
|
||||||
|
raise ActiveRecord::Rollback
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if result
|
||||||
flash[:notice] = I18n.t('record_updated')
|
flash[:notice] = I18n.t('record_updated')
|
||||||
redirect_to :back
|
redirect_to :back
|
||||||
else
|
else
|
||||||
@blocked_domains = params[:blocked_domains]
|
|
||||||
flash.now[:alert] = I18n.t('failed_to_update_record')
|
flash.now[:alert] = I18n.t('failed_to_update_record')
|
||||||
render :index
|
render :index
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,49 @@
|
||||||
class BlockedDomain < ActiveRecord::Base
|
class BlockedDomain < ActiveRecord::Base
|
||||||
include Versions
|
include Versions
|
||||||
|
before_save :generate_data
|
||||||
|
before_destroy :remove_data
|
||||||
|
|
||||||
after_initialize -> { self.names = [] if names.nil? }
|
|
||||||
|
class << self
|
||||||
|
def by_domain name
|
||||||
|
where(name: name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def any_of_domains names
|
||||||
|
where(name: names)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def name= val
|
||||||
|
super SimpleIDN.to_unicode(val)
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_data
|
||||||
|
@json = generate_json
|
||||||
|
@body = generate_body
|
||||||
|
update_whois_server
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_whois_server
|
||||||
|
wr = Whois::Record.find_or_initialize_by(name: name)
|
||||||
|
wr.body = @body
|
||||||
|
wr.json = @json
|
||||||
|
wr.save
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_body
|
||||||
|
template = Rails.root.join("app/views/for_models/whois_other.erb".freeze)
|
||||||
|
ERB.new(template.read, nil, "-").result(binding)
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_json
|
||||||
|
h = HashWithIndifferentAccess.new
|
||||||
|
h[:name] = self.name
|
||||||
|
h[:status] = 'Blocked'
|
||||||
|
h
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_data
|
||||||
|
Whois::Record.where(name: name).delete_all
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
class NameAndPasswordForBlockedDomain < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
add_column :blocked_domains, :name, :string
|
||||||
|
add_index :blocked_domains, :name
|
||||||
|
|
||||||
|
BlockedDomain.find_each do |x, domain|
|
||||||
|
names = domain.names
|
||||||
|
domain.update_columns(name: names[x])
|
||||||
|
end
|
||||||
|
|
||||||
|
remove_column :blocked_domains, :names
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20151029152638) do
|
ActiveRecord::Schema.define(version: 20160108135436) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -135,13 +135,15 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "blocked_domains", force: :cascade do |t|
|
create_table "blocked_domains", force: :cascade do |t|
|
||||||
t.string "names", array: true
|
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.string "creator_str"
|
t.string "creator_str"
|
||||||
t.string "updator_str"
|
t.string "updator_str"
|
||||||
|
t.string "name"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "blocked_domains", ["name"], name: "index_blocked_domains_on_name", using: :btree
|
||||||
|
|
||||||
create_table "cached_nameservers", id: false, force: :cascade do |t|
|
create_table "cached_nameservers", id: false, force: :cascade do |t|
|
||||||
t.string "hostname", limit: 255
|
t.string "hostname", limit: 255
|
||||||
t.string "ipv4", limit: 255
|
t.string "ipv4", limit: 255
|
||||||
|
@ -240,19 +242,20 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "dnskeys", force: :cascade do |t|
|
create_table "dnskeys", force: :cascade do |t|
|
||||||
t.integer "domain_id"
|
t.integer "domain_id"
|
||||||
t.integer "flags"
|
t.integer "flags"
|
||||||
t.integer "protocol"
|
t.integer "protocol"
|
||||||
t.integer "alg"
|
t.integer "alg"
|
||||||
t.text "public_key"
|
t.text "public_key"
|
||||||
t.integer "delegation_signer_id"
|
t.integer "delegation_signer_id"
|
||||||
t.string "ds_key_tag"
|
t.string "ds_key_tag"
|
||||||
t.integer "ds_alg"
|
t.integer "ds_alg"
|
||||||
t.integer "ds_digest_type"
|
t.integer "ds_digest_type"
|
||||||
t.string "ds_digest"
|
t.string "ds_digest"
|
||||||
t.string "creator_str"
|
t.string "creator_str"
|
||||||
t.string "updator_str"
|
t.string "updator_str"
|
||||||
t.integer "legacy_domain_id"
|
t.integer "legacy_domain_id"
|
||||||
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "dnskeys", ["delegation_signer_id"], name: "index_dnskeys_on_delegation_signer_id", using: :btree
|
add_index "dnskeys", ["delegation_signer_id"], name: "index_dnskeys_on_delegation_signer_id", using: :btree
|
||||||
|
@ -336,6 +339,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree
|
add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree
|
||||||
|
add_index "domains", ["name"], name: "index_domains_on_name", unique: true, using: :btree
|
||||||
add_index "domains", ["outzone_at"], name: "index_domains_on_outzone_at", using: :btree
|
add_index "domains", ["outzone_at"], name: "index_domains_on_outzone_at", using: :btree
|
||||||
add_index "domains", ["registrant_id"], name: "index_domains_on_registrant_id", using: :btree
|
add_index "domains", ["registrant_id"], name: "index_domains_on_registrant_id", using: :btree
|
||||||
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
|
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
|
||||||
|
@ -442,9 +446,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
t.integer "documentable_id"
|
t.integer "documentable_id"
|
||||||
t.string "documentable_type"
|
t.string "documentable_type"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "creator_str"
|
t.string "creator_str"
|
||||||
t.string "updator_str"
|
|
||||||
t.string "path"
|
t.string "path"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -739,21 +741,6 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
add_index "log_keyrelays", ["item_type", "item_id"], name: "index_log_keyrelays_on_item_type_and_item_id", using: :btree
|
add_index "log_keyrelays", ["item_type", "item_id"], name: "index_log_keyrelays_on_item_type_and_item_id", using: :btree
|
||||||
add_index "log_keyrelays", ["whodunnit"], name: "index_log_keyrelays_on_whodunnit", using: :btree
|
add_index "log_keyrelays", ["whodunnit"], name: "index_log_keyrelays_on_whodunnit", using: :btree
|
||||||
|
|
||||||
create_table "log_legal_documents", force: :cascade do |t|
|
|
||||||
t.string "item_type", null: false
|
|
||||||
t.integer "item_id", null: false
|
|
||||||
t.string "event", null: false
|
|
||||||
t.string "whodunnit"
|
|
||||||
t.json "object"
|
|
||||||
t.json "object_changes"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.string "session"
|
|
||||||
t.json "children"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "log_legal_documents", ["item_type", "item_id"], name: "index_log_legal_documents_on_item_type_and_item_id", using: :btree
|
|
||||||
add_index "log_legal_documents", ["whodunnit"], name: "index_log_legal_documents_on_whodunnit", using: :btree
|
|
||||||
|
|
||||||
create_table "log_messages", force: :cascade do |t|
|
create_table "log_messages", force: :cascade do |t|
|
||||||
t.string "item_type", null: false
|
t.string "item_type", null: false
|
||||||
t.integer "item_id", null: false
|
t.integer "item_id", null: false
|
||||||
|
@ -910,10 +897,10 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
|
|
||||||
create_table "nameservers", force: :cascade do |t|
|
create_table "nameservers", force: :cascade do |t|
|
||||||
t.string "hostname"
|
t.string "hostname"
|
||||||
t.string "ipv4"
|
t.string "ipv4", default: [], array: true
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.string "ipv6"
|
t.string "ipv6", default: [], array: true
|
||||||
t.integer "domain_id"
|
t.integer "domain_id"
|
||||||
t.string "creator_str"
|
t.string "creator_str"
|
||||||
t.string "updator_str"
|
t.string "updator_str"
|
||||||
|
@ -1011,9 +998,13 @@ ActiveRecord::Schema.define(version: 20151029152638) do
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.string "creator_str"
|
t.string "creator_str"
|
||||||
t.string "updator_str"
|
t.string "updator_str"
|
||||||
t.hstore "names"
|
t.integer "legacy_id"
|
||||||
|
t.string "name"
|
||||||
|
t.string "password"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_index "reserved_domains", ["name"], name: "index_reserved_domains_on_name", using: :btree
|
||||||
|
|
||||||
create_table "settings", force: :cascade do |t|
|
create_table "settings", force: :cascade do |t|
|
||||||
t.string "var", null: false
|
t.string "var", null: false
|
||||||
t.text "value"
|
t.text "value"
|
||||||
|
|
441
db/structure.sql
441
db/structure.sql
|
@ -39,6 +39,242 @@ COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs
|
||||||
|
|
||||||
SET search_path = public, pg_catalog;
|
SET search_path = public, pg_catalog;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: change_ident_country(); Type: FUNCTION; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION change_ident_country() RETURNS boolean
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $_$
|
||||||
|
DECLARE
|
||||||
|
changed BOOLEAN;
|
||||||
|
multiplier INT [];
|
||||||
|
multiplier2 INT [];
|
||||||
|
multiplier3 INT [];
|
||||||
|
multiplier4 INT [];
|
||||||
|
r RECORD;
|
||||||
|
control TEXT;
|
||||||
|
total INT;
|
||||||
|
i INT;
|
||||||
|
mod INT;
|
||||||
|
counter INT;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
|
||||||
|
|
||||||
|
multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
|
||||||
|
|
||||||
|
multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
|
||||||
|
|
||||||
|
multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
|
||||||
|
|
||||||
|
FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' /*AND ident_country_code IS NULL*/
|
||||||
|
LOOP
|
||||||
|
IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
|
||||||
|
THEN
|
||||||
|
total := 0;
|
||||||
|
counter := 1;
|
||||||
|
FOREACH i IN ARRAY multiplier
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
counter := 1;
|
||||||
|
|
||||||
|
IF (mod >= 10)
|
||||||
|
THEN
|
||||||
|
total = 0;
|
||||||
|
FOREACH i IN ARRAY multiplier2
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (mod < 10 AND substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
|
||||||
|
THEN
|
||||||
|
UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
|
||||||
|
END IF;
|
||||||
|
total = 0;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org'
|
||||||
|
LOOP
|
||||||
|
IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
|
||||||
|
THEN
|
||||||
|
total := 0;
|
||||||
|
counter := 1;
|
||||||
|
FOREACH i IN ARRAY multiplier3
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := total % 11;
|
||||||
|
total = 0;
|
||||||
|
counter := 1;
|
||||||
|
|
||||||
|
IF (mod >= 10)
|
||||||
|
THEN
|
||||||
|
total = 0;
|
||||||
|
FOREACH i IN ARRAY multiplier4
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (mod < 10 AND (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI')))
|
||||||
|
THEN
|
||||||
|
UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RETURN changed;
|
||||||
|
END;
|
||||||
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: change_ident_country(integer, text); Type: FUNCTION; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION change_ident_country(id integer, type text) RETURNS boolean
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $_$
|
||||||
|
DECLARE
|
||||||
|
changed BOOLEAN;
|
||||||
|
multiplier int[];
|
||||||
|
multiplier2 int[];
|
||||||
|
code int;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
multiplier := ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
|
||||||
|
|
||||||
|
multiplier2 := ARRAY[3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
|
||||||
|
|
||||||
|
code := (SELECT code FROM contacts WHERE id = 208 AND ident_country_code = 'EE');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
UPDATE contacts
|
||||||
|
SET ident = ''
|
||||||
|
WHERE id = $1 and ident_type = $2 AND ident_country_code = 'EE'
|
||||||
|
AND ident = '';
|
||||||
|
|
||||||
|
RETURN changed;
|
||||||
|
END;
|
||||||
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: fill_ident_country(); Type: FUNCTION; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION fill_ident_country() RETURNS boolean
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $_$
|
||||||
|
DECLARE
|
||||||
|
changed BOOLEAN;
|
||||||
|
multiplier INT [];
|
||||||
|
multiplier2 INT [];
|
||||||
|
multiplier3 INT [];
|
||||||
|
multiplier4 INT [];
|
||||||
|
r RECORD;
|
||||||
|
control TEXT;
|
||||||
|
total INT;
|
||||||
|
i INT;
|
||||||
|
mod INT;
|
||||||
|
counter INT;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
|
||||||
|
multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
|
||||||
|
multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
|
||||||
|
multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
|
||||||
|
|
||||||
|
FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' AND ident_country_code IS NULL
|
||||||
|
LOOP
|
||||||
|
IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
|
||||||
|
THEN
|
||||||
|
total := 0;
|
||||||
|
counter := 1;
|
||||||
|
FOREACH i IN ARRAY multiplier
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
counter := 1;
|
||||||
|
IF (mod >= 10)
|
||||||
|
THEN
|
||||||
|
total = 0;
|
||||||
|
FOREACH i IN ARRAY multiplier2
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (mod = 10)
|
||||||
|
THEN
|
||||||
|
mod := 0;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
|
||||||
|
THEN
|
||||||
|
UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
|
||||||
|
END IF;
|
||||||
|
total := 0;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org' AND ident_country_code IS NULL
|
||||||
|
LOOP
|
||||||
|
IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
|
||||||
|
THEN
|
||||||
|
total := 0;
|
||||||
|
counter := 1;
|
||||||
|
FOREACH i IN ARRAY multiplier3
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := total % 11;
|
||||||
|
total := 0;
|
||||||
|
counter := 1;
|
||||||
|
IF (mod >= 10)
|
||||||
|
THEN
|
||||||
|
total = 0;
|
||||||
|
FOREACH i IN ARRAY multiplier4
|
||||||
|
LOOP
|
||||||
|
total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
|
||||||
|
counter := (counter + 1);
|
||||||
|
END LOOP;
|
||||||
|
mod := (total % 11);
|
||||||
|
END IF;
|
||||||
|
IF (mod = 10)
|
||||||
|
THEN
|
||||||
|
mod := 0;
|
||||||
|
END IF;
|
||||||
|
IF (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI'))
|
||||||
|
THEN
|
||||||
|
UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
RETURN changed;
|
||||||
|
END;
|
||||||
|
$_$;
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: -
|
-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -55,7 +291,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
|
||||||
ret text;
|
ret text;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- define filters
|
-- define filters
|
||||||
include_filter = '%.' || i_origin;
|
include_filter = '%' || i_origin;
|
||||||
|
|
||||||
-- for %.%.%
|
-- for %.%.%
|
||||||
IF i_origin ~ '\.' THEN
|
IF i_origin ~ '\.' THEN
|
||||||
|
@ -82,10 +318,6 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
|
||||||
|
|
||||||
ret = concat(tmp_var, chr(10), chr(10));
|
ret = concat(tmp_var, chr(10), chr(10));
|
||||||
|
|
||||||
-- origin ns records
|
|
||||||
SELECT ns_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
|
|
||||||
ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10));
|
|
||||||
|
|
||||||
-- ns records
|
-- ns records
|
||||||
SELECT array_to_string(
|
SELECT array_to_string(
|
||||||
array(
|
array(
|
||||||
|
@ -93,17 +325,26 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
|
||||||
FROM domains d
|
FROM domains d
|
||||||
JOIN nameservers ns ON ns.domain_id = d.id
|
JOIN nameservers ns ON ns.domain_id = d.id
|
||||||
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
|
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
|
||||||
AND NOT ('{serverHold,clientHold}' && d.statuses)
|
|
||||||
ORDER BY d.name
|
ORDER BY d.name
|
||||||
),
|
),
|
||||||
chr(10)
|
chr(10)
|
||||||
) INTO tmp_var;
|
) INTO tmp_var;
|
||||||
|
|
||||||
ret := concat(ret, tmp_var, chr(10), chr(10));
|
ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10), chr(10));
|
||||||
|
|
||||||
-- origin a glue records
|
-- a glue records for origin nameservers
|
||||||
SELECT a_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
|
SELECT array_to_string(
|
||||||
ret := concat(ret, '; Zone A Records', chr(10), tmp_var, chr(10));
|
array(
|
||||||
|
SELECT concat(ns.hostname, '. IN A ', ns.ipv4)
|
||||||
|
FROM nameservers ns
|
||||||
|
JOIN domains d ON d.id = ns.domain_id
|
||||||
|
WHERE d.name = i_origin
|
||||||
|
AND ns.hostname LIKE '%.' || d.name
|
||||||
|
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
|
||||||
|
), chr(10)
|
||||||
|
) INTO tmp_var;
|
||||||
|
|
||||||
|
ret := concat(ret, '; Zone A Records', chr(10), tmp_var);
|
||||||
|
|
||||||
-- a glue records for other nameservers
|
-- a glue records for other nameservers
|
||||||
SELECT array_to_string(
|
SELECT array_to_string(
|
||||||
|
@ -115,15 +356,43 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
|
||||||
AND ns.hostname LIKE '%.' || d.name
|
AND ns.hostname LIKE '%.' || d.name
|
||||||
AND d.name <> i_origin
|
AND d.name <> i_origin
|
||||||
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
|
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
|
||||||
AND NOT ('{serverHold,clientHold}' && d.statuses)
|
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
|
||||||
|
SELECT 1 FROM nameservers nsi
|
||||||
|
JOIN domains di ON nsi.domain_id = di.id
|
||||||
|
WHERE di.name = i_origin
|
||||||
|
AND nsi.hostname = ns.hostname
|
||||||
|
)
|
||||||
), chr(10)
|
), chr(10)
|
||||||
) INTO tmp_var;
|
) INTO tmp_var;
|
||||||
|
|
||||||
ret := concat(ret, tmp_var, chr(10), chr(10));
|
-- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster
|
||||||
|
|
||||||
-- origin aaaa glue records
|
-- SELECT ns.*
|
||||||
SELECT a4_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
|
-- FROM nameservers ns
|
||||||
ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var, chr(10));
|
-- JOIN domains d ON d.id = ns.domain_id
|
||||||
|
-- WHERE d.name LIKE '%ee' AND d.name NOT LIKE '%pri.ee'
|
||||||
|
-- AND ns.hostname LIKE '%.' || d.name
|
||||||
|
-- AND d.name <> 'ee'
|
||||||
|
-- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
|
||||||
|
-- AND ns.hostname NOT IN (
|
||||||
|
-- SELECT ns.hostname FROM domains d JOIN nameservers ns ON d.id = ns.domain_id WHERE d.name = 'ee'
|
||||||
|
-- )
|
||||||
|
|
||||||
|
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
|
||||||
|
|
||||||
|
-- aaaa glue records for origin nameservers
|
||||||
|
SELECT array_to_string(
|
||||||
|
array(
|
||||||
|
SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6)
|
||||||
|
FROM nameservers ns
|
||||||
|
JOIN domains d ON d.id = ns.domain_id
|
||||||
|
WHERE d.name = i_origin
|
||||||
|
AND ns.hostname LIKE '%.' || d.name
|
||||||
|
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
|
||||||
|
), chr(10)
|
||||||
|
) INTO tmp_var;
|
||||||
|
|
||||||
|
ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var);
|
||||||
|
|
||||||
-- aaaa glue records for other nameservers
|
-- aaaa glue records for other nameservers
|
||||||
SELECT array_to_string(
|
SELECT array_to_string(
|
||||||
|
@ -135,23 +404,27 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
|
||||||
AND ns.hostname LIKE '%.' || d.name
|
AND ns.hostname LIKE '%.' || d.name
|
||||||
AND d.name <> i_origin
|
AND d.name <> i_origin
|
||||||
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
|
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
|
||||||
AND NOT ('{serverHold,clientHold}' && d.statuses)
|
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
|
||||||
|
SELECT 1 FROM nameservers nsi
|
||||||
|
JOIN domains di ON nsi.domain_id = di.id
|
||||||
|
WHERE di.name = i_origin
|
||||||
|
AND nsi.hostname = ns.hostname
|
||||||
|
)
|
||||||
), chr(10)
|
), chr(10)
|
||||||
) INTO tmp_var;
|
) INTO tmp_var;
|
||||||
|
|
||||||
ret := concat(ret, tmp_var, chr(10), chr(10));
|
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
|
||||||
|
|
||||||
-- ds records
|
-- ds records
|
||||||
SELECT array_to_string(
|
SELECT array_to_string(
|
||||||
array(
|
array(
|
||||||
SELECT concat(
|
SELECT concat(
|
||||||
d.name_puny, '. IN DS ', dk.ds_key_tag, ' ',
|
d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
|
||||||
dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )'
|
dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
|
||||||
)
|
)
|
||||||
FROM domains d
|
FROM domains d
|
||||||
JOIN dnskeys dk ON dk.domain_id = d.id
|
JOIN dnskeys dk ON dk.domain_id = d.id
|
||||||
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter AND dk.flags = 257
|
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
|
||||||
AND NOT ('{serverHold,clientHold}' && d.statuses)
|
|
||||||
),
|
),
|
||||||
chr(10)
|
chr(10)
|
||||||
) INTO tmp_var;
|
) INTO tmp_var;
|
||||||
|
@ -457,11 +730,11 @@ ALTER SEQUENCE banklink_transactions_id_seq OWNED BY banklink_transactions.id;
|
||||||
|
|
||||||
CREATE TABLE blocked_domains (
|
CREATE TABLE blocked_domains (
|
||||||
id integer NOT NULL,
|
id integer NOT NULL,
|
||||||
names character varying[],
|
|
||||||
created_at timestamp without time zone,
|
created_at timestamp without time zone,
|
||||||
updated_at timestamp without time zone,
|
updated_at timestamp without time zone,
|
||||||
creator_str character varying,
|
creator_str character varying,
|
||||||
updator_str character varying
|
updator_str character varying,
|
||||||
|
name character varying
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -745,7 +1018,8 @@ CREATE TABLE dnskeys (
|
||||||
ds_digest character varying,
|
ds_digest character varying,
|
||||||
creator_str character varying,
|
creator_str character varying,
|
||||||
updator_str character varying,
|
updator_str character varying,
|
||||||
legacy_domain_id integer
|
legacy_domain_id integer,
|
||||||
|
updated_at timestamp without time zone
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1130,9 +1404,7 @@ CREATE TABLE legal_documents (
|
||||||
documentable_id integer,
|
documentable_id integer,
|
||||||
documentable_type character varying,
|
documentable_type character varying,
|
||||||
created_at timestamp without time zone,
|
created_at timestamp without time zone,
|
||||||
updated_at timestamp without time zone,
|
|
||||||
creator_str character varying,
|
creator_str character varying,
|
||||||
updator_str character varying,
|
|
||||||
path character varying
|
path character varying
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1863,43 +2135,6 @@ CREATE SEQUENCE log_keyrelays_id_seq
|
||||||
ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id;
|
ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id;
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: log_legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE TABLE log_legal_documents (
|
|
||||||
id integer NOT NULL,
|
|
||||||
item_type character varying NOT NULL,
|
|
||||||
item_id integer NOT NULL,
|
|
||||||
event character varying NOT NULL,
|
|
||||||
whodunnit character varying,
|
|
||||||
object json,
|
|
||||||
object_changes json,
|
|
||||||
created_at timestamp without time zone,
|
|
||||||
session character varying,
|
|
||||||
children json
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: log_legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE SEQUENCE log_legal_documents_id_seq
|
|
||||||
START WITH 1
|
|
||||||
INCREMENT BY 1
|
|
||||||
NO MINVALUE
|
|
||||||
NO MAXVALUE
|
|
||||||
CACHE 1;
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: log_legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
|
||||||
--
|
|
||||||
|
|
||||||
ALTER SEQUENCE log_legal_documents_id_seq OWNED BY log_legal_documents.id;
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -2313,10 +2548,10 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id;
|
||||||
CREATE TABLE nameservers (
|
CREATE TABLE nameservers (
|
||||||
id integer NOT NULL,
|
id integer NOT NULL,
|
||||||
hostname character varying,
|
hostname character varying,
|
||||||
ipv4 character varying,
|
ipv4 character varying[] DEFAULT '{}'::character varying[],
|
||||||
created_at timestamp without time zone,
|
created_at timestamp without time zone,
|
||||||
updated_at timestamp without time zone,
|
updated_at timestamp without time zone,
|
||||||
ipv6 character varying,
|
ipv6 character varying[] DEFAULT '{}'::character varying[],
|
||||||
domain_id integer,
|
domain_id integer,
|
||||||
creator_str character varying,
|
creator_str character varying,
|
||||||
updator_str character varying,
|
updator_str character varying,
|
||||||
|
@ -2560,7 +2795,9 @@ CREATE TABLE reserved_domains (
|
||||||
updated_at timestamp without time zone,
|
updated_at timestamp without time zone,
|
||||||
creator_str character varying,
|
creator_str character varying,
|
||||||
updator_str character varying,
|
updator_str character varying,
|
||||||
names hstore
|
legacy_id integer,
|
||||||
|
name character varying,
|
||||||
|
password character varying
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
@ -3126,13 +3363,6 @@ ALTER TABLE ONLY log_invoices ALTER COLUMN id SET DEFAULT nextval('log_invoices_
|
||||||
ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass);
|
ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
|
||||||
--
|
|
||||||
|
|
||||||
ALTER TABLE ONLY log_legal_documents ALTER COLUMN id SET DEFAULT nextval('log_legal_documents_id_seq'::regclass);
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -3645,14 +3875,6 @@ ALTER TABLE ONLY log_keyrelays
|
||||||
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
|
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: log_legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
|
||||||
--
|
|
||||||
|
|
||||||
ALTER TABLE ONLY log_legal_documents
|
|
||||||
ADD CONSTRAINT log_legal_documents_pkey PRIMARY KEY (id);
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -3880,6 +4102,13 @@ CREATE INDEX index_accounts_on_registrar_id ON accounts USING btree (registrar_i
|
||||||
CREATE INDEX index_api_users_on_registrar_id ON api_users USING btree (registrar_id);
|
CREATE INDEX index_api_users_on_registrar_id ON api_users USING btree (registrar_id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: index_blocked_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX index_blocked_domains_on_name ON blocked_domains USING btree (name);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_cached_nameservers_on_hostname_and_ipv4_and_ipv6; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
-- Name: index_cached_nameservers_on_hostname_and_ipv4_and_ipv6; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -3985,6 +4214,13 @@ CREATE INDEX index_domain_transfers_on_domain_id ON domain_transfers USING btree
|
||||||
CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at);
|
CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX index_domains_on_name ON domains USING btree (name);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -4349,20 +4585,6 @@ CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON log_keyrelays USING
|
||||||
CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit);
|
CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit);
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: index_log_legal_documents_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE INDEX index_log_legal_documents_on_item_type_and_item_id ON log_legal_documents USING btree (item_type, item_id);
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Name: index_log_legal_documents_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE INDEX index_log_legal_documents_on_whodunnit ON log_legal_documents USING btree (whodunnit);
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -4510,6 +4732,13 @@ CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verificat
|
||||||
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
|
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: index_reserved_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX index_reserved_domains_on_name ON reserved_domains USING btree (name);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
|
@ -4947,5 +5176,27 @@ INSERT INTO schema_migrations (version) VALUES ('20150921110152');
|
||||||
|
|
||||||
INSERT INTO schema_migrations (version) VALUES ('20150921111842');
|
INSERT INTO schema_migrations (version) VALUES ('20150921111842');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151028183132');
|
||||||
|
|
||||||
INSERT INTO schema_migrations (version) VALUES ('20151029152638');
|
INSERT INTO schema_migrations (version) VALUES ('20151029152638');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151112160452');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151117081204');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151120090455');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151124200353');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151125155601');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151127091716');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151130175654');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20151202123506');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20160106092052');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20160108135436');
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue