Skip to content

Commit 64c049d

Browse files
authored
Merge pull request #33 from companieshouse/release/4.28.0
Release/4.28.0
2 parents fa4984d + 7d59db4 commit 64c049d

File tree

7 files changed

+48
-131
lines changed

7 files changed

+48
-131
lines changed

appconfig.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
---
2+
23
base:
34
url: <BASE_URL>
45

cpanfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,4 @@ requires 'Readonly', '==2.00';
5151

5252
test_requires 'CH::Test', '==0.32';
5353
test_requires 'Test::Differences', '==0.63';
54+
test_requires 'Test::Exception', '==0.43';

lib/ChGovUk/Controllers/Admin/User/Filings.pm

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use CH::Perl;
66
use CH::Util::Pager;
77
use CH::Util::DateHelper;
88
use POSIX qw(strftime);
9-
use Digest::SHA qw(sha1);
109
use MIME::Base64 qw(encode_base64url);
1110

1211
#-------------------------------------------------------------------------------
@@ -26,27 +25,22 @@ sub list {
2625
user_id => $self->param('user_id')
2726
};
2827

29-
3028
$self->ch_api->user->user_transactions($query)->get->on(
3129
success => sub {
3230
my ( $api, $tx ) = @_;
3331
my $rf_results = $tx->success->json;
3432

3533
for my $doc (@{$rf_results->{items}}) {
36-
if ( defined $doc->{closed_at} ) {
34+
if ( defined $doc->{closed_at} ) {
3735
$doc->{closed_at_date} = CH::Util::DateHelper->isodate_as_string($doc->{closed_at});
3836
$doc->{closed_at_time} = CH::Util::DateHelper->isotime_as_string($doc->{closed_at})->strftime("%l:%M%P");
39-
}
40-
if ( $doc->{status} eq "open" && $doc->{resources}){
41-
for my $resource ( keys %{$doc->{resources}}) {
42-
if ( $doc->{resources}->{$resource}->{kind} eq "accounts" ){
43-
$self->_build_resume_link($doc, $resource);
44-
}
45-
}
37+
}
38+
if ($doc->{status} eq "open" && $doc->{resume_journey_uri}) {
39+
$self->_build_resume_link($doc, $doc->{resume_journey_uri});
4640
}
4741
}
4842

49-
# Work out the paging numbers
43+
# Work out the paging numbers
5044
$pager->total_entries( $rf_results->{total_result} // 0 );
5145
warn "recent filings total_count %d entries per page %d",
5246
$pager->total_entries, $pager->entries_per_page() [RECENT_FILINGS];
@@ -81,12 +75,12 @@ sub list {
8175
#-------------------------------------------------------------------------------
8276

8377
sub _build_resume_link {
84-
my ($self, $transaction, $resource_key) = @_;
78+
my ($self, $transaction, $resume_link) = @_;
8579

8680
my $transaction_id = $transaction->{id};
87-
my $encoded_resource_key = encode_base64url(sha1($resource_key));
88-
89-
$transaction->{resume_link} = "/user/transactions/" . $transaction_id . "/resume?id=" . $encoded_resource_key;
81+
my $encoded_resume_link = encode_base64url($resume_link);
82+
83+
$transaction->{resume_link} = "/user/transactions/" . $transaction_id . "/resume?link=" . $encoded_resume_link;
9084
return;
9185
}
9286

lib/ChGovUk/Controllers/User/Transactions/Resume.pm

Lines changed: 29 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -7,134 +7,55 @@ use CH::Util::Pager;
77
use CH::Util::DateHelper;
88
use POSIX qw(strftime);
99
use Mojo::IOLoop::Delay;
10-
use Digest::SHA qw(sha1);
1110
use MIME::Base64 qw(encode_base64url);
12-
use Data::Dumper;
1311

1412
#-------------------------------------------------------------------------------
13+
1514
sub resume {
1615
my ($self) = @_;
17-
18-
my $encoded_id = $self->param('id');
19-
16+
17+
$self->render_later;
18+
19+
my $encoded_resume_link = $self->param('link');
20+
2021
$self->ch_api->transactions($self->stash('transaction_number'))->get->on(
2122
success => sub {
2223
my ($api, $tx) = @_;
23-
my $transaction = $tx->success->json;
24-
25-
my $resource_and_id_match = 0;
26-
27-
for my $resource ( keys %{$transaction->{resources}}) {
28-
if ( encode_base64url(sha1($resource)) eq $encoded_id){
29-
$resource_and_id_match = 1;
30-
$self->_build_resume_link($transaction, $transaction->{resources}->{$resource} );
31-
last;
32-
}
33-
}
34-
if ( $resource_and_id_match eq 0) {
35-
error "None of the resource keys could be matched with provided encoded id";
36-
$self->render_not_found;
37-
}
24+
25+
my $transaction = $tx->success->json;
26+
27+
my $resume_link = $transaction->{resume_journey_uri};
28+
29+
if (encode_base64url($resume_link) ne $encoded_resume_link) {
30+
my $message = "The transaction resume link does not match the encoded link url";
31+
error "%s", $message;
32+
$self->render_exception($message);
33+
}
34+
35+
# TODO: When support is added for third party (i.e. external) resume links, a check will need
36+
# to be performed here to verify that the resume link matches a trusted domain for a given
37+
# software vendor. A mechanism will be needed for adding the vendor to the transaction resource
38+
# at creation time, and for registering one or more trusted domains that should be checked here.
39+
# All Companies House resume links should be relative (i.e. not include the protocol or domain).
40+
41+
$self->redirect_to($resume_link);
3842
},
3943
failure => sub {
4044
my ($api, $tx) = @_;
45+
4146
my ($error_message, $error_code) = ($tx->error->{message}, $tx->error->{code});
42-
my $message = 'Failed to fetch transaction '.$self->stash('transaction_number').': '.$error_code.' '.$error_message;
47+
my $message = 'Failed to fetch transaction ' . $self->stash('transaction_number') . ': ' . $error_code . ' ' . $error_message;
4348
error "%s", $message [API];
4449
$self->render_exception($message);
4550
},
4651
error => sub {
4752
my ($api, $error) = @_;
48-
my $message = 'Failed to fetch transaction '.$self->stash('transaction_number').': '.$error;
49-
error "%s", $message [ROUTING];
50-
$self->render_exception($message);
51-
}
52-
)->execute;
53-
$self->render_later;
54-
};
55-
56-
#-------------------------------------------------------------------------------
57-
58-
sub _build_resume_link {
59-
my ($self, $transaction, $resource )= @_;
60-
61-
my $company_number = $transaction->{company_number};
62-
my $transaction_id = $transaction->{id};
63-
my $kind = $resource->{kind};
64-
my $abridged_accounts_id;
65-
my $resume_link;
66-
67-
my $resource_delay = Mojo::IOLoop::Delay->new;
68-
my $resource_delay_end;
69-
70-
if ( $kind eq "accounts") {
71-
$resource_delay_end = $resource_delay->begin(0);
72-
$self->_get_accounts_document($resource->{links}->{resource}, $resource_delay_end);
73-
}
74-
75-
$resource_delay->on(
76-
finish => sub {
77-
my ($delay, $resource_link, $accounts_id) = @_;
7853

79-
if ( $resource_link && $kind eq "accounts" ){
80-
if ( $resource_link =~/abridged\/(.*)$/ ) {
81-
$abridged_accounts_id = $1;
82-
}
83-
$resume_link = "/company/" . $company_number . "/transaction/" . $transaction_id . "/submit-abridged-accounts/" . $accounts_id ."/" . $abridged_accounts_id . "/accounting-reference-date";
84-
}
85-
86-
$self->redirect_to($resume_link);
87-
},
88-
error => sub {
89-
my ($delay, $err) = @_;
90-
91-
my $message = "Error getting accounts links : %s" . $err;
92-
error "Error getting accounts links : %s". $err;
54+
my $message = 'Error when fetching transaction ' . $self->stash('transaction_number') . ': ' . $error;
55+
error "%s", $message [ROUTING];
9356
$self->render_exception($message);
9457
}
95-
);
96-
97-
}
98-
99-
100-
# ------------------------------------------------------------------------------
101-
102-
sub _get_accounts_document {
103-
my ($self, $resource_link, $callback) = @_;
104-
105-
$self->ch_api->uri($resource_link)->get->on(
106-
success => sub {
107-
my ($api, $tx) = @_;
108-
109-
my $accounts = $tx->success->json;
110-
111-
if ( defined $accounts->{links}->{abridged_accounts} ){
112-
$callback->($accounts->{links}->{abridged_accounts}, $accounts->{id});
113-
}
114-
return $callback->();
115-
},
116-
failure => sub {
117-
my ($api, $tx) = @_;
118-
119-
my $error_code = $tx->error->{code} // 0;
120-
my $error_message = $tx->error->{message};
121-
122-
if (defined $error_code and $error_code == 404) {
123-
error " Resource [%s] not found", $resource_link;
124-
$self->render_not_found;
125-
}
126-
my $message = "Error getting accounts links : %s". $resource_link;
127-
error "Error getting accounts links : %s", $resource_link [ RESUME LINK ];
128-
$self->render_exception($message);
129-
},
130-
error => sub {
131-
my ($api, $error) = @_;
132-
133-
my $message = "Error getting accounts links : %s". $resource_link;
134-
error "Error getting accounts links : %s", $resource_link [ RESUME LINK ];
135-
$self->render_exception($message);
136-
}
137-
)->execute;
58+
)->execute;
13859
}
13960

14061
# ------------------------------------------------------------------------------

templates/includes/transaction.tx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
<div id="process-spinner" class="process-spinner"></div>
8585
<span id="process-status" class="process-status">Status: in-progress</span>
8686
</div>
87-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
87+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
8888
</div>
8989
% }
9090
% }
@@ -109,7 +109,7 @@
109109
<div id="process-spinner" class="process-spinner"></div>
110110
<span id="process-status" class="process-status">Status: in-progress</span>
111111
</div>
112-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
112+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
113113
</div>
114114
% }
115115
% }
@@ -155,7 +155,7 @@
155155
<div id="process-spinner" class="process-spinner"></div>
156156
<span id="process-status" class="process-status">Status: in-progress</span>
157157
</div>
158-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
158+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html" data-user-id="<% $c.user_id %>"/>
159159
</div>
160160
% }
161161
% }

