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.
- package/components/service-paused/index.js +44 -44
- package/frontend/template-partials/translations/src/en/errors.json +6 -1
- package/frontend/template-partials/views/service-paused.html +6 -14
- package/index.js +15 -4
- package/middleware/errors.js +16 -0
- package/middleware/index.js +2 -1
- package/middleware/service-paused.js +53 -0
- package/package.json +1 -1
- package/sandbox/.env +1 -1
- package/sandbox/apps/sandbox/translations/en/default.json +5 -0
- package/sandbox/apps/sandbox/translations/src/en/errors.json +5 -0
- package/sandbox/package.json +1 -1
- package/sandbox/server.js +1 -1
@@ -1,47 +1,47 @@
|
|
1
|
-
/**
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
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
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
-
{{
|
3
|
+
{{title}}
|
12
4
|
{{/header}}
|
13
|
-
|
14
5
|
{{$content}}
|
15
|
-
<
|
16
|
-
<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(
|
236
|
-
|
237
|
-
|
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(
|
package/middleware/errors.js
CHANGED
@@ -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
|
|
package/middleware/index.js
CHANGED
@@ -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
package/sandbox/.env
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
SERVICE_PAUSED=true
|
package/sandbox/package.json
CHANGED
@@ -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"
|