Call api key import code just after creating the database

pull/14025/head
Javier Torres 6 years ago
parent 09497fc9e9
commit fe705c4217

@ -182,15 +182,18 @@ module CartoDB
begin
if @target_org_id && @target_is_owner && File.exists?("#{@path}org_#{@target_org_id}.dump")
create_db(@target_dbname, true)
create_org_api_key_roles(@target_org_id)
import_pgdump("org_#{@target_org_id}.dump")
grant_org_api_key_roles(@target_org_id)
elsif File.exists? "#{@path}user_#{@target_userid}.dump"
create_db(@target_dbname, true)
create_org_api_key_roles(@target_userid)
import_pgdump("user_#{@target_userid}.dump")
grant_org_api_key_roles(@target_userid)
elsif File.exists? "#{@path}#{@target_username}.schema.sql"
create_db(@target_dbname, false)
run_file_restore_schema("#{@target_username}.schema.sql")
end
rescue => e
begin
remove_user_mover_banner(@pack_config['user']['id'])
@ -459,11 +462,9 @@ module CartoDB
@logger.info("Importing dump from #{dump} using pg_restore..")
@toc_file = toc_file("#{@path}#{dump}")
create_api_key_roles(@pack_config['user']['id'])
run_file_restore_postgres(dump, 'pre-data')
run_file_restore_postgres(dump, 'data')
run_file_restore_postgres(dump, 'post-data')
grant_api_key_roles(@pack_config['user']['id'])
end
def create_user(username, password = nil)
@ -478,20 +479,29 @@ module CartoDB
end
end
def create_api_key_roles(user_id)
def create_org_api_key_roles(org_id)
Carto::Organization.find(org_id).users.each { |u| create_user_api_key_roles(u.id) }
end
def create_user_api_key_roles(user_id)
Carto::User.find(user_id).api_keys.select(&:regular?).each do |k|
k.role_creation_queries.each { |q| superuser_user_pg_conn.query(q) }
rescue ActiveRecord::RecordNotFound => e
CartoDB::Logger.error(exception: e, message: 'Restored user not found', user_id: user_id)
@logger.error("Unable to create roles for user's api keys, User id: #{user_id}")
begin
k.role_creation_queries.each { |q| superuser_user_pg_conn.query(q) }
rescue PG::Error => e
# Ignore role already exists errors
throw e unless e.message =~ /already exists/
end
end
end
def grant_org_api_key_roles(org_id)
Carto::Organization.find(org_id).users.each { |u|grant_user_api_key_roles(u.id) }
end
def grant_api_key_roles(user_id)
def grant_user_api_key_roles(user_id)
Carto::User.find(user_id).api_keys.select(&:regular?).each do |k|
k.role_permission_queries.each { |q| superuser_user_pg_conn.query(q) }
rescue ActiveRecord::RecordNotFound => e
CartoDB::Logger.error(exception: e, message: 'Restored user not found', user_id: user_id)
@logger.error("Unable to create roles for user's api keys, User id: #{user_id}")
end
end
def org_role_name(database_name)

@ -629,7 +629,7 @@ describe 'UserMigration' do
@table1 = create_table(user_id: @carto_org_user_1.id)
records.each { |row| @table1.insert_row!(row) }
create_database('test_migration', @organization.owner) if migrate_metadata
@regular_api_key = Carto::ApiKey.create_regular_key!(user: @carto_org_user_owner, name: 'Some ApiKey',
@regular_api_key = Carto::ApiKey.create_regular_key!(user: @carto_org_user_owner, name: unique_name('api_key'),
grants: [{type: "apis", apis: ["maps", "sql"]}])
end

Loading…
Cancel
Save