hof 22.7.0-service-paused-beta.3 → 22.7.0-service-paused-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,47 +1,47 @@
1
- /**
2
- *
3
- * @fileOverview
4
- * Provides custom behavior for rendering a service down template when a service needs to be temporarily paused. This includes
5
- * - Redirecting the user to a 'service down' page
6
- * - Setting custom content and titles on the service down page.
7
- *
8
- * @module servicePausedBehaviour
9
- * @requires ../../config/hof-defaults
10
- * @param {Class} superclass - The class to be extended.
11
- * @returns {Class} - The extended class with service down handling functionality.
12
- */
1
+ // /**
2
+ // *
3
+ // * @fileOverview
4
+ // * Provides custom behavior for rendering a service down template when a service needs to be temporarily paused. This includes
5
+ // * - Redirecting the user to a 'service down' page
6
+ // * - Setting custom content and titles on the service down page.
7
+ // *
8
+ // * @module servicePausedBehaviour
9
+ // * @requires ../../config/hof-defaults
10
+ // * @param {Class} superclass - The class to be extended.
11
+ // * @returns {Class} - The extended class with service down handling functionality.
12
+ // */
13
13
 
14
- 'use strict';
14
+ // 'use strict';
15
15
 
16
- const config = require('../../config/hof-defaults');
17
- const logger = require('../../lib/logger')(config);
16
+ // const config = require('../../config/hof-defaults');
17
+ // const logger = require('../../lib/logger')(config);
18
18
 
19
- module.exports = superclass => class extends superclass {
20
- getValues(req, res, callback) {
21
- return super.getValues(req, res, (err, values) => {
22
- if (err) {
23
- logger.error(`Error getting values: ${err}`);
24
- return callback(err, values);
25
- }
26
- if (config.servicePaused === true || config.servicePaused === 'true') {
27
- logger.info(`Service is paused. Redirecting...`);
28
- return res.redirect('/service-paused');
29
- }
30
- return callback(null, values);
31
- });
32
- }
33
- locals(req, res) {
34
- // set default service unavailable message
35
- const superLocals = super.locals(req, res);
36
- if (config.servicePaused === true || config.servicePaused === 'true') {
37
- superLocals.header = req.translate('pages.service-paused.header');
38
- superLocals.title = req.translate('pages.service-paused.title');
39
- superLocals.message = req.translate('pages.service-paused.message');
40
- superLocals['answers-saved'] = req.translate('pages.service-paused.answers-saved');
41
- superLocals.contact = req.translate('pages.service-paused.contact');
42
- superLocals.alternative = req.translate('pages.service-paused.alternative');
43
- return superLocals;
44
- }
45
- return superLocals;
46
- }
47
- };
19
+ // module.exports = superclass => class extends superclass {
20
+ // getValues(req, res, callback) {
21
+ // return super.getValues(req, res, (err, values) => {
22
+ // if (err) {
23
+ // logger.error(`Error getting values: ${err}`);
24
+ // return callback(err, values);
25
+ // }
26
+ // if (config.servicePaused === true || config.servicePaused === 'true') {
27
+ // logger.info(`Service is paused. Redirecting...`);
28
+ // return res.redirect('/service-paused');
29
+ // }
30
+ // return callback(null, values);
31
+ // });
32
+ // }
33
+ // locals(req, res) {
34
+ // // set default service unavailable message
35
+ // const superLocals = super.locals(req, res);
36
+ // if (config.servicePaused === true || config.servicePaused === 'true') {
37
+ // superLocals.header = req.translate('pages.service-paused.header');
38
+ // superLocals.title = req.translate('pages.service-paused.title');
39
+ // superLocals.message = req.translate('pages.service-paused.message');
40
+ // superLocals['answers-saved'] = req.translate('pages.service-paused.answers-saved');
41
+ // superLocals.contact = req.translate('pages.service-paused.contact');
42
+ // superLocals.alternative = req.translate('pages.service-paused.alternative');
43
+ // return superLocals;
44
+ // }
45
+ // return superLocals;
46
+ // }
47
+ // };
@@ -26,5 +26,10 @@
26
26
  "message": "You have submitted too many applications in a short space of time.",
27
27
  "pre-time-to-wait": "Please try again in ",
28
28
  "post-time-to-wait": " minutes."
