hof 21.0.12-axios-beta → 21.0.12-upgrade-vuln-pkgs-beta
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/.nyc_output/ba61bb97-548e-44b6-b2f7-282f850cee4a.json +1 -0
- package/.nyc_output/processinfo/ba61bb97-548e-44b6-b2f7-282f850cee4a.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +21 -0
- package/codeReviewChecklist.md +22 -0
- package/config/hof-defaults.js +8 -0
- package/frontend/govuk-template/build/govuk_template.html +20 -22
- package/frontend/template-mixins/mixins/template-mixins.js +1 -0
- package/frontend/template-mixins/partials/forms/checkbox.html +5 -0
- package/frontend/template-mixins/partials/forms/input-text-group.html +1 -1
- package/frontend/template-mixins/partials/forms/select.html +6 -6
- package/frontend/template-mixins/partials/forms/textarea-group.html +4 -4
- package/frontend/template-partials/views/partials/gatag.html +0 -1
- package/frontend/template-partials/views/partials/head.html +23 -0
- package/lib/ga-tag.js +33 -7
- package/middleware/cookies.js +2 -0
- package/model/apis/axios-settings.js +18 -6
- package/model/apis/html-to-pdf-converter.js +0 -1
- package/model/index.js +95 -94
- package/package.json +9 -11
- package/pull_request.md +16 -0
- package/sandbox/package.json +1 -1
- package/sandbox/yarn.lock +14 -9
- package/.nyc_output/4fc007c9-d6c8-4614-89ce-04c7d6ce9fe5.json +0 -1
- package/.nyc_output/processinfo/4fc007c9-d6c8-4614-89ce-04c7d6ce9fe5.json +0 -1
- package/sandbox/apps/sandbox/translations/en/default.json +0 -224
- package/sandbox/public/css/app.css +0 -2793
- package/sandbox/public/images/icons/icon-caret-left.png +0 -0
- package/sandbox/public/images/icons/icon-complete.png +0 -0
- package/sandbox/public/images/icons/icon-cross-remove-sign.png +0 -0
- package/sandbox/public/js/bundle.js +0 -32888
package/model/index.js
CHANGED
@@ -5,9 +5,7 @@ const _ = require('lodash');
|
|
5
5
|
const axios = require('axios').default;
|
6
6
|
const url = require('url');
|
7
7
|
const EventEmitter = require('events').EventEmitter;
|
8
|
-
|
9
|
-
const axiosSetting = require('./apis/axios-settings')
|
10
|
-
|
8
|
+
const axiosSetting = require('./apis/axios-settings');
|
11
9
|
const REFERENCE = /^\$ref:/;
|
12
10
|
|
13
11
|
function timeDiff(from, to, d) {
|
@@ -32,7 +30,7 @@ module.exports = class Model extends EventEmitter {
|
|
32
30
|
this._request = axios;
|
33
31
|
}
|
34
32
|
|
35
|
-
save(options, callback) {
|
33
|
+
async save(options, callback) {
|
36
34
|
if (typeof options === 'function' && arguments.length === 1) {
|
37
35
|
callback = options;
|
38
36
|
options = {};
|
@@ -40,21 +38,18 @@ module.exports = class Model extends EventEmitter {
|
|
40
38
|
options = {};
|
41
39
|
}
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
}, reqConf.headers || {});
|
53
|
-
return this.request(reqConf, data, callback);
|
54
|
-
});
|
41
|
+
let data = await this.prepare();
|
42
|
+
data = JSON.stringify(data);
|
43
|
+
const reqConf = this.requestConfig(options);
|
44
|
+
reqConf.method = options.method || 'POST';
|
45
|
+
reqConf.headers = Object.assign({
|
46
|
+
'Content-Type': 'application/json',
|
47
|
+
'Content-Length': Buffer.byteLength(data)
|
48
|
+
}, reqConf.headers || {});
|
49
|
+
return await this.request(reqConf, data, callback);
|
55
50
|
}
|
56
51
|
|
57
|
-
fetch(options, callback) {
|
52
|
+
async fetch(options, callback) {
|
58
53
|
if (typeof options === 'function' && arguments.length === 1) {
|
59
54
|
callback = options;
|
60
55
|
options = {};
|
@@ -63,10 +58,10 @@ module.exports = class Model extends EventEmitter {
|
|
63
58
|
}
|
64
59
|
const reqConf = this.requestConfig(options);
|
65
60
|
reqConf.method = options.method || 'GET';
|
66
|
-
return this.request(reqConf, callback);
|
61
|
+
return await this.request(reqConf, callback);
|
67
62
|
}
|
68
63
|
|
69
|
-
delete(options, callback) {
|
64
|
+
async delete(options, callback) {
|
70
65
|
if (typeof options === 'function' && arguments.length === 1) {
|
71
66
|
callback = options;
|
72
67
|
options = {};
|
@@ -75,7 +70,7 @@ module.exports = class Model extends EventEmitter {
|
|
75
70
|
}
|
76
71
|
const reqConf = this.requestConfig(options);
|
77
72
|
reqConf.method = options.method || 'DELETE';
|
78
|
-
return this.request(reqConf, callback);
|
73
|
+
return await this.request(reqConf, callback);
|
79
74
|
}
|
80
75
|
|
81
76
|
requestConfig(options) {
|
@@ -88,7 +83,7 @@ module.exports = class Model extends EventEmitter {
|
|
88
83
|
});
|
89
84
|
}
|
90
85
|
|
91
|
-
request(originalSettings, body, callback) {
|
86
|
+
async request(originalSettings, body, callback) {
|
92
87
|
if (typeof body === 'function' && arguments.length === 2) {
|
93
88
|
callback = body;
|
94
89
|
body = undefined;
|
@@ -96,108 +91,114 @@ module.exports = class Model extends EventEmitter {
|
|
96
91
|
|
97
92
|
let settings = Object.assign({}, originalSettings);
|
98
93
|
settings.timeout = settings.timeout || this.options.timeout;
|
99
|
-
settings = axiosSetting(settings, body)
|
94
|
+
settings = axiosSetting(settings, body);
|
100
95
|
settings = _.omit(settings, urlKeys);
|
101
96
|
this.emit('sync', originalSettings);
|
102
97
|
|
103
|
-
|
98
|
+
try {
|
99
|
+
const authData = await this.auth();
|
104
100
|
let authVal = authData;
|
105
101
|
if (typeof authVal === 'string') {
|
106
|
-
const
|
102
|
+
const [user, ...rest] = authVal.split(':');
|
107
103
|
authVal = {
|
108
|
-
user
|
109
|
-
pass:
|
104
|
+
user,
|
105
|
+
pass: rest.join(':'),
|
110
106
|
sendImmediately: true
|
111
107
|
};
|
112
108
|
}
|
113
|
-
if(authVal) {
|
114
|
-
settings.headers =
|
109
|
+
if (authVal) {
|
110
|
+
settings.headers = {
|
111
|
+
...settings.headers,
|
112
|
+
Authorization: `Bearer ${authVal.bearer}`
|
113
|
+
};
|
115
114
|
}
|
116
|
-
settings.auth = undefined;
|
117
|
-
console.log("SETTINGS ************")
|
118
|
-
console.log(settings)
|
119
|
-
console.log("SETTINGS ************")
|
120
|
-
})
|
121
|
-
.then(() => {
|
122
|
-
const startTime = process.hrtime();
|
123
|
-
let timeoutTimer;
|
124
|
-
|
125
|
-
return new Promise((resolve, reject) => {
|
126
|
-
const _callback = (err, data, statusCode) => {
|
127
|
-
if (timeoutTimer) {
|
128
|
-
clearTimeout(timeoutTimer);
|
129
|
-
timeoutTimer = null;
|
130
|
-
}
|
131
115
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
116
|
+
const startTime = process.hrtime();
|
117
|
+
let timeoutTimer;
|
118
|
+
|
119
|
+
if (timeoutTimer) {
|
120
|
+
clearTimeout(timeoutTimer);
|
121
|
+
timeoutTimer = null;
|
122
|
+
}
|
123
|
+
|
124
|
+
const data = await new Promise((resolve, reject) => {
|
125
|
+
const _callback = (err, responseData, statusCode) => {
|
126
|
+
if (timeoutTimer) {
|
127
|
+
clearTimeout(timeoutTimer);
|
128
|
+
timeoutTimer = null;
|
129
|
+
}
|
130
|
+
|
131
|
+
const endTime = process.hrtime();
|
132
|
+
const responseTime = timeDiff(startTime, endTime);
|
133
|
+
if (err) {
|
134
|
+
this.emit('fail', err, responseData, originalSettings, statusCode, responseTime);
|
135
|
+
reject(err);
|
136
|
+
} else {
|
137
|
+
this.emit('success', responseData, originalSettings, statusCode, responseTime);
|
138
|
+
resolve(responseData);
|
139
|
+
}
|
140
|
+
};
|
141
|
+
|
142
|
+
this._request(settings)
|
143
|
+
.then(response => {
|
144
|
+
return this.handleResponse(response)
|
145
|
+
.then(responseData => _callback(null, responseData, response.status))
|
146
|
+
.catch(error => {
|
147
|
+
error.headers = response.headers;
|
148
|
+
_callback(error, null, response.status);
|
161
149
|
});
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
150
|
+
})
|
151
|
+
.catch(err => {
|
152
|
+
if (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT') {
|
153
|
+
err.message = 'Connection timed out';
|
154
|
+
err.status = 504;
|
155
|
+
}
|
156
|
+
err.status = err.status || 503;
|
157
|
+
return _callback(err, null, err.status);
|
158
|
+
});
|
171
159
|
});
|
172
160
|
|
173
|
-
|
174
|
-
|
161
|
+
if (typeof callback === 'function') {
|
162
|
+
callback(null, data);
|
163
|
+
}
|
164
|
+
return data;
|
165
|
+
} catch (error) {
|
166
|
+
if (typeof callback === 'function') {
|
167
|
+
callback(error);
|
168
|
+
}
|
169
|
+
return error;
|
175
170
|
}
|
176
|
-
return promise;
|
177
171
|
}
|
178
172
|
|
179
|
-
handleResponse(response
|
180
|
-
let data =
|
173
|
+
async handleResponse(response) {
|
174
|
+
let data = null;
|
181
175
|
try {
|
182
|
-
|
176
|
+
if (typeof response.data === 'object') {
|
177
|
+
data = response.data;
|
178
|
+
} else if (typeof response.data === 'string' && response.data.trim() !== '') {
|
179
|
+
data = JSON.parse(response.data);
|
180
|
+
} else {
|
181
|
+
data = {};
|
182
|
+
}
|
183
183
|
} catch (err) {
|
184
|
+
err.message = 'Failed to parse response data';
|
184
185
|
err.status = response.status;
|
185
186
|
err.body = response.data;
|
186
|
-
|
187
|
+
throw err;
|
187
188
|
}
|
188
|
-
return this.parseResponse(response.status, data
|
189
|
+
return await this.parseResponse(response.status, data);
|
189
190
|
}
|
190
191
|
|
191
|
-
parseResponse(statusCode, data
|
192
|
+
async parseResponse(statusCode, data) {
|
192
193
|
if (statusCode < 400) {
|
193
194
|
try {
|
194
|
-
data = this.parse(data);
|
195
|
-
|
195
|
+
data = await this.parse(data);
|
196
|
+
return data;
|
196
197
|
} catch (err) {
|
197
|
-
|
198
|
+
throw err;
|
198
199
|
}
|
199
200
|
} else {
|
200
|
-
|
201
|
+
throw this.parseError(statusCode, data);
|
201
202
|
}
|
202
203
|
}
|
203
204
|
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "hof",
|
3
3
|
"description": "A bootstrap for HOF projects",
|
4
|
-
"version": "21.0.12-
|
4
|
+
"version": "21.0.12-upgrade-vuln-pkgs-beta",
|
5
5
|
"license": "MIT",
|
6
6
|
"main": "index.js",
|
7
7
|
"author": "HomeOffice",
|
@@ -32,8 +32,7 @@
|
|
32
32
|
"test:acceptance_browser": "ACCEPTANCE_WITH_BROWSER=true TAGS=\"${TAGS:=@feature}\" yarn run test:cucumber",
|
33
33
|
"test:cucumber": "cucumber-js -f @cucumber/pretty-formatter \"sandbox/test/_features/**/*.feature\" --require sandbox/test/_features/test.setup.js --require \"sandbox/test/_features/step_definitions/**/*.js\" --tags $TAGS",
|
34
34
|
"ci": "travis-conditions",
|
35
|
-
"postversion": "git push && git push --tags"
|
36
|
-
"test-single": "mocha"
|
35
|
+
"postversion": "git push && git push --tags"
|
37
36
|
},
|
38
37
|
"dependencies": {
|
39
38
|
"aliasify": "^2.1.0",
|
@@ -54,12 +53,12 @@
|
|
54
53
|
"duplexify": "^3.5.0",
|
55
54
|
"express": "^4.17.1",
|
56
55
|
"express-healthcheck": "^0.1.0",
|
57
|
-
"express-partial-templates": "^0.2.
|
56
|
+
"express-partial-templates": "^0.2.1",
|
58
57
|
"express-session": "^1.13.0",
|
59
58
|
"findup": "^0.1.5",
|
60
59
|
"glob": "^7.2.0",
|
61
60
|
"govuk-elements-sass": "^3.1.3",
|
62
|
-
"govuk-frontend": "3.
|
61
|
+
"govuk-frontend": "3.15",
|
63
62
|
"govuk_template_mustache": "^0.26.0",
|
64
63
|
"helmet": "^3.22.0",
|
65
64
|
"hogan-express-strict": "^0.5.4",
|
@@ -68,7 +67,7 @@
|
|
68
67
|
"i18n-future": "^2.0.0",
|
69
68
|
"i18n-lookup": "^0.1.0",
|
70
69
|
"is-pdf": "^1.0.0",
|
71
|
-
"libphonenumber-js": "^1.9.
|
70
|
+
"libphonenumber-js": "^1.9.44",
|
72
71
|
"lodash": "^4.17.21",
|
73
72
|
"markdown-it": "^12.3.2",
|
74
73
|
"minimatch": "^3.0.7",
|
@@ -81,8 +80,7 @@
|
|
81
80
|
"nodemailer-ses-transport": "^1.5.1",
|
82
81
|
"nodemailer-smtp-transport": "^2.7.4",
|
83
82
|
"nodemailer-stub-transport": "^1.1.0",
|
84
|
-
"notifications-node-client": "^
|
85
|
-
"object-mapper": "^6.2.0",
|
83
|
+
"notifications-node-client": "^8.2.0",
|
86
84
|
"redis": "^3.1.2",
|
87
85
|
"reqres": "^3.0.1",
|
88
86
|
"rimraf": "^3.0.2",
|
@@ -98,6 +96,7 @@
|
|
98
96
|
"@cucumber/cucumber": "^7.3.0",
|
99
97
|
"@cucumber/pretty-formatter": "^1.0.0-alpha.1",
|
100
98
|
"@types/jest": "^26.0.14",
|
99
|
+
"@xmldom/xmldom": "~0.8.4",
|
101
100
|
"chai": "^3.5.0",
|
102
101
|
"chai-as-promised": "^7.1.1",
|
103
102
|
"chai-subset": "^1.6.0",
|
@@ -124,14 +123,13 @@
|
|
124
123
|
"playwright": "^1.16.3",
|
125
124
|
"postcode": "0.2.2",
|
126
125
|
"proxyquire": "^1.7.11",
|
127
|
-
"release-it": "^
|
126
|
+
"release-it": "^16.2.1",
|
128
127
|
"sinon": "^11.1.1",
|
129
128
|
"sinon-chai": "^3.7.0",
|
130
129
|
"supertest": "^3.0.0",
|
131
130
|
"travis-conditions": "0.0.0",
|
132
131
|
"watchify": "^4.0.0",
|
133
|
-
"webdriverio": "^4.14.4"
|
134
|
-
"xmldom": "^0.6.0"
|
132
|
+
"webdriverio": "^4.14.4"
|
135
133
|
},
|
136
134
|
"mocha": {
|
137
135
|
"reporter": "spec",
|
package/pull_request.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
## What?
|
2
|
+
## Why?
|
3
|
+
## How?
|
4
|
+
## Testing?
|
5
|
+
## Screenshots (optional)
|
6
|
+
## Anything Else? (optional)
|
7
|
+
## Check list
|
8
|
+
|
9
|
+
- [ ] I have reviewed my own pull request for linting issues (e.g. adding new lines)
|
10
|
+
- [ ] I have written tests (if relevant)
|
11
|
+
- [ ] I have created a JIRA number for my branch
|
12
|
+
- [ ] I have created a JIRA number for my commit
|
13
|
+
- [ ] I have followed the chris beams method for my commit https://cbea.ms/git-commit/
|
14
|
+
here is an [example commit](https://github.com/UKHomeOfficeForms/hof/commit/810959f391187c7c4af6db262bcd143b50093a6e)
|
15
|
+
- [ ] Ensure drone builds are green especially tests
|
16
|
+
- [ ] I will squash the commits before merging
|
package/sandbox/package.json
CHANGED
package/sandbox/yarn.lock
CHANGED
@@ -34,11 +34,11 @@ brace-expansion@^1.1.7:
|
|
34
34
|
concat-map "0.0.1"
|
35
35
|
|
36
36
|
braces@~3.0.2:
|
37
|
-
version "3.0.
|
38
|
-
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.
|
39
|
-
integrity sha512-
|
37
|
+
version "3.0.3"
|
38
|
+
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
|
39
|
+
integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
|
40
40
|
dependencies:
|
41
|
-
fill-range "^7.
|
41
|
+
fill-range "^7.1.1"
|
42
42
|
|
43
43
|
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.2:
|
44
44
|
version "3.5.3"
|
@@ -67,10 +67,10 @@ debug@^3.2.7:
|
|
67
67
|
dependencies:
|
68
68
|
ms "^2.1.1"
|
69
69
|
|
70
|
-
fill-range@^7.
|
71
|
-
version "7.
|
72
|
-
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.
|
73
|
-
integrity sha512-
|
70
|
+
fill-range@^7.1.1:
|
71
|
+
version "7.1.1"
|
72
|
+
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
|
73
|
+
integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
|
74
74
|
dependencies:
|
75
75
|
to-regex-range "^5.0.1"
|
76
76
|
|
@@ -130,11 +130,16 @@ is-number@^7.0.0:
|
|
130
130
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
131
131
|
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
132
132
|
|
133
|
-
jquery@>=1.11
|
133
|
+
jquery@>=1.11:
|
134
134
|
version "3.6.0"
|
135
135
|
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
|
136
136
|
integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==
|
137
137
|
|
138
|
+
jquery@^3.7.1:
|
139
|
+
version "3.7.1"
|
140
|
+
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
|
141
|
+
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
|
142
|
+
|
138
143
|
minimatch@^3.0.4:
|
139
144
|
version "3.1.2"
|
140
145
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|