@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
228 lines (215 loc) • 7.03 kB
JavaScript
import {
CONTROLLER,
NEW_TRANSACTION,
ADD_PERMISSION,
AGREED,
COOKIES,
ACCESSIBILITY_STATEMENT,
PRIVACY_POLICY,
REFUND_POLICY,
AUTHENTICATE,
RENEWAL_PUBLIC,
IDENTIFY,
OS_TERMS,
PROCESS_ANALYTICS_PREFERENCES,
NEW_PRICES,
RECURRING_TERMS_CONDITIONS
} from '../uri.js'
import {
SESSION_COOKIE_NAME_DEFAULT,
CSRF_TOKEN_COOKIE_NAME_DEFAULT,
ALB_COOKIE_NAME,
ALBCORS_COOKIE_NAME,
ANALYTICS
} from '../constants.js'
import addPermission from '../session-cache/add-permission.js'
import newSessionHandler from '../handlers/new-session-handler.js'
import agreedHandler from '../handlers/agreed-handler.js'
import controllerHandler from '../handlers/controller-handler.js'
import authenticationHandler from '../handlers/authentication-handler.js'
import { addLanguageCodeToUri } from '../processors/uri-helper.js'
import analytics, { checkAnalyticsCookiesPage } from '../handlers/analytics-handler.js'
import { welshEnabledAndApplied } from '../processors/page-language-helper.js'
const gtmContainerIdOrNull = () => process.env.GTM_CONTAINER_ID || false
const simpleView = view => ({
method: 'GET',
path: view.uri,
handler: async (request, h) => {
const mssgs = request.i18n.getCatalog()
const altLang = request.i18n.getLocales().filter(locale => locale !== request.i18n.getLocale())
const gtmContainerId = gtmContainerIdOrNull()
const pageLanguageSetToWelsh = welshEnabledAndApplied(request)
const recurringUri = addLanguageCodeToUri(request, RECURRING_TERMS_CONDITIONS.uri)
const backUri = request?.headers?.referer?.endsWith(recurringUri) ? recurringUri : addLanguageCodeToUri(request, CONTROLLER.uri)
return h.view(view.page, {
mssgs,
altLang,
gtmContainerId,
pageLanguageSetToWelsh,
uri: {
back: backUri
}
})
}
})
const cookiesView = (request, analyticsCache) => {
const altLang = request.i18n.getLocales().filter(locale => locale !== request.i18n.getLocale())
const gtmContainerId = gtmContainerIdOrNull()
const pageLanguageSetToWelsh = welshEnabledAndApplied(request)
const recurringUri = addLanguageCodeToUri(request, RECURRING_TERMS_CONDITIONS.uri)
const backUri = request?.headers?.referer?.endsWith(recurringUri) ? recurringUri : addLanguageCodeToUri(request, CONTROLLER.uri)
const analyticsResponse = analyticsCache?.[ANALYTICS.acceptTracking] === true ? 'accept' : 'reject'
return {
altLang,
gtmContainerId,
pageLanguageSetToWelsh,
mssgs: request.i18n.getCatalog(),
cookie: {
csrf: process.env.CSRF_TOKEN_COOKIE_NAME || CSRF_TOKEN_COOKIE_NAME_DEFAULT,
sess: process.env.SESSION_COOKIE_NAME || SESSION_COOKIE_NAME_DEFAULT,
alb: ALB_COOKIE_NAME,
albcors: ALBCORS_COOKIE_NAME
},
uri: {
back: backUri,
cookies: addLanguageCodeToUri(request, COOKIES.uri)
},
analyticsResponse
}
}
export default [
{
method: 'GET',
path: '/',
handler: async (_request, h) => h.redirectWithLanguageCode(CONTROLLER.uri)
},
{
method: 'GET',
path: CONTROLLER.uri,
handler: controllerHandler
},
{
method: 'GET',
path: AUTHENTICATE.uri,
handler: authenticationHandler
},
{
method: 'GET',
path: RENEWAL_PUBLIC.uri,
handler: async (request, h) => {
await request.cache().initialize()
await addPermission(request)
if (request.params.referenceNumber) {
await request.cache().helpers.status.setCurrentPermission({ referenceNumber: request.params.referenceNumber })
}
return h.redirectWithLanguageCode(IDENTIFY.uri)
}
},
{
method: 'GET',
path: AGREED.uri,
handler: agreedHandler
},
{
method: 'GET',
path: NEW_TRANSACTION.uri,
handler: newSessionHandler
},
{
method: 'GET',
path: ADD_PERMISSION.uri,
handler: async (request, h) => {
await addPermission(request)
return h.redirectWithLanguageCode(CONTROLLER.uri)
}
},
{
method: 'GET',
path: COOKIES.uri,
handler: async (request, h) => {
const analyticsCache = await request.cache().helpers.analytics.get()
return h.view(COOKIES.page, cookiesView(request, analyticsCache))
}
},
{
method: 'POST',
path: COOKIES.uri,
handler: async (request, h) => {
await checkAnalyticsCookiesPage(request)
const analyticsCache = await request.cache().helpers.analytics.get()
const showNotification = request.payload?.analyticsResponse !== undefined ? true : undefined
const csrfToken = await request.server.plugins.crumb.generate(request)
return h.view(COOKIES.page, {
...cookiesView(request, analyticsCache),
showNotification,
SHOW_WELSH_CONTENT: process.env.SHOW_WELSH_CONTENT?.toLowerCase() === 'true',
CSRF_TOKEN_NAME: process.env.CSRF_TOKEN_COOKIE_NAME || CSRF_TOKEN_COOKIE_NAME_DEFAULT,
CSRF_TOKEN_VALUE: csrfToken
})
}
},
{
method: 'GET',
path: NEW_PRICES.uri,
handler: async (request, h) => {
const altLang = request.i18n.getLocales().filter(locale => locale !== request.i18n.getLocale())
const gtmContainerId = gtmContainerIdOrNull()
const pageLanguageSetToWelsh = welshEnabledAndApplied(request)
return h.view(NEW_PRICES.page, {
altLang,
gtmContainerId,
pageLanguageSetToWelsh,
mssgs: request.i18n.getCatalog(),
uri: {
back: addLanguageCodeToUri(request, CONTROLLER.uri)
}
})
}
},
{
method: 'GET',
path: RECURRING_TERMS_CONDITIONS.uri,
handler: async (request, h) => {
const altLang = request.i18n.getLocales().filter(locale => locale !== request.i18n.getLocale())
const gtmContainerId = gtmContainerIdOrNull()
const pageLanguageSetToWelsh = welshEnabledAndApplied(request)
return h.view(RECURRING_TERMS_CONDITIONS.page, {
altLang,
gtmContainerId,
pageLanguageSetToWelsh,
mssgs: request.i18n.getCatalog(),
uri: {
privacy: addLanguageCodeToUri(request, PRIVACY_POLICY.uri),
refund: addLanguageCodeToUri(request, REFUND_POLICY.uri)
}
})
}
},
{
method: 'POST',
path: PROCESS_ANALYTICS_PREFERENCES.uri,
handler: analytics
},
{
method: 'GET',
path: PRIVACY_POLICY.uri,
handler: async (request, h) => {
const altLang = request.i18n.getLocales().filter(locale => locale !== request.i18n.getLocale())
const gtmContainerId = gtmContainerIdOrNull()
const pageLanguageSetToWelsh = welshEnabledAndApplied(request)
return h.view(PRIVACY_POLICY.page, {
altLang,
gtmContainerId,
pageLanguageSetToWelsh,
mssgs: request.i18n.getCatalog(),
uri: {
back: addLanguageCodeToUri(request, CONTROLLER.uri),
cookies: addLanguageCodeToUri(request, COOKIES.uri)
}
})
}
},
simpleView(ACCESSIBILITY_STATEMENT),
simpleView(REFUND_POLICY),
simpleView(OS_TERMS)
]