Only delete the domain when the user is the last owner.
parent
a188d28f1d
commit
1f69839333
|
@ -202,14 +202,14 @@ class DNSManager::Storage
|
||||||
def gain_ownership(user_id : UserDataID, uuid : String)
|
def gain_ownership(user_id : UserDataID, uuid : String)
|
||||||
user_must_exist! user_id
|
user_must_exist! user_id
|
||||||
|
|
||||||
if domain = @domains_by_share_key.get uuid
|
if domain = @domains_by_share_key.get? uuid
|
||||||
if domain.owners.includes? user_id
|
if domain.owners.includes? user_id
|
||||||
return Response::Error.new "You already own this domain."
|
return Response::Error.new "You already own this domain."
|
||||||
end
|
end
|
||||||
domain.owners << user_id
|
domain.owners << user_id
|
||||||
@domains_by_name.update_or_create domain.name, domain
|
@domains_by_name.update_or_create domain.name, domain
|
||||||
Response::DomainChanged.new domain
|
Response::DomainChanged.new domain
|
||||||
elsif domain = @domains_by_transfer_key.get uuid
|
elsif domain = @domains_by_transfer_key.get? uuid
|
||||||
if domain.owners.includes? user_id
|
if domain.owners.includes? user_id
|
||||||
return Response::Error.new "You already own this domain."
|
return Response::Error.new "You already own this domain."
|
||||||
end
|
end
|
||||||
|
@ -312,19 +312,29 @@ class DNSManager::Storage
|
||||||
Response::RRDeleted.new rrid
|
Response::RRDeleted.new rrid
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_domain(user_id : UserDataID, domain : String) : IPC::JSON
|
def delete_domain(user_id : UserDataID, domain_name : String) : IPC::JSON
|
||||||
user_must_exist! user_id
|
user_must_exist! user_id
|
||||||
zone_must_exist! domain
|
zone_must_exist! domain_name
|
||||||
user_should_own! user_id, domain
|
user_should_own! user_id, domain_name
|
||||||
|
|
||||||
# Remove this domain from the list of user's domains.
|
domain = @domains_by_name.get domain_name
|
||||||
domains_by_name.delete domain
|
# The user isn't the only owner, just remove him from the list of owners.
|
||||||
|
if domain.owners.size > 1
|
||||||
|
domain.owners.select! { |o| o != user_id }
|
||||||
|
@domains_by_name.update_or_create domain_name, domain
|
||||||
|
|
||||||
|
# Not really a domain deletion, but that'll do the trick.
|
||||||
|
return Response::DomainDeleted.new domain_name
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove this domain_name from the list of user's domains.
|
||||||
|
domains_by_name.delete domain_name
|
||||||
|
|
||||||
# Remove the related zone and their registered tokens.
|
# Remove the related zone and their registered tokens.
|
||||||
zones_by_domain.delete domain
|
zones_by_domain.delete domain_name
|
||||||
tokens_by_domain.delete domain
|
tokens_by_domain.delete domain_name
|
||||||
|
|
||||||
Response::DomainDeleted.new domain
|
Response::DomainDeleted.new domain_name
|
||||||
end
|
end
|
||||||
|
|
||||||
# Get all removed users from `authd`, list all their domains and remove their data from `dnsmanagerd`.
|
# Get all removed users from `authd`, list all their domains and remove their data from `dnsmanagerd`.
|
||||||
|
|
Loading…
Reference in New Issue