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

Commit cc047f2

Browse files
Merge pull request #64 from Human-Connection/own-data-managing
Own data managing
2 parents 6b5813f + a4e3dae commit cc047f2

17 files changed

+347
-98
lines changed

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+
};
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
},

server/models/comments.model.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ module.exports = function (app) {
1212
contentExcerpt: { type: String, required: true },
1313
upvotes: { type: Array, default: [] },
1414
upvoteCount: { type: Number, default: 0 },
15-
language: { type: String, required: true },
15+
deleted: { type: Boolean, default: false },
1616
createdAt: { type: Date, default: Date.now },
1717
updatedAt: { type: Date, default: Date.now },
1818
wasSeeded: { type: Boolean }

server/models/contributions.model.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ module.exports = function (app) {
7575
}
7676
}
7777
},
78+
deleted: { type: Boolean, default: false },
7879
createdAt: { type: Date, default: Date.now },
7980
updatedAt: { type: Date, default: Date.now },
8081
wasSeeded: { type: Boolean }

server/models/usersettings.model.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module.exports = function (app) {
99
userId: {type: String, required: true, unique: true},
1010
uiLanguage: {type: String, required: true},
1111
contentLanguages: {type: Array, default: []},
12+
hideUsersWithoutTermsOfUseSigniture: {type: Boolean},
1213
updatedAt: { type: Date, default: Date.now }
1314
});
1415

server/seeder/base/pages.js

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ module.exports = (seederstore) => {
1414
type: 'termsAndConditions',
1515
key: 'terms-and-conditions',
1616
content: '<strong>ADD TERMS AND CONDITIONS!</strong>',
17-
language: 'en',
18-
wasSeeded: true
17+
language: 'en'
1918
}
2019
},
2120
{
@@ -25,30 +24,27 @@ module.exports = (seederstore) => {
2524
type: 'termsAndConditions',
2625
key: 'terms-and-conditions',
2726
content: '<strong>FÜGE AGB`s HINZU!</strong>',
28-
language: 'de',
29-
wasSeeded: true
27+
language: 'de'
3028
}
3129
},
3230
{
3331
path: 'pages',
3432
template: {
3533
title: 'Data Privacy',
3634
type: 'dataPrivacy',
37-
key: 'data-privacy',
35+
key: 'privacy',
3836
content: '<strong>ADD PRIVACY POLICY!</strong>',
39-
language: 'en',
40-
wasSeeded: true
37+
language: 'en'
4138
}
4239
},
4340
{
4441
path: 'pages',
4542
template: {
4643
title: 'Datenschutzerklärung',
4744
type: 'dataPrivacy',
48-
key: 'data-privacy',
45+
key: 'privacy',
4946
content: '<strong>FÜGE DATENSCHUTZRICHTLINIEN HINZU!</strong>',
50-
language: 'de',
51-
wasSeeded: true
47+
language: 'de'
5248
}
5349
},
5450
{
@@ -58,8 +54,7 @@ module.exports = (seederstore) => {
5854
type: 'imprint',
5955
key: 'imprint',
6056
content: '<strong>ADD IMPRINT!</strong>',
61-
language: 'en',
62-
wasSeeded: true
57+
language: 'en'
6358
}
6459
},
6560
{
@@ -69,8 +64,7 @@ module.exports = (seederstore) => {
6964
type: 'imprint',
7065
key: 'imprint',
7166
content: '<strong>FÜGE EIN IMPRESSUM HINZU!</strong>',
72-
language: 'de',
73-
wasSeeded: true
67+
language: 'de'
7468
}
7569
}
7670
]

0 commit comments

Comments
 (0)