diff --git a/.gitignore b/.gitignore index eb702ff..b66c526 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ run testrun coverrun +/nbproject/private/ \ No newline at end of file diff --git a/README.md b/README.md index 1616f45..1f6cffb 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,8 @@ For the 'CAS' API system to work properly, the system expects the transaction isolation level of MySQL to be 'REPEATABLE READ' (this is the default). + + +## New Command Implementation - Delete domain + + example curl -X DELETE -u username:password http://apidomain/api/domain/:id \ No newline at end of file diff --git a/lib/PowerDNS/API.pm b/lib/PowerDNS/API.pm index 6ef7205..4f24a65 100644 --- a/lib/PowerDNS/API.pm +++ b/lib/PowerDNS/API.pm @@ -40,6 +40,7 @@ sub startup { ['domain/*domain' => 'POST' => 'post_domain'], ['domain/*domain' => 'GET' => 'get_domain'], ['domain/*domain' => 'PUT' => 'put_domain'], + ['domain/*id' => 'DELETE' => 'delete_domain'], ['record/*domain' => 'POST' => 'post_record'], ['record/*domain/*id' => 'PUT' => 'put_record'], @@ -89,4 +90,4 @@ Copyright 2011-2012 Ask Bjørn Hansen, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. -=cut +=cut \ No newline at end of file diff --git a/lib/PowerDNS/API/Handler.pm b/lib/PowerDNS/API/Handler.pm index a50b8a1..4250463 100644 --- a/lib/PowerDNS/API/Handler.pm +++ b/lib/PowerDNS/API/Handler.pm @@ -174,6 +174,31 @@ sub post_domain { return $self->render_json({ domain => $domain }); } +sub delete_domain { + my $self = shift; + + my $account = $self->stash('account') or die $self->render_error(401, 'unauthorized'); + + my $domain_id = $self->stash('id') or die $self->render_error(400, 'no domain id'); + + my $txn = $self->schema->txn_scope_guard; + + my $domain = $self->schema->domain->find({ id => $domain_id }, { for => 'update' }) + or die $self->render_error("domain not found", 404); + + die $self->render_error(401, "unauthorized") + unless $account->has_access($domain); + + $self->_check_cas($domain); + + + $domain->delete; + + $txn->commit; + + return $self->render_json({ message => "domain deleted"}, 205) +} + sub put_record { my $self = shift; @@ -308,4 +333,4 @@ sub delete_record { } -1; +1; \ No newline at end of file