Skip to content

Commit 2dd3ab6

Browse files
authored
fix(Persona Imports): Prevents account names starting with a space breaking imports. (#1495 - [LL-273](https://learningpool.atlassian.net/browse/LL-273))
https://learningpool.atlassian.net/browse/LL-273 #1495
1 parent e4d8cd7 commit 2dd3ab6

8 files changed

Lines changed: 60 additions & 93 deletions

File tree

api/src/controllers/ImportPersonasController.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,17 @@ const uploadPersonas = catchErrors(async (req, res) => {
4040
});
4141

4242
const importPersonas = catchErrors(async (req, res) => {
43-
const authInfo = getAuthFromRequest(req);
44-
4543
const { id } = req.body;
46-
44+
const authInfo = getAuthFromRequest(req);
4745
const personaService = getPersonaService();
46+
4847
const { personaImport } = await importPersonasService({
4948
id,
5049
authInfo,
5150
personaService,
5251
});
5352

54-
return res.status(200).json(personaImport);
53+
res.status(200).json(personaImport);
5554
});
5655

5756
const importPersonasError = catchErrors(async (req, res) => {

api/src/routes/HttpRoutes.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,8 @@ import getAuthFromRequest from 'lib/helpers/getAuthFromRequest';
1313
import getTokenTypeFromAuthInfo from 'lib/services/auth/authInfoSelectors/getTokenTypeFromAuthInfo';
1414
import getScopesFromAuthInfo from 'lib/services/auth/authInfoSelectors/getScopesFromAuthInfo';
1515
import getUserIdFromAuthInfo from 'lib/services/auth/authInfoSelectors/getUserIdFromAuthInfo';
16-
import { SITE_ADMIN } from 'lib/constants/scopes';
1716
import { jsonSuccess, serverError } from 'api/utils/responses';
1817
import passport from 'api/auth/passport';
19-
import {
20-
GOOGLE_AUTH_OPTIONS,
21-
DEFAULT_PASSPORT_OPTIONS,
22-
RESTIFY_DEFAULTS,
23-
setNoCacheHeaders,
24-
checkOrg,
25-
} from 'lib/constants/auth';
2618
import { MANAGER_SELECT } from 'lib/services/auth/selects/models/user.js';
2719

2820
// CONTROLLERS
@@ -38,7 +30,7 @@ import StatementMetadataController from 'api/controllers/StatementMetadataContro
3830
import BatchDeleteController from 'api/controllers/BatchDeleteController';
3931
import RequestAppAccessController from 'api/controllers/RequestAppAccessController';
4032

41-
// REST
33+
// MODELS
4234
import LRS from 'lib/models/lrs';
4335
import Client from 'lib/models/client';
4436
import User from 'lib/models/user';
@@ -59,14 +51,26 @@ import PersonaAttribute from 'lib/models/personaAttribute';
5951
import PersonasImport from 'lib/models/personasImport';
6052
import PersonasImportTemplate from 'lib/models/personasImportTemplate';
6153
import SiteSettings from 'lib/models/siteSettings';
54+
import BatchDelete from 'lib/models/batchDelete';
55+
56+
// REST
6257
import personaRESTHandler from 'api/routes/personas/personaRESTHandler';
6358
import personaIdentifierRESTHandler from 'api/routes/personas/personaIdentifierRESTHandler';
6459
import UserOrganisationsRouter from 'api/routes/userOrganisations/router';
6560
import UserOrganisationSettingsRouter from 'api/routes/userOrganisationSettings/router';
66-
import BatchDelete from 'lib/models/batchDelete';
6761
import getLrsFromAuthInfo from 'lib/services/auth/authInfoSelectors/getLrsFromAuthInfo';
6862
import { decrementStatementCount } from 'lib/services/lrs';
63+
64+
// CONSTANTS
6965
import * as routes from 'lib/constants/routes';
66+
import { SITE_ADMIN } from 'lib/constants/scopes';
67+
import {
68+
GOOGLE_AUTH_OPTIONS,
69+
DEFAULT_PASSPORT_OPTIONS,
70+
RESTIFY_DEFAULTS,
71+
setNoCacheHeaders,
72+
checkOrg,
73+
} from 'lib/constants/auth';
7074

7175
const router = new express.Router();
7276
router.use(setNoCacheHeaders);

api/src/utils/exports.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import csv from 'fast-csv';
1+
import * as csv from 'fast-csv';
22
import Statement from 'lib/models/statement';
33
import highland from 'highland';
44
import async from 'async';
@@ -23,7 +23,7 @@ export function groupStreams(streams) {
2323
}
2424

2525
export const streamToCsv = (headers, stream) => new Promise((resolve, reject) => {
26-
const csvStream = csv.createWriteStream({ headers });
26+
const csvStream = csv.format({ headers });
2727
stream.pipe(csvStream);
2828
csvStream.on('error', reject);
2929
stream.on('error', reject);

lib/services/importPersonas/getCsvHeaders.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import csv from 'fast-csv';
1+
import * as csv from 'fast-csv';
22
import { isUndefined, uniq } from 'lodash';
33
import EmptyCsvError from 'lib/errors/EmptyCsvError';
44
import DuplicateCsvHeadersError from 'lib/errors/DuplicateCsvHeadersError';

lib/services/importPersonas/importPersonas-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { uploadFromStream, downloadToStream } from 'lib/services/files/storage';
44
import PersonasImport from 'lib/models/personasImport';
55
import { PERSONAS_CSV_PATH } from 'lib/services/importPersonas/persistPersonas';
66
import highland from 'highland';
7-
import csv from 'fast-csv';
7+
import * as csv from 'fast-csv';
88
import { expect } from 'chai';
99
import {
1010
COLUMN_NAME,

lib/services/importPersonas/importPersonas.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import PersonasImport from 'lib/models/personasImport';
22
import * as filesService from 'lib/services/files';
3-
import csv from 'fast-csv';
3+
import * as csv from 'fast-csv';
44
import highland from 'highland';
55
import { promisify } from 'bluebird';
66
import getScopeFilter from 'lib/services/auth/filters/getScopeFilter';
@@ -24,7 +24,7 @@ export const addErrorsToCsv = async ({
2424
quoteHeaders: true
2525
});
2626

27-
const csvWriteStream = csv.createWriteStream({
27+
const csvWriteStream = csv.format({
2828
headers: true
2929
});
3030

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
"express": "^4.13.4",
7979
"express-restify-mongoose": "^3.2.0",
8080
"faker": "^3.0.1",
81-
"fast-csv": "^2.3.0",
81+
"fast-csv": "^3.7.0",
8282
"file-loader": "^0.8.5",
8383
"file-stream-rotator": "^0.0.6",
8484
"git-rev": "^0.2.1",

yarn.lock

Lines changed: 36 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,7 @@
880880
version "10.17.9"
881881
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.9.tgz#4f251a1ed77ac7ef09d456247d67fc8173f6b9da"
882882

883-
"@types/node@^12.0.2":
883+
"@types/node@^12.0.2", "@types/node@^12.12.17":
884884
version "12.12.22"
885885
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.22.tgz#b8d9eae3328b96910a373cf06ac8d3c5abe9c200"
886886
integrity sha512-r5i93jqbPWGXYXxianGATOxTelkp6ih/U0WVnvaqAvTqM+0U6J3kw6Xk6uq/dWNRkEVw/0SLcO5ORXbVNz4FMQ==
@@ -1215,13 +1215,6 @@ argparse@^1.0.7:
12151215
dependencies:
12161216
sprintf-js "~1.0.2"
12171217

1218-
arguments-extended@~0.0.3:
1219-
version "0.0.3"
1220-
resolved "https://registry.yarnpkg.com/arguments-extended/-/arguments-extended-0.0.3.tgz#6107e4917d0eb6f0a4dd66320fc15afc72ef4946"
1221-
dependencies:
1222-
extended "~0.0.3"
1223-
is-extended "~0.0.8"
1224-
12251218
argv-formatter@~1.0.0:
12261219
version "1.0.0"
12271220
resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9"
@@ -1252,14 +1245,6 @@ array-equal@^1.0.0:
12521245
version "1.0.0"
12531246
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
12541247

1255-
array-extended@~0.0.3, array-extended@~0.0.4, array-extended@~0.0.5:
1256-
version "0.0.11"
1257-
resolved "https://registry.yarnpkg.com/array-extended/-/array-extended-0.0.11.tgz#d7144ae748de93ca726f121009dbff1626d164bd"
1258-
dependencies:
1259-
arguments-extended "~0.0.3"
1260-
extended "~0.0.3"
1261-
is-extended "~0.0.3"
1262-
12631248
array-filter@^1.0.0:
12641249
version "1.0.0"
12651250
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
@@ -4065,14 +4050,6 @@ dashify@^0.2.0:
40654050
version "0.2.2"
40664051
resolved "https://registry.yarnpkg.com/dashify/-/dashify-0.2.2.tgz#6a07415a01c91faf4a32e38d9dfba71f61cb20fe"
40674052

4068-
date-extended@~0.0.3:
4069-
version "0.0.6"
4070-
resolved "https://registry.yarnpkg.com/date-extended/-/date-extended-0.0.6.tgz#23802d57dd1bf7818813fe0c32e851a86da267c9"
4071-
dependencies:
4072-
array-extended "~0.0.3"
4073-
extended "~0.0.3"
4074-
is-extended "~0.0.3"
4075-
40764053
date-utils@*:
40774054
version "1.2.21"
40784055
resolved "https://registry.yarnpkg.com/date-utils/-/date-utils-1.2.21.tgz#61fb16cdc1274b3c9acaaffe9fc69df8720a2b64"
@@ -4134,10 +4111,6 @@ decimal.js-light@^2.4.1:
41344111
version "2.5.0"
41354112
resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.0.tgz#ca7faf504c799326df94b0ab920424fdfc125348"
41364113

4137-
declare.js@~0.0.4:
4138-
version "0.0.8"
4139-
resolved "https://registry.yarnpkg.com/declare.js/-/declare.js-0.0.8.tgz#0478adff9564c004f51df73d8bc134019d28dcde"
4140-
41414114
decode-uri-component@^0.2.0:
41424115
version "0.2.0"
41434116
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -5259,18 +5232,6 @@ extend@^3.0.0, extend@^3.0.1, extend@^3.0.2, extend@~3.0.0, extend@~3.0.2:
52595232
version "3.0.2"
52605233
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
52615234

5262-
extended@0.0.6, extended@~0.0.3:
5263-
version "0.0.6"
5264-
resolved "https://registry.yarnpkg.com/extended/-/extended-0.0.6.tgz#7fb8bf7b9dae397586e48570acfd642c78e50669"
5265-
dependencies:
5266-
extender "~0.0.5"
5267-
5268-
extender@~0.0.5:
5269-
version "0.0.10"
5270-
resolved "https://registry.yarnpkg.com/extender/-/extender-0.0.10.tgz#589c07482be61a1460b6d81f9c24aa67e8f324cd"
5271-
dependencies:
5272-
declare.js "~0.0.4"
5273-
52745235
extglob@^0.3.1:
52755236
version "0.3.2"
52765237
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
@@ -5310,15 +5271,21 @@ faker@^3.0.1:
53105271
version "3.1.0"
53115272
resolved "https://registry.yarnpkg.com/faker/-/faker-3.1.0.tgz#0f908faf4e6ec02524e54a57e432c5c013e08c9f"
53125273

5313-
fast-csv@^2.3.0:
5314-
version "2.5.0"
5315-
resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-2.5.0.tgz#5332dfede3f59340cb8e9f46b2e6dff1e7612005"
5274+
fast-csv@^3.7.0:
5275+
version "3.7.0"
5276+
resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-3.7.0.tgz#7f737115b77b19c1576432e6e5eae457f3eb7129"
5277+
integrity sha512-vCuVnDX0yjJEpSuQxZW0+Wf7aL8P7EtRzUgmLqpjwooza7mgpfKs2hwuV7nSdmjcb3f0abCp3jJY+E5Ws3piDw==
53165278
dependencies:
5317-
extended "0.0.6"
5318-
is-extended "0.0.10"
5319-
object-extended "0.0.7"
5320-
safer-buffer "^2.1.2"
5321-
string-extended "0.0.8"
5279+
"@types/node" "^12.12.17"
5280+
lodash.escaperegexp "^4.1.2"
5281+
lodash.groupby "^4.6.0"
5282+
lodash.isboolean "^3.0.3"
5283+
lodash.isequal "^4.5.0"
5284+
lodash.isfunction "^3.0.9"
5285+
lodash.isnil "^4.0.0"
5286+
lodash.isstring "^4.0.1"
5287+
lodash.isundefined "^3.0.1"
5288+
lodash.uniq "^4.5.0"
53225289

53235290
fast-deep-equal@^2.0.1:
53245291
version "2.0.1"
@@ -7255,12 +7222,6 @@ is-extendable@^1.0.1:
72557222
dependencies:
72567223
is-plain-object "^2.0.4"
72577224

7258-
is-extended@0.0.10, is-extended@~0.0.3, is-extended@~0.0.8:
7259-
version "0.0.10"
7260-
resolved "https://registry.yarnpkg.com/is-extended/-/is-extended-0.0.10.tgz#244e140df75bb1c9a3106f412ff182fb534a6d62"
7261-
dependencies:
7262-
extended "~0.0.3"
7263-
72647225
is-extglob@^1.0.0:
72657226
version "1.0.0"
72667227
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
@@ -8585,6 +8546,11 @@ lodash.get@^4.4.2:
85858546
version "4.4.2"
85868547
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
85878548

8549+
lodash.groupby@^4.6.0:
8550+
version "4.6.0"
8551+
resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1"
8552+
integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=
8553+
85888554
lodash.includes@^4.3.0:
85898555
version "4.3.0"
85908556
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
@@ -8620,6 +8586,11 @@ lodash.isequal@^4.0.0, lodash.isequal@^4.5.0:
86208586
version "4.5.0"
86218587
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
86228588

8589+
lodash.isfunction@^3.0.9:
8590+
version "3.0.9"
8591+
resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
8592+
integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
8593+
86238594
lodash.isinteger@^4.0.4:
86248595
version "4.0.4"
86258596
resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
@@ -8628,6 +8599,11 @@ lodash.ismatch@^4.4.0:
86288599
version "4.4.0"
86298600
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
86308601

8602+
lodash.isnil@^4.0.0:
8603+
version "4.0.0"
8604+
resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c"
8605+
integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=
8606+
86318607
lodash.isnumber@^3.0.3:
86328608
version "3.0.3"
86338609
resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
@@ -8652,6 +8628,11 @@ lodash.istypedarray@^3.0.0:
86528628
version "3.0.6"
86538629
resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
86548630

8631+
lodash.isundefined@^3.0.1:
8632+
version "3.0.1"
8633+
resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48"
8634+
integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=
8635+
86558636
lodash.keys@^3.0.0:
86568637
version "3.1.2"
86578638
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
@@ -10222,14 +10203,6 @@ object-copy@^0.1.0:
1022210203
define-property "^0.2.5"
1022310204
kind-of "^3.0.3"
1022410205

10225-
object-extended@0.0.7:
10226-
version "0.0.7"
10227-
resolved "https://registry.yarnpkg.com/object-extended/-/object-extended-0.0.7.tgz#84fd23f56b15582aeb3e88b05cb55d2432d68a33"
10228-
dependencies:
10229-
array-extended "~0.0.4"
10230-
extended "~0.0.3"
10231-
is-extended "~0.0.3"
10232-
1023310206
object-hash@1.3.1, object-hash@^1.1.2, object-hash@^1.1.4:
1023410207
version "1.3.1"
1023510208
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
@@ -13004,7 +12977,7 @@ safe-regex@^1.1.0:
1300412977
dependencies:
1300512978
ret "~0.1.10"
1300612979

13007-
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0:
12980+
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
1300812981
version "2.1.2"
1300912982
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1301012983

@@ -13704,15 +13677,6 @@ strict-uri-encode@^2.0.0:
1370413677
version "2.0.0"
1370513678
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
1370613679

13707-
string-extended@0.0.8:
13708-
version "0.0.8"
13709-
resolved "https://registry.yarnpkg.com/string-extended/-/string-extended-0.0.8.tgz#741957dff487b0272a79eec5a44f239ee6f17ccd"
13710-
dependencies:
13711-
array-extended "~0.0.5"
13712-
date-extended "~0.0.3"
13713-
extended "~0.0.3"
13714-
is-extended "~0.0.3"
13715-
1371613680
string-format-obj@^1.1.0:
1371713681
version "1.1.1"
1371813682
resolved "https://registry.yarnpkg.com/string-format-obj/-/string-format-obj-1.1.1.tgz#c7612ca4e2ad923812a81db192dc291850aa1f65"

0 commit comments

Comments
 (0)