Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Commit 7e5843c

Browse files
Merge pull request #65 from Human-Connection/develop
Update master
2 parents f927306 + cc047f2 commit 7e5843c

32 files changed

+1064
-9696
lines changed

package-lock.json

Lines changed: 0 additions & 9327 deletions
This file was deleted.

package.json

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"dev:debug": "npm run clear && concurrently '$npm_package_config_mongoDev' 'wait-on tcp:27017 && NODE_ENV=development nodemon --inspect server/'",
4242
"dev": "npm run clear && concurrently '$npm_package_config_mongoDev' 'wait-on tcp:27017 && NODE_ENV=development DEBUG=feathers nodemon server/'",
4343
"dev:noseed": "concurrently 'mongod --dbpath data' 'wait-on tcp:27017 && NODE_ENV=development DEBUG=feathers nodemon server/'",
44-
"dev:win": "npm run clear && concurrently \"mongod --dbpath /data/db\" \"wait-on tcp:27017&& cross-env NODE_ENV=development&& cross-env DEBUG=feathers&& nodemon --inspect server/\"",
44+
"dev:win": "npm run clear && concurrently \"mongod --dbpath /data/db\" \"wait-on tcp:27017&&cross-env NODE_ENV=development&&cross-env DEBUG=feathers&& nodemon --inspect server/\"",
4545
"mocha": "npm run clear && $npm_package_config_concurrently '$npm_package_config_mongoDev &>/dev/null' 'wait-on tcp:27017 && NODE_ENV=test $npm_package_config_mocha'",
4646
"coverage": "npm run clear && $npm_package_config_concurrently '$npm_package_config_mongoDev &>/dev/null' 'wait-on tcp:27017 && NODE_ENV=test istanbul cover $npm_package_config_mochaCoverage'"
4747
},
@@ -52,11 +52,10 @@
5252
"concurrently": "concurrently --kill-others --success first"
5353
},
5454
"dependencies": {
55-
"body-parser": "~1.18.2",
55+
"body-parser": "~1.18.3",
5656
"cheerio": "^1.0.0-rc.2",
57-
"compression": "~1.7.1",
57+
"compression": "~1.7.2",
5858
"cors": "~2.8.4",
59-
"cross-env": "^5.1.4",
6059
"crypto": "~1.0.1",
6160
"crypto-js": "^3.1.9-1",
6261
"dauria": "~2.0.0",
@@ -72,7 +71,7 @@
7271
"feathers-errors": "~2.9.2",
7372
"feathers-hooks": "~2.1.2",
7473
"feathers-hooks-common": "~3.10.0",
75-
"feathers-logger": "~0.2.3",
74+
"feathers-logger": "0.2.3",
7675
"feathers-mailer": "~2.0.0",
7776
"feathers-memory": "~1.3.1",
7877
"feathers-mongodb": "~3.0.0",
@@ -85,31 +84,32 @@
8584
"fs-extra": "~4.0.2",
8685
"handlebars": "~4.0.11",
8786
"handlebars-layouts": "~3.1.4",
88-
"helmet": "~3.10.0",
87+
"helmet": "~3.12.0",
8988
"html-excerpt": "~0.1.0",
90-
"mime": "^2.2.0",
89+
"mime": "^2.3.1",
9190
"mongoose": "~4.13.2",
9291
"multer": "~1.3.0",
9392
"node-sass": "~4.7.2",
94-
"quill-url-embeds": "^1.2.0",
95-
"raven": "~2.4.0",
96-
"request": "~2.83.0",
93+
"quill-url-embeds": "^1.2.5",
94+
"raven": "~2.6.1",
95+
"request": "~2.86.0",
9796
"request-promise": "~4.2.2",
9897
"sanitize-html": "^1.18.2",
99-
"serve-favicon": "~2.4.5",
98+
"serve-favicon": "~2.5.0",
10099
"shortid": "~2.2.8",
101100
"slug": "~0.9.1",
102101
"trunc-html": "^1.1.2",
103102
"valid-url": "^1.0.9",
104-
"winston": "~3.0.0-rc1"
103+
"winston": "~3.0.0-rc5"
105104
},
106105
"devDependencies": {
107-
"babel-eslint": "~8.2.1",
106+
"babel-eslint": "~8.2.3",
108107
"concurrently": "~3.5.1",
109-
"eslint": "~4.16.0",
108+
"cross-env": "^5.1.5",
109+
"eslint": "~4.19.1",
110110
"istanbul": "1.1.0-alpha.1",
111-
"mocha": "~5.0.4",
112-
"nodemon": "~1.14.11",
111+
"mocha": "~5.2.0",
112+
"nodemon": "~1.17.4",
113113
"shx": "^0.2.2",
114114
"wait-on": "~2.1.0"
115115
}

server/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ app.configure(require('feathers-logger')(logger));
2727
// Load app configuration
2828
app.configure(configuration(path.join(__dirname, '..')));
2929

