66} from '@defra/forms-engine-plugin'
77import { getCacheService } from '@defra/forms-engine-plugin/engine/helpers.js'
88import { stateSchema } from '@defra/forms-engine-plugin/schema.js'
9- import { slugSchema } from '@defra/forms-model'
9+ import { FormStatus , slugSchema } from '@defra/forms-model'
1010import Boom from '@hapi/boom'
1111import * as Hoek from '@hapi/hoek'
1212import { StatusCodes } from 'http-status-codes'
@@ -34,8 +34,8 @@ import {
3434 hasState
3535} from '~/src/server/routes/save-and-exit-helper.js'
3636import {
37- getFormMetadata ,
38- getFormMetadataById
37+ getFormMetadataById ,
38+ getFormMetadataWithGuard
3939} from '~/src/server/services/formMetadataGuards.js'
4040import {
4141 getSaveAndExitDetails ,
@@ -83,7 +83,7 @@ export default [
8383 async handler ( request , h ) {
8484 const { params } = request
8585 const { slug, state : status } = params
86- const metadata = await getFormMetadata ( slug )
86+ const metadata = await getFormMetadataWithGuard ( slug , status )
8787 const model = detailsViewModel ( metadata , status )
8888
8989 // Store any outstanding data from the current page in a special attribute
@@ -153,7 +153,7 @@ export default [
153153 const { email, securityQuestion, securityAnswer } = payload
154154 // Throws the offline marker BEFORE publishSaveAndExitEvent so we never
155155 // emit a magic-link email for a form the user can no longer reach.
156- const metadata = await getFormMetadata ( slug )
156+ const metadata = await getFormMetadataWithGuard ( slug , status )
157157
158158 const cacheService = getCacheService ( request . server )
159159
@@ -206,7 +206,7 @@ export default [
206206 async failAction ( request , h , err ) {
207207 const { params, payload } = request
208208 const { slug, state : status } = params
209- const metadata = await getFormMetadata ( slug )
209+ const metadata = await getFormMetadataWithGuard ( slug , status )
210210
211211 const model = detailsViewModel (
212212 metadata ,
@@ -231,7 +231,7 @@ export default [
231231 async handler ( request , h ) {
232232 const { params } = request
233233 const { slug, state : status } = params
234- const metadata = await getFormMetadata ( slug )
234+ const metadata = await getFormMetadataWithGuard ( slug , status )
235235
236236 // Get the email from session
237237 const email = /** @type {string } */ (
@@ -348,13 +348,13 @@ export default [
348348 path : '/resume-form-verify/{formId}/{magicLinkId}/{slug}/{state?}' ,
349349 async handler ( request , h ) {
350350 const { params } = request
351- const { formId, magicLinkId } = params
351+ const { formId, magicLinkId, state } = params
352352
353353 // Assert the form is online BEFORE looking up save-and-exit details so
354354 // we don't leak magic-link validity timing for offline forms.
355355 let form
356356 try {
357- form = await getFormMetadataById ( formId )
357+ form = await getFormMetadataById ( formId , state )
358358 } catch ( err ) {
359359 if ( isOfflineBoom ( err ) ) {
360360 throw err
@@ -398,7 +398,7 @@ export default [
398398
399399 if ( slug ) {
400400 try {
401- await getFormMetadata ( slug )
401+ await getFormMetadataWithGuard ( slug , FormStatus . Live )
402402 } catch ( err ) {
403403 if ( isOfflineBoom ( err ) ) {
404404 throw err
@@ -433,12 +433,12 @@ export default [
433433 path : '/resume-form-verify/{formId}/{magicLinkId}/{slug}/{state?}' ,
434434 async handler ( request , h ) {
435435 const { params, payload } = request
436- const { formId, magicLinkId } = params
436+ const { formId, magicLinkId, state } = params
437437 const { securityAnswer } = payload
438438
439439 let form
440440 try {
441- form = await getFormMetadataById ( formId )
441+ form = await getFormMetadataById ( formId , state )
442442 } catch ( err ) {
443443 if ( isOfflineBoom ( err ) ) {
444444 throw err
@@ -516,7 +516,10 @@ export default [
516516 return h . redirect ( ERROR_BASE_URL ) . takeover ( )
517517 }
518518
519- const form = await getFormMetadataById ( resumeDetails . form . id )
519+ const form = await getFormMetadataById (
520+ resumeDetails . form . id ,
521+ params . state
522+ )
520523
521524 const model = passwordViewModel (
522525 form ,
@@ -532,15 +535,15 @@ export default [
532535 }
533536 } ) ,
534537 /**
535- * @satisfies {ServerRoute<{ Params: { slug: string, state?: string } }> }
538+ * @satisfies {ServerRoute<{ Params: { slug: string, state?: FormStatus } }> }
536539 */
537540 ( {
538541 method : 'GET' ,
539542 path : '/resume-form-success/{slug}/{state?}' ,
540543 async handler ( request , h ) {
541544 const { params } = request
542545 const { slug, state } = params
543- const form = await getFormMetadata ( slug )
546+ const form = await getFormMetadataWithGuard ( slug , state )
544547
545548 const model = resumeSuccessViewModel (
546549 form ,
@@ -565,6 +568,5 @@ export default [
565568/**
566569 * @import { ServerRoute } from '@hapi/hapi'
567570 * @import { CacheRequest, FormPayload } from '@defra/forms-engine-plugin/engine/types.js'
568- * @import { FormStatus } from '@defra/forms-model'
569571 * @import { BoomErrorCustomSaveAndExit, SaveAndExitParams, SaveAndExitPayload, SaveAndExitResumePasswordPayload, SaveAndExitResumePasswordParams } from '~/src/server/models/save-and-exit.js'
570572 */
0 commit comments