--- /dev/null
+/* Copyright (c) 2019 AT&T Intellectual Property. #\r
+# #\r
+# Licensed under the Apache License, Version 2.0 (the "License"); #\r
+# you may not use this file except in compliance with the License. #\r
+# You may obtain a copy of the License at #\r
+# #\r
+# http://www.apache.org/licenses/LICENSE-2.0 #\r
+# #\r
+# Unless required by applicable law or agreed to in writing, software #\r
+# distributed under the License is distributed on an "AS IS" BASIS, #\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #\r
+# See the License for the specific language governing permissions and #\r
+# limitations under the License. #\r
+##############################################################################*/\r
+\r
+\r
+const { authenticate } = require('@feathersjs/authentication').hooks;\r
+const filter = require('../../hooks/filters.js');\r
+const checkPermissions = require('feathers-permissions');\r
+const authManagement = require('../auth-management/notifier');\r
+const errors = require('@feathersjs/errors');\r
+\r
+const {\r
+ hashPassword, protect\r
+} = require('@feathersjs/authentication-local').hooks;\r
+const { iff, disallow } = require('feathers-hooks-common'); \r
+const verifyHooks = require('feathers-authentication-management').hooks;\r
+const skip = require('@feathersjs/feathers').SKIP;\r
+\r
+const { permissions, limitFields } = require('../../hooks/permissions/permissions');\r
+\r
+module.exports = {\r
+ before: {\r
+ all: [],\r
+ find: [\r
+ authenticate('jwt'),\r
+ permissions('users'),\r
+ function(context){\r
+ if(!context.params.user){\r
+ return skip;\r
+ }\r
+ }\r
+ ],\r
+ get: [\r
+ authenticate('jwt'),\r
+ permissions('users'),\r
+ function(context){\r
+ if(!context.params.user){\r
+ return skip;\r
+ }\r
+ }\r
+ ],\r
+ create: [hashPassword(),\r
+ function(context){\r
+ return verifyHooks.addVerification(context.app.get('base-path') + 'authManagement')(context);\r
+ },\r
+ function (context) {\r
+ context.data.enabled = false;\r
+ // await context.app.services[context.app.get('base-path') + 'groups']\r
+ // .find({\r
+ // query : {\r
+ // groupName: "Public"\r
+ // }\r
+ // })\r
+ // .then( result => { \r
+ // if(result){\r
+ // await context.app.services[context.app.get('base-path') + 'groups']\r
+ // .patch({\r
+ // _id : result._id,\r
+ // $push: { members: { userId : user._id, roles: ["user"]}}\r
+ // });\r
+ // }\r
+ // });\r
+ context.data.groups = [\r
+ {\r
+ groupId: '5bdb2bdbd6b0d1f97953fbd7',\r
+ permissions: [\r
+ 'admin'\r
+ ]\r
+ }\r
+ ];\r
+\r
+ }\r
+ ],\r
+ update: [\r
+ hashPassword(),\r
+ authenticate('jwt'),\r
+ permissions('users')\r
+ ],\r
+ patch:\r
+ [\r
+\r
+ hashPassword(),\r
+ authenticate('jwt'),\r
+ iff(context => context.params.provider === undefined).else(\r
+ permissions('users'),\r
+ async function(context){\r
+ if(context.data.enabled){\r
+ await this.get(context.id)\r
+ .then(function(user) {\r
+ if(!user.enabled){\r
+ context.sendEmail = true;\r
+\r
+ }\r
+ });\r
+ }\r
+ }\r
+ )\r
+ // commonHooks\r
+ // .iff(checkPermissions({\r
+ // roles: [ 'admin' ]\r
+ // }))\r
+ // .else(commonHooks.iff(\r
+ // commonHooks.isProvider('external'),\r
+ // commonHooks.preventChanges(\r
+ // 'email',\r
+ // 'isVerified',\r
+ // 'verifyToken',\r
+ // 'verifyShortToken',\r
+ // 'verifyExpires',\r
+ // 'verifyChanges',\r
+ // 'resetToken',\r
+ // 'resetShortToken',\r
+ // 'resetExpires'\r
+ // )\r
+ // ))\r
+ ],\r
+ remove: [\r
+ authenticate('jwt'),\r
+ permissions('users')\r
+ ]\r
+ },\r
+\r
+ after: {\r
+ all: [\r
+ // Make sure the password field is never sent to the client\r
+ // Always must be the last hook\r
+ protect('password'),\r
+ ],\r
+ find: [iff(context => context.params.provider === undefined).else(limitFields())],\r
+ get: [iff(context => context.params.provider === undefined).else(limitFields())],\r
+ create: [\r
+ context => {\r
+ authManagement(context.app).notifier('resendVerifySignup', context.result);\r
+ },\r
+ function (context) {\r
+ \r
+ // await context.app.services[context.app.get('base-path') + 'groups']\r
+ // .get(context.data.parentGroupId, context.params)\r
+ // .then( result => { \r
+ // group = result;\r
+ // });\r
+ },\r
+ verifyHooks.removeVerification()\r
+ ],\r
+ update: [iff(context => context.params.provider === undefined).else(limitFields())],\r
+ patch: [iff(context => context.params.provider === undefined).else(limitFields()),\r
+ context => {\r
+ let data = context['data']\r
+ if(data && context.sendEmail){\r
+ let enabled = data['enabled'];\r
+ if(enabled){\r
+ authManagement(context.app).notifier('sendApprovalNotification', context.result)\r
+\r
+ }\r
+ }\r
+ }\r
+ ],\r
+ remove: [iff(context => context.params.provider === undefined).else(limitFields())]\r
+ },\r
+\r
+ error: {\r
+ all: [],\r
+ find: [],\r
+ get: [],\r
+ create: [],\r
+ update: [],\r
+ patch: [],\r
+ remove: []\r
+ }\r
+};\r