30-
if (app.get('sentry').dns !== undefined && app.get('sentry').dns !== 'SENTRY_DNS') {
30+
if (app.get('sentry') && app.get('sentry').dns !== undefined && app.get('sentry').dns !== 'SENTRY_DNS') {
3131
// LOGGING IS ENABLED
3232
app.info('SENTRY LOGGING IS ENABLED');
3333

server/helper/alter-items.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const { getItems, replaceItems } = require('feathers-hooks-common');
2+
3+
/**
4+
* Alter items in hook.data or hook.result
5+
*
6+
* Example usage in hook module:
7+
* module.exports = (options = defaults) => alterItems(handleItem(options));
8+
*
9+
* handleItem() is the function in which changes are made
10+
*/
11+
module.exports = func => hook => {
12+
if (!func || typeof func !== 'function') {
13+
return hook;
14+
}
15+
let items = getItems(hook);
16+
if (Array.isArray(items)) {
17+
items.map(item => func(item, hook));
18+
} else if (items) {
19+
items = func(items, hook);
20+
}
21+
replaceItems(hook, items);
22+
return hook;
23+
};

server/hooks/cleanup-related-items.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Cleanup all related items by deleting them
2+
const alterItems = require('../helper/alter-items');
3+
4+
const defaults = {
5+
connections: []
6+
};
7+
8+
module.exports = (options = defaults) => alterItems(handleItem(options));
9+
10+
const handleItem = options => (item, hook) => {
11+
options.connections.forEach(connection => {
12+
deleteItem(item, connection, hook);
13+
});
14+
return item;
15+
};
16+
17+
const deleteItem = async (item, connection, hook) => {
18+
if (!item || !connection || !connection.childField || !connection.service) {
19+
return;
20+
}
21+
const parentField = connection.parentField || '_id';
22+
let query = connection.query || {};
23+
query[connection.childField] = item[parentField];
24+
try {
25+
await hook.app.service(connection.service)
26+
.remove(null, { query });
27+
} catch (err) {
28+
hook.app.error(`issue while deleting related item '${connection.service}'`);
29+
hook.app.error(query);
30+
hook.app.error(err);
31+
}
32+
};

server/hooks/create-slug.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const slug = require('slug');
33
const getUniqueSlug = require('../helper/get-unique-slug');
44
const { isEmpty } = require('lodash');
55

6-
module.exports = function (options = { field: null, overwrite: false }) {
6+
module.exports = function (options = { field: null, overwrite: false, unique: true }) {
77
return function (hook) {
88
if (!options.field || !hook.data[options.field]) return hook;
99

@@ -16,11 +16,16 @@ module.exports = function (options = { field: null, overwrite: false }) {
1616
const titleSlug = slug(hook.data[options.field], {
1717
lower: true
1818
});
19-
getUniqueSlug(hook.service, titleSlug, null, hook.id)
20-
.then((uniqueSlug) => {
21-
hook.data.slug = uniqueSlug;
22-
resolve(hook);
23-
});
19+
if (options.unique) {
20+
getUniqueSlug(hook.service, titleSlug, null, hook.id)
21+
.then((uniqueSlug) => {
22+
hook.data.slug = uniqueSlug;
23+
resolve(hook);
24+
});
25+
} else {
26+
hook.data.slug = titleSlug;
27+
resolve(hook);
28+
}
2429
});
2530
};
2631
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Remove data from deleted items
2+
const alterItems = require('../helper/alter-items');
3+
4+
const defaults = {
5+
fields: [
6+
'_id',
7+
'deleted',
8+
'createdAt',
9+
'updatedAt'
10+
]
11+
};
12+
13+
module.exports = (options = defaults) => alterItems(handleItem(options));
14+
15+
const handleItem = options => item => {
16+
if (item.deleted) {
17+
Object.keys(item).forEach(key => {
18+
if (!options.fields.includes(key)) {
19+
delete item[key];
20+
}
21+
});
22+
}
23+
return item;
24+
};

server/hooks/patch-deleted-data.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Patch deleted records with given data
2+
const alterItems = require('../helper/alter-items');
3+
4+
const defaults = {
5+
data: {
6+
content: 'DELETED'
7+
}
8+
};
9+
10+
module.exports = (options = defaults) => alterItems(handleItem(options));
11+
12+
const handleItem = options => item => {
13+
if (item.deleted) {
14+
item = {...item, ...options.data};
15+
}
16+
return item;
17+
};

server/hooks/save-remote-images.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,8 @@ module.exports = function (options = []) { // eslint-disable-line no-unused-vars
111111

112112
if (imgCount > 0 && loading <= 0) {
113113
hook.app.debug('Download(s) finished', urls);
114-
resolve(hook);
115-
} else if (!imgCount) {
116-
resolve(hook);
117114
}
115+
resolve(hook);
118116
} catch (err) {
119117
// reject(err);
120118
if (imgCount) {

server/hooks/xss.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function clean (dirty) {
2525
allowedTags: ['iframe', 'img', 'p', 'br', 'b', 'i', 'em', 'strong', 'a', 'pre', 'ul', 'li', 'ol', 's', 'strike', 'span', 'blockquote'],
2626
allowedAttributes: {
2727
a: ['href', 'class', 'target', 'data-*' , 'contenteditable'],
28-
span: ['contenteditable'],
28+
span: ['contenteditable', 'class', 'data-*'],
2929
img: ['src'],
3030
iframe: ['src', 'class', 'frameborder', 'allowfullscreen']
3131
},

0 commit comments

Comments
 (0)