aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller/Waste.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Waste.pm')
-rw-r--r--perllib/FixMyStreet/App/Controller/Waste.pm131
1 files changed, 64 insertions, 67 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Waste.pm b/perllib/FixMyStreet/App/Controller/Waste.pm
index 3cdd9fd42..6319b5f22 100644
--- a/perllib/FixMyStreet/App/Controller/Waste.pm
+++ b/perllib/FixMyStreet/App/Controller/Waste.pm
@@ -5,86 +5,83 @@ use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller' }
use utf8;
-use Open311::GetServiceRequestUpdates;
+use FixMyStreet::App::Form::Waste::UPRN;
-sub receive_echo_event_notification : Path('/waste/echo') : Args(0) {
- my ($self, $c) = @_;
- $c->stash->{format} = 'xml';
- $c->response->header(Content_Type => 'application/soap+xml');
+sub auto : Private {
+ my ( $self, $c ) = @_;
+ my $cobrand_check = $c->cobrand->feature('waste');
+ $c->detach( '/page_error_404_not_found' ) if !$cobrand_check;
+ return 1;
+}
- require SOAP::Lite;
+sub index : Path : Args(0) {
+ my ( $self, $c ) = @_;
+
+ if (my $uprn = $c->get_param('address')) {
+ $c->detach('redirect_to_uprn', [ $uprn ]);
+ }
+
+ $c->stash->{title} = 'What is your address?';
+ my $form = FixMyStreet::App::Form::Waste::UPRN->new( cobrand => $c->cobrand );
+ $form->process( params => $c->req->body_params );
+ if ($form->validated) {
+ my $addresses = $form->value->{postcode};
+ $form = address_list_form($addresses);
+ }
+ $c->stash->{form} = $form;
+}
- $c->detach('soap_error', [ 'Invalid method', 405 ]) unless $c->req->method eq 'POST';
+sub address_list_form {
+ my $addresses = shift;
+ HTML::FormHandler->new(
+ field_list => [
+ address => {
+ required => 1,
+ type => 'Select',
+ widget => 'RadioGroup',
+ label => 'Select an address',
+ tags => { last_differs => 1, small => 1 },
+ options => $addresses,
+ },
+ go => {
+ type => 'Submit',
+ value => 'Continue',
+ element_attr => { class => 'govuk-button' },
+ },
+ ],
+ );
+}
- my $echo = $c->cobrand->feature('echo');
- $c->detach('soap_error', [ 'Missing config', 500 ]) unless $echo;
+sub redirect_to_uprn : Private {
+ my ($self, $c, $uprn) = @_;
+ my $uri = '/waste/uprn/' . $uprn;
+ $c->res->redirect($uri);
+ $c->detach;
+}
- # Make sure we log entire request for debugging
- $c->detach('soap_error', [ 'Missing body' ]) unless $c->req->body;
- my $soap = join('', $c->req->body->getlines);
- $c->log->info($soap);
+sub uprn : Chained('/') : PathPart('waste/uprn') : CaptureArgs(1) {
+ my ($self, $c, $uprn) = @_;
- my $body = $c->cobrand->body;
- $c->detach('soap_error', [ 'Bad jurisdiction' ]) unless $body;
+ if ($uprn eq 'missing') {
+ $c->stash->{template} = 'waste/missing.html';
+ $c->detach;
+ }
- my $env = SOAP::Deserializer->deserialize($soap);
+ $c->forward('/auth/get_csrf_token');
- my $header = $env->header;
- $c->detach('soap_error', [ 'Missing SOAP header' ]) unless $header;
- my $action = $header->{Action};
- $c->detach('soap_error', [ 'Incorrect Action' ]) unless $action && $action eq $echo->{receive_action};
- $header = $header->{Security};
- $c->detach('soap_error', [ 'Missing Security header' ]) unless $header;
- my $token = $header->{UsernameToken};
- $c->detach('soap_error', [ 'Authentication failed' ])
- unless $token && $token->{Username} eq $echo->{receive_username} && $token->{Password} eq $echo->{receive_password};
+ my $property = $c->stash->{property} = $c->cobrand->call_hook(look_up_property => $uprn);
+ $c->detach( '/page_error_404_not_found', [] ) unless $property;
- # Still want to say it is okay, even if we did nothing with it
- $c->forward('soap_ok');
-}
+ $c->stash->{uprn} = $uprn;
+ $c->stash->{latitude} = $property->{latitude};
+ $c->stash->{longitude} = $property->{longitude};
-sub soap_error : Private {
- my ($self, $c, $comment, $code) = @_;
- $code ||= 400;
- $c->response->status($code);
- my $type = $code == 500 ? 'Server' : 'Client';
- $c->response->body(SOAP::Serializer->fault($type, "Bad request: $comment", soap_header()));
+ $c->stash->{service_data} = $c->cobrand->call_hook(bin_services_for_address => $property) || [];
+ $c->stash->{services} = { map { $_->{service_id} => $_ } @{$c->stash->{service_data}} };
}
-sub soap_ok : Private {
+sub bin_days : Chained('uprn') : PathPart('') : Args(0) {
my ($self, $c) = @_;
- $c->response->status(200);
- my $method = SOAP::Data->name("NotifyEventUpdatedResponse")->attr({
- xmlns => "http://www.twistedfish.com/xmlns/echo/api/v1"
- });
- $c->response->body(SOAP::Serializer->envelope(method => $method, soap_header()));
-}
-
-sub soap_header {
- my $attr = "http://www.twistedfish.com/xmlns/echo/api/v1";
- my $action = "NotifyEventUpdatedResponse";
- my $header = SOAP::Header->name("Action")->attr({
- xmlns => 'http://www.w3.org/2005/08/addressing',
- 'soap:mustUnderstand' => 1,
- })->value("$attr/ReceiverService/$action");
-
- my $dt = DateTime->now();
- my $dt2 = $dt->clone->add(minutes => 5);
- my $w3c = DateTime::Format::W3CDTF->new;
- my $header2 = SOAP::Header->name("Security")->attr({
- 'soap:mustUnderstand' => 'true',
- 'xmlns' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'
- })->value(
- \SOAP::Header->name(
- "Timestamp" => \SOAP::Header->value(
- SOAP::Header->name('Created', $w3c->format_datetime($dt)),
- SOAP::Header->name('Expires', $w3c->format_datetime($dt2)),
- )
- )->attr({
- xmlns => "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
- })
- );
- return ($header, $header2);
}
__PACKAGE__->meta->make_immutable;