diff --git a/console/Dockerfile b/console/Dockerfile index 13aa430..da77dd9 100644 --- a/console/Dockerfile +++ b/console/Dockerfile @@ -71,6 +71,7 @@ RUN apk add perl-io-socket-ssl perl-lwp-protocol-https RUN cpanm -n -v \ Dancer2 \ + Dancer2::Plugin::Deferred \ REST::Client \ Module::Pluggable::Object diff --git a/console/web-api/lib/Email/SpoofingDemo/Web.pm b/console/web-api/lib/Email/SpoofingDemo/Web.pm index d50d069..4dd0972 100644 --- a/console/web-api/lib/Email/SpoofingDemo/Web.pm +++ b/console/web-api/lib/Email/SpoofingDemo/Web.pm @@ -1,5 +1,6 @@ package Email::SpoofingDemo::Web; use Dancer2; +use Dancer2::Plugin::Deferred; use JSON; use REST::Client; @@ -43,13 +44,13 @@ get '/' => sub { get '/dns/zone-edit/:zone' => sub { my $zone = route_parameters->get('zone'); - if (defined $zone and not (grep { $_ eq $zone } @{config->{'editable_zones'}})) { + if (not (grep { $_ eq $zone } @{config->{'editable_zones'}})) { pass; } - my $zone_contents; + my $zone_contents = deferred 'zone_contents'; - if (defined $zone) { + if (not defined $zone_contents) { my ($response, $status) = call_api(GET => 'dns', "/zone/${zone}/file"); $zone_contents = $response->{contents}; } @@ -68,10 +69,18 @@ post '/dns/zone-edit/:zone' => sub { } my $contents = body_parameters->{'zone-contents'}; - my (undef, $status) = call_api(PUT => 'dns', "/zone/${zone}/file", { contents => $contents }); - my $success = ($status eq '200') ? 'success' : 'failure'; + my ($data, $status) = call_api(PUT => 'dns', "/zone/${zone}/file", { contents => $contents }); - redirect "/dns/zone-edit/$zone?success=$success", 303; + if ($status ne '200') { + $data = decode_json($data); + } + deferred status => { + outcome => $data->{outcome}, + messages => $data->{messages}, + }; + deferred zone_contents => $data->{contents}; + + redirect "/dns/zone-edit/$zone", 303; }; get '/sender/dkim-keys' => sub { diff --git a/console/web-api/views/dns/zone-edit.tt b/console/web-api/views/dns/zone-edit.tt index f92d7ea..12d221b 100644 --- a/console/web-api/views/dns/zone-edit.tt +++ b/console/web-api/views/dns/zone-edit.tt @@ -1,4 +1,36 @@
[% outcome_info.message %]
+ [% IF deferred.status.messages.size > 1 %] +[% deferred.status.messages.first | html %]
+ [% END %] +