templates/includes/transactions.tx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
% if $transaction.status == "open" {
5050
<div class="column-third column-status" id="status-<% $~transaction.count %>">
5151
Status<strong> Incomplete </strong>
52-
% if $transaction.resume_link && !$c.can_do('/admin/transaction-lookup'){
52+
% if $transaction.resume_link && !$c.can_do('/admin/transaction-lookup') {
5353
<a class="piwik-event" data-event-id="resume" id="transaction-<% $~transaction.count %>-resume-link" href="<% $transaction.resume_link %>">Resume</a>
5454
% }
5555
</div>
@@ -102,7 +102,7 @@
102102
<div id="process-spinner" class="process-spinner"></div>
103103
<span id="process-status" class="process-status">Status: in-progress</span>
104104
</div>
105-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
105+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
106106
</div>
107107
% }
108108
% }
@@ -127,7 +127,7 @@
127127
<div id="process-spinner" class="process-spinner"></div>
128128
<span id="process-status" class="process-status">Status: in-progress</span>
129129
</div>
130-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
130+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
131131
</div>
132132
% }
133133
% }
@@ -173,7 +173,7 @@
173173
<div id="process-spinner" class="process-spinner"></div>
174174
<span id="process-status" class="process-status">Status: in-progress</span>
175175
</div>
176-
<input type="hidden" id="document-data" data-resource-url="/private<% $transaction.links.self %>" data-resource-id="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
176+
<input type="hidden" id="document-data" data-resource-url="<% $filing.value.links.resource %>" data-content-type="text/html" data-document-type="text/html"/>
177177
</div>
178178
% }
179179
% }

0 commit comments

Comments
 (0)