From f38a1cf6a6809e85ac2ba47026c42b49bfee3673 Mon Sep 17 00:00:00 2001 From: eug-vs <eug-vs@keemail.me> Date: Sun, 5 Jul 2020 12:23:11 +0300 Subject: feat: upgrade feedback hooks --- services/feedback/feedback.hooks.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'services') diff --git a/services/feedback/feedback.hooks.ts b/services/feedback/feedback.hooks.ts index 56e9000..7ae6c5d 100644 --- a/services/feedback/feedback.hooks.ts +++ b/services/feedback/feedback.hooks.ts @@ -1,9 +1,27 @@ +import { populate, discard } from 'feathers-hooks-common'; import requireAuth from '../../hooks/requireAuth'; import signAuthority from '../../hooks/signAuthority'; +import sortByDate from '../../hooks/sortByDate'; + + +const populateAuthor = populate({ + schema: { + include: { + service: 'users', + nameAs: 'author', + parentField: 'authorId', + childField: '_id' + } + } +}); export default { before: { - create: [requireAuth, signAuthority] + create: [requireAuth, signAuthority], + find: sortByDate + }, + after: { + all: [populateAuthor, discard('authorId')] } }; -- cgit v1.2.3 From 8f48be5b879b1ae92937dfa1d1f37f08fb167dfa Mon Sep 17 00:00:00 2001 From: eug-vs <eug-vs@keemail.me> Date: Sun, 5 Jul 2020 13:27:49 +0300 Subject: feat: ensure users security --- services/users/users.hooks.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'services') diff --git a/services/users/users.hooks.ts b/services/users/users.hooks.ts index 48843be..1b4be2b 100644 --- a/services/users/users.hooks.ts +++ b/services/users/users.hooks.ts @@ -1,7 +1,9 @@ import _ from 'lodash'; import { hooks } from '@feathersjs/authentication-local'; -import { discard } from 'feathers-hooks-common'; +import { discard, disallow } from 'feathers-hooks-common'; import { HookContext } from '@feathersjs/feathers'; +import { NotAuthenticated } from '@feathersjs/errors'; +import requireAuth from '../../hooks/requireAuth'; const hashPassword = hooks.hashPassword('password'); @@ -12,6 +14,13 @@ const ignoreCaseRegex = async (context: HookContext): Promise<HookContext> => { return context; }; +const compareUser = async (context: HookContext): Promise<HookContext> => { + if(context.arguments[0] != context.params.user._id) { + throw new NotAuthenticated('You can only PATCH/UPDATE your own user!'); + } + return context; +} + export default { after: { all: hooks.protect('password'), @@ -20,8 +29,9 @@ export default { before: { find: ignoreCaseRegex, create: hashPassword, - patch: hashPassword, - update: hashPassword + patch: [hashPassword, requireAuth, compareUser], + update: [hashPassword, requireAuth, compareUser], + remove: disallow('external') } }; -- cgit v1.2.3 From 85b3cc20e8f453868d06d55a688ee8dfe90b80d4 Mon Sep 17 00:00:00 2001 From: eug-vs <eug-vs@keemail.me> Date: Sun, 5 Jul 2020 13:33:00 +0300 Subject: feat: protect all services --- services/feedback/feedback.hooks.ts | 7 +++++-- services/polls/polls.hooks.ts | 6 +++++- services/votes/votes.hooks.ts | 6 +++++- 3 files changed, 15 insertions(+), 4 deletions(-) (limited to 'services') diff --git a/services/feedback/feedback.hooks.ts b/services/feedback/feedback.hooks.ts index 7ae6c5d..5bc2552 100644 --- a/services/feedback/feedback.hooks.ts +++ b/services/feedback/feedback.hooks.ts @@ -1,4 +1,4 @@ -import { populate, discard } from 'feathers-hooks-common'; +import { populate, discard, disallow } from 'feathers-hooks-common'; import requireAuth from '../../hooks/requireAuth'; import signAuthority from '../../hooks/signAuthority'; import sortByDate from '../../hooks/sortByDate'; @@ -18,7 +18,10 @@ const populateAuthor = populate({ export default { before: { create: [requireAuth, signAuthority], - find: sortByDate + find: sortByDate, + remove: disallow('external'), + patch: disallow('external'), + update: disallow('external') }, after: { all: [populateAuthor, discard('authorId')] diff --git a/services/polls/polls.hooks.ts b/services/polls/polls.hooks.ts index e3d04e7..35eae29 100644 --- a/services/polls/polls.hooks.ts +++ b/services/polls/polls.hooks.ts @@ -1,4 +1,5 @@ import { HookContext } from '@feathersjs/feathers'; +import { disallow } from 'feathers-hooks-common'; import { Types } from 'mongoose'; import bluebird from 'bluebird'; import _ from 'lodash'; import { Poll } from 'which-types'; @@ -46,7 +47,10 @@ const convertPoll = async (context: HookContext): Promise<HookContext> => { export default { before: { find: sortByDate, - create: signAuthority + create: signAuthority, + remove: disallow('external'), + update: disallow('external'), + patch: disallow('external') }, after: { all: convertPoll diff --git a/services/votes/votes.hooks.ts b/services/votes/votes.hooks.ts index 56e9000..923e897 100644 --- a/services/votes/votes.hooks.ts +++ b/services/votes/votes.hooks.ts @@ -1,9 +1,13 @@ +import { disallow } from 'feathers-hooks-common'; import requireAuth from '../../hooks/requireAuth'; import signAuthority from '../../hooks/signAuthority'; export default { before: { - create: [requireAuth, signAuthority] + create: [requireAuth, signAuthority], + remove: disallow('external'), + update: disallow('external'), + patch: disallow('external') } }; -- cgit v1.2.3 From 1c2f3c9e5b39826266d64f4227e53fff139ea948 Mon Sep 17 00:00:00 2001 From: eug-vs <eug-vs@keemail.me> Date: Sun, 5 Jul 2020 13:35:54 +0300 Subject: style: fix eslint errors --- services/users/users.hooks.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'services') diff --git a/services/users/users.hooks.ts b/services/users/users.hooks.ts index 1b4be2b..125f418 100644 --- a/services/users/users.hooks.ts +++ b/services/users/users.hooks.ts @@ -15,11 +15,11 @@ const ignoreCaseRegex = async (context: HookContext): Promise<HookContext> => { }; const compareUser = async (context: HookContext): Promise<HookContext> => { - if(context.arguments[0] != context.params.user._id) { + if (context.arguments[0] !== context.params.user._id) { throw new NotAuthenticated('You can only PATCH/UPDATE your own user!'); } return context; -} +}; export default { after: { -- cgit v1.2.3