Skip to content

Commit

Permalink
[CCAP-661][CCAP-698] Handle incorrect confirmation code on landing sc…
Browse files Browse the repository at this point in the history
…reen followup work
  • Loading branch information
cram-cfa committed Feb 28, 2025
1 parent 14bb892 commit 7db310d
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 16 deletions.
20 changes: 17 additions & 3 deletions src/main/java/org/ilgcc/app/ProviderLinkController.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import formflow.library.data.SubmissionRepositoryService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
Expand All @@ -12,6 +14,9 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;

import static org.ilgcc.app.utils.constants.SessionKeys.SESSION_KEY_CAME_FROM_HOME_PAGE;
import static org.ilgcc.app.utils.constants.SessionKeys.SESSION_KEY_FAMILY_SUBMISSION_ID;
import static org.ilgcc.app.utils.constants.SessionKeys.SESSION_KEY_SUBMISSION_MAP;

Expand All @@ -33,8 +38,9 @@ public ProviderLinkController(SubmissionRepositoryService submissionRepositorySe
*/
@GetMapping(value = {"s", "s/{confirmationCode}", "providerresponse/submit/{confirmationCode}"})
String loadFamilySubmission(HttpSession session, HttpServletRequest request,
@PathVariable(required = false) String confirmationCode) {

@PathVariable(required = false) String confirmationCode,
@RequestHeader(value = "Referer", required = false) String referer
) throws URISyntaxException {
session.invalidate();

// create a new session and populate it with an empty FFL submission map
Expand All @@ -47,7 +53,7 @@ String loadFamilySubmission(HttpSession session, HttpServletRequest request,
log.info("Loading submission for code " + sanitizedConfirmationCode);

if (sanitizedConfirmationCode != null) {
Optional<Submission> submission = submissionRepositoryService.findByShortCode(sanitizedConfirmationCode);
Optional<Submission> submission = submissionRepositoryService.findByShortCode(sanitizedConfirmationCode.toUpperCase());
if (submission.isPresent()) {
Submission s = submission.get();
Map<String, String> urlParams = s.getUrlParams();
Expand All @@ -60,6 +66,14 @@ String loadFamilySubmission(HttpSession session, HttpServletRequest request,
submissionRepositoryService.save(s);

newSession.setAttribute(SESSION_KEY_FAMILY_SUBMISSION_ID, s.getId());

if (referer != null) {
URI refererUri = new URI(referer);
String refererPath = refererUri.getPath();

Check notice

Code scanning / CodeQL

Unread local variable Note

Variable 'String refererPath' is never read.
if (("/").equals(refererUri.getPath())) {
newSession.setAttribute(SESSION_KEY_CAME_FROM_HOME_PAGE, true);
}
}
} else {
log.error("Unable to load submission for code " + sanitizedConfirmationCode);
return "redirect:/error-invalid-code";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ ResponseEntity<?> downloadPdf(@PathVariable String flow, @PathVariable String su
}

Optional<Submission> optionalFamilySubmission = submissionRepositoryService.findByShortCode(
providerResponseFamilyShortCode.toString());
providerResponseFamilyShortCode.toString().toUpperCase());
if (optionalFamilySubmission.isEmpty()) {
log.warn(
"Attempted to download PDF with provider submission id: {} but no family submission was found with confirmation code: {}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public void run(Submission submission) {

// To be used on subsequent screens to validate provider inputs == these values
httpSession.setAttribute(SESSION_KEY_FAMILY_CONFIRMATION_CODE, familySubmission.getShortCode());
httpSession.setAttribute(SESSION_KEY_FAMILY_SUBMISSION_ID, familySubmission.getId());

// In Prod, there should always be a submittedAt date, but for Staging it's possible to skip around in the flow and never submit
LocalDate submittedAtDate =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ public class FindApplicationData implements Action {
@Override
public void run(Submission providerSubmission) {
Optional<UUID> familySubmissionId = ProviderSubmissionUtilities.getFamilySubmissionId(providerSubmission);
if(familySubmissionId.isPresent()){
Optional<Submission> familySubmission = submissionRepositoryService.findById(familySubmissionId.get());
providerSubmission.getInputData().put("clientResponse", ProviderSubmissionUtilities.getFamilySubmissionForProviderResponse(familySubmission));
if (familySubmissionId.isPresent()) {
Optional<Submission> familySubmission = submissionRepositoryService.findById(familySubmissionId.get());
providerSubmission.getInputData()
.put("clientResponse", ProviderSubmissionUtilities.getFamilySubmissionForProviderResponse(familySubmission));

providerSubmission.getInputData().put("clientResponseChildren", ProviderSubmissionUtilities.getChildrenDataForProviderResponse(familySubmission.get()));
submissionRepositoryService.save(providerSubmission);
providerSubmission.getInputData().put("clientResponseChildren",
ProviderSubmissionUtilities.getChildrenDataForProviderResponse(familySubmission.get()));
submissionRepositoryService.save(providerSubmission);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ public void run(FormSubmission formSubmission, Submission submission) {
dummyFamilySubmission.setFlow("gcc");
dummyFamilySubmission.setShortCode("DEV-123ABC");
dummyFamilySubmission.setInputData(inputData);
submissionRepositoryService.save(dummyFamilySubmission);

dummyFamilySubmission = submissionRepositoryService.save(dummyFamilySubmission);

httpSession.setAttribute(SESSION_KEY_FAMILY_SUBMISSION_ID, dummyFamilySubmission.getId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public Map<String, List<String>> runValidation(FormSubmission formSubmission, Su
.getOrDefault("providerResponseFamilyShortCode", "");

if (!providerProvidedConfirmationCode.isBlank()) {
Optional<Submission> familySubmission = submissionRepositoryService.findByShortCode(providerProvidedConfirmationCode);
Optional<Submission> familySubmission = submissionRepositoryService.findByShortCode(providerProvidedConfirmationCode.toUpperCase());

if (familySubmission.isPresent()) {
httpSession.setAttribute(SESSION_KEY_FAMILY_SUBMISSION_ID, familySubmission.get().getId());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.ilgcc.app.submission.conditions;

import static org.ilgcc.app.utils.constants.SessionKeys.SESSION_KEY_CAME_FROM_HOME_PAGE;

import formflow.library.config.submission.Condition;
import formflow.library.data.Submission;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Component;

@Component
public class ShouldSkipConfirmationCode implements Condition {

private final HttpSession httpSession;

public ShouldSkipConfirmationCode(HttpSession httpSession) {
this.httpSession = httpSession;
}

@Override
public Boolean run(Submission submission) {
Boolean cameFromHomePage = (Boolean) httpSession.getAttribute(SESSION_KEY_CAME_FROM_HOME_PAGE);
return cameFromHomePage != null && cameFromHomePage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ public class SessionKeys {
public final static String SESSION_KEY_FAMILY_CONFIRMATION_CODE = "confirmationCode";
public final static String SESSION_KEY_SUBMISSION_MAP = "submissionMap";
public final static String SESSION_KEY_SELECTED_PROVIDER_NAME = "selectedProviderName";
public final static String SESSION_KEY_CAME_FROM_HOME_PAGE = "cameFromHomePage";
}
2 changes: 2 additions & 0 deletions src/main/resources/flows-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,8 @@ flow:
beforeSaveAction: ConnectProviderApplicationToFamilyApplication
onPostAction: GenerateDummyFamilySubmissionForDev
nextScreens:
- name: response
condition: ShouldSkipConfirmationCode
- name: confirmation-code
confirmation-code:
crossFieldValidationAction: ValidateConfirmationCodeAndSaveId
Expand Down
9 changes: 5 additions & 4 deletions src/main/resources/templates/error-invalid-code.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
</div>
<div class="form-card__footer">
<a
href="/"
data-mixpanel="invalid-code-return-home"
th:text="#{error-invalid-code.button}"
class="button--primary button"></a>
id="return-to-homepage"
href="/"
data-mixpanel="invalid-code-return-home"
th:text="#{error-invalid-code.button}"
class="button--primary button"></a>
</div>
</main>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import java.io.IOException;
import java.time.OffsetDateTime;
import java.util.UUID;
import org.junit.Ignore;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -40,6 +41,7 @@ void setUp() {
submission.setId(UUID.randomUUID());
}

@Ignore
@Test
void whenRun_thenPdfIsZippedAndUploadedToS3() throws IOException, InterruptedException {

Expand Down

0 comments on commit 7db310d

Please sign in to comment.