29
- }
29
+ },
30
+ "service-paused": {
31
+ "title": "Sorry, the service is unavailable",
32
+ "message": "This service is temporarily unavailable",
33
+ "answers-saved": "Your answers have not been saved"
34
+ }
30
35
  }
@@ -1,24 +1,16 @@
1
1
  {{<layout}}
2
- {{$journeyHeader}}
3
- {{#t}}journey.header{{/t}}
4
- {{/journeyHeader}}
5
-
6
- {{$propositionHeader}}
7
- {{> partials-navigation}}
8
- {{/propositionHeader}}
9
-
10
2
  {{$header}}
11
- {{header}}
3
+ {{title}}
12
4
  {{/header}}
13
-
14
5
  {{$content}}
15
- <p>{{message}}</p>
16
- <p>{{answers-saved}}</p>
6
+ <h1 class="govuk-heading-l">{{{title}}}</h1>
7
+ <p class="govuk-body">{{message}}</p>
8
+ <p class="govuk-body">{{answers-saved}}</p>
17
9
  {{#contact}}
18
- <p>{{contact}}</p>
10
+ <p class="govuk-body">{{contact}}</p>
19
11
  {{/contact}}
20
12
  {{#alternative}}
21
- <p>{{alternative}}</p>
13
+ <p class="govuk-body">{{alternative}}</p>
22
14
  {{/alternative}}
23
15
  {{/content}}
24
16
  {{/layout}}
package/index.js CHANGED
@@ -51,6 +51,12 @@ const loadRoutes = (app, config) => {
51
51
  };
52
52
 
53
53
  const applyErrorMiddlewares = (app, config) => {
54
+ if (config.servicePaused === true || config.servicePaused === 'true') {
55
+ app.use(hofMiddleware.servicePaused({
56
+ logger: config.logger
57
+ }));
58
+ }
59
+
54
60
  app.use(hofMiddleware.notFound({
55
61
  logger: config.logger
56
62
  }));
@@ -155,6 +161,7 @@ function bootstrap(options) {
155
161
  res.locals.sessionTimeoutWarningContent = config.sessionTimeoutWarningContent;
156
162
  res.locals.exitFormContent = config.exitFormContent;
157
163
  res.locals.saveExitFormContent = config.saveExitFormContent;
164
+ res.locals.servicePaused = config.servicePaused;
158
165
  next();
159
166
  });
160
167
 
@@ -231,12 +238,16 @@ function bootstrap(options) {
231
238
  // Set up routing so <YOUR-SITE-URL>/assets are served from /node_modules/govuk-frontend/govuk/assets
232
239
  app.use('/assets', express.static(path.join(__dirname, '/node_modules/govuk-frontend/govuk/assets')));
233
240
 
241
+ // Check if service has been paused and redirect accordingly
234
242
  if (config.servicePaused === true || config.servicePaused === 'true') {
235
- app.use('/service-paused', (req, res) => {
236
- const locals = Object.assign({}, req.translate('pages.service-paused'));
237
- res.render('service-paused', locals);
243
+ app.use((req, res, next) => {
244
+ if (req.path !== '/service-paused') {
245
+ return res.redirect('/service-paused');
246
+ }
247
+ next();
238
248
  });
239
- }
249
+ };
250
+
240
251
 
241
252
  if (config.getAccessibility === true) {
242
253
  deprecate(
@@ -2,6 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  const rateLimitsConfig = require('../config/rate-limits');
5
+ const hofDefaultsConfig = require('../config/hof-defaults');
5
6
 
6
7
  const errorTitle = code => `${code}_ERROR`;
7
8
  const errorMsg = code => `There is a ${code}_ERROR`;
@@ -55,6 +56,21 @@ const getContent = (err, translate) => {
55
56
  content.postTimeToWait = (translate && translate('errors.submission-rate-limit.post-time-to-wait'));
56
57
  }
57
58
 
59
+ // if (hofDefaultsConfig.servicePaused === true || hofDefaultsConfig.servicePaused === 'true') {
60
+ // console.log('hello')
61
+ // // if(err.code === 'SERVICE_PAUSED'){
62
+ // err.status = 503;
63
+ // err.template = 'service-paused';
64
+ // err.title = (translate && translate('errors.service-paused.title'));
65
+ // err.message = (translate && translate('errors.service-paused.message'));
66
+ // err['answers-saved'] = (translate && translate('errors.service-paused.answers-saved'));
67
+ // err.contact = (translate && translate('errors.service-paused.contact'));
68
+ // content.title = (translate && translate('errors.service-paused.title'));
69
+ // content.message = (translate && translate('errors.service-paused.message'));
70
+ // content['answers-saved'] = (translate && translate('errors.service-paused.answers-saved'));
71
+ // content.contact = (translate && translate('errors.service-paused.contact'));
72
+ // }
73
+
58
74
  err.code = err.code || 'UNKNOWN';
59
75
  err.status = err.status || 500;
60
76
 
@@ -5,5 +5,6 @@ module.exports = {
5
5
  errors: require('./errors'),
6
6
  notFound: require('./not-found'),
7
7
  deepTranslate: require('./deep-translate'),
8
- rateLimiter: require('./rate-limiter')
8
+ rateLimiter: require('./rate-limiter'),
9
+ servicePaused: require('./service-paused')
9
10
  };
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const config = require('../config/hof-defaults');
4
+ const getTranslations = translate => {
5
+ const translations = {
6
+ title: 'Sorry, this service is unavailable',
7
+ message: 'This service is temporarily unavailable',
8
+ 'answers-saved': 'Your answers have not been saved'
9
+ };
10
+
11
+ if (translate) {
12
+ const contact = translate('errors.service-paused.contact');
13
+ const alternative = translate('errors.service-paused.alternative');
14
+
15
+ translations.title = translate('errors.service-paused.title');
16
+ translations.message = translate('errors.service-paused.message');
17
+ translations['answers-saved'] = translate('errors.service-paused.answers-saved');
18
+
19
+ // Only render contact and alternative information if the key has a value set
20
+ if (contact === 'errors.service-paused.contact') {
21
+ translations.contact = ''
22
+ } else {
23
+ translations.contact = translate('errors.service-paused.contact');
24
+ }
25
+ if (alternative === 'errors.service-paused.alternative') {
26
+ translations.alternative = ''
27
+ } else {
28
+ translations.alternative = translate('errors.service-paused.alternative');
29
+ }
30
+ }
31
+ return translations;
32
+ };
33
+
34
+ module.exports = options => {
35
+ const opts = options || {};
36
+ const logger = opts.logger;
37
+
38
+ return (req, res) => {
39
+ const translate = opts.translate || req.translate;
40
+ const translations = getTranslations(translate);
41
+ if (logger && logger.warn) {
42
+ logger.warn(`Cannot find: ${req.url}`);
43
+ }
44
+ res.status(503).render('service-paused', {
45
+ title: translations.title,
46
+ message: translations.message,
47
+ 'answers-saved': translations['answers-saved'],
48
+ contact: translations.contact,
49
+ alternative: translations.alternative
50
+ });
51
+ };
52
+ };
53
+
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hof",
3
3
  "description": "A bootstrap for HOF projects",
4
- "version": "22.7.0-service-paused-beta.3",
4
+ "version": "22.7.0-service-paused-beta.5",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
7
7
  "author": "HomeOffice",
package/sandbox/.env CHANGED
@@ -1 +1 @@
1
- SERVICE_DOWN=true
1
+ SERVICE_PAUSED=true
@@ -1,4 +1,9 @@
1
1
  {
2
+ "errors": {
3
+ "service-paused": {
4
+ "contact": "You can email for more information"
5
+ }
6
+ },
2
7
  "exit": {
3
8
  "header": "You have left this form",
4
9
  "title": "You have left this form"
@@ -0,0 +1,5 @@
1
+ {
2
+ "service-paused": {
3
+ "contact": "You can email for more information"
4
+ }
5
+ }
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "scripts": {
10
10
  "start": "node server.js",
11
- "start:dev": "HOF_SANDBOX=true ../bin/hof-build watch",
11
+ "start:dev": "HOF_SANDBOX=true ../bin/hof-build watch --env",
12
12
  "dev": "yarn && GA_TAG=test nodemon server",
13
13
  "build": "HOF_SANDBOX=true ../bin/hof-build",
14
14
  "postinstall": "yarn run build"
package/sandbox/server.js CHANGED
@@ -10,7 +10,7 @@ bootstrap({
10
10
  ],
11
11
  behaviours: [
12
12
  require('../').components.sessionTimeoutWarning,
13
- require('../').components.servicePaused,
13
+ // require('../').components.servicePaused,
14
14
  ],
15
15
  rateLimits: {
16
16
  requests: {