added svcapi ui and camunda code
[it/otf.git] / otf-frontend / server / src / feathers / services / users / users.hooks.js
1 /*  Copyright (c) 2019 AT&T Intellectual Property.                             #\r
2 #                                                                              #\r
3 #   Licensed under the Apache License, Version 2.0 (the "License");            #\r
4 #   you may not use this file except in compliance with the License.           #\r
5 #   You may obtain a copy of the License at                                    #\r
6 #                                                                              #\r
7 #       http://www.apache.org/licenses/LICENSE-2.0                             #\r
8 #                                                                              #\r
9 #   Unless required by applicable law or agreed to in writing, software        #\r
10 #   distributed under the License is distributed on an "AS IS" BASIS,          #\r
11 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #\r
12 #   See the License for the specific language governing permissions and        #\r
13 #   limitations under the License.                                             #\r
14 ##############################################################################*/\r
15 \r
16 \r
17 const { authenticate } = require('@feathersjs/authentication').hooks;\r
18 const filter = require('../../hooks/filters.js');\r
19 const checkPermissions = require('feathers-permissions');\r
20 const authManagement = require('../auth-management/notifier');\r
21 const errors = require('@feathersjs/errors');\r
22 \r
23 const {\r
24         hashPassword, protect\r
25 } = require('@feathersjs/authentication-local').hooks;\r
26 const { iff, disallow } = require('feathers-hooks-common'); \r
27 const verifyHooks = require('feathers-authentication-management').hooks;\r
28 const skip = require('@feathersjs/feathers').SKIP;\r
29 \r
30 const { permissions, limitFields } = require('../../hooks/permissions/permissions');\r
31 \r
32 module.exports = {\r
33         before: {\r
34                 all: [],\r
35                 find: [\r
36                         authenticate('jwt'),\r
37                         permissions('users'),\r
38                         function(context){\r
39                                 if(!context.params.user){\r
40                                         return skip;\r
41                                 }\r
42                         }\r
43                 ],\r
44                 get: [\r
45                         authenticate('jwt'),\r
46                         permissions('users'),\r
47                         function(context){\r
48                                 if(!context.params.user){\r
49                                         return skip;\r
50                                 }\r
51                         }\r
52                 ],\r
53                 create: [hashPassword(),\r
54                                 function(context){\r
55                                         return verifyHooks.addVerification(context.app.get('base-path') + 'authManagement')(context);\r
56                                 },\r
57                                 function (context) {\r
58                                         context.data.enabled = false;\r
59                                         // await context.app.services[context.app.get('base-path') + 'groups']\r
60                                         // .find({\r
61                                         //      query : {\r
62                                         //              groupName: "Public"\r
63                                         //      }\r
64                                         // })\r
65                                         // .then( result => {   \r
66                                         //      if(result){\r
67                                         //              await context.app.services[context.app.get('base-path') + 'groups']\r
68                                         //              .patch({\r
69                                         //                      _id : result._id,\r
70                     //                  $push: { members: { userId : user._id, roles: ["user"]}}\r
71                                         //              });\r
72                                         //      }\r
73                                         // });\r
74                                         context.data.groups = [\r
75                                                 {\r
76                                                         groupId: '5bdb2bdbd6b0d1f97953fbd7',\r
77                                                         permissions: [\r
78                                                                 'admin'\r
79                                                         ]\r
80                                                 }\r
81                                         ];\r
82 \r
83                                 }\r
84                 ],\r
85                 update: [\r
86                         hashPassword(),\r
87                         authenticate('jwt'),\r
88                         permissions('users')\r
89                 ],\r
90                 patch:\r
91                         [\r
92 \r
93                                 hashPassword(),\r
94                                 authenticate('jwt'),\r
95                                 iff(context => context.params.provider === undefined).else(\r
96                                         permissions('users'),\r
97                                         async function(context){\r
98                                                 if(context.data.enabled){\r
99                                                          await this.get(context.id)\r
100                                                                 .then(function(user) {\r
101                                                                         if(!user.enabled){\r
102                                                                                 context.sendEmail = true;\r
103 \r
104                                                                         }\r
105                                                                 });\r
106                                                 }\r
107                                         }\r
108                                 )\r
109                         // commonHooks\r
110                         //      .iff(checkPermissions({\r
111                         //              roles: [ 'admin' ]\r
112                         //      }))\r
113                         //      .else(commonHooks.iff(\r
114                         //              commonHooks.isProvider('external'),\r
115                         //              commonHooks.preventChanges(\r
116                         //                      'email',\r
117                         //                      'isVerified',\r
118                         //                      'verifyToken',\r
119                         //                      'verifyShortToken',\r
120                         //                      'verifyExpires',\r
121                         //                      'verifyChanges',\r
122                         //                      'resetToken',\r
123                         //                      'resetShortToken',\r
124                         //                      'resetExpires'\r
125                         //              )\r
126                         //      ))\r
127                 ],\r
128                 remove: [\r
129                         authenticate('jwt'),\r
130                         permissions('users')\r
131                 ]\r
132         },\r
133 \r
134         after: {\r
135                 all: [\r
136                         // Make sure the password field is never sent to the client\r
137                         // Always must be the last hook\r
138                         protect('password'),\r
139                 ],\r
140                 find: [iff(context => context.params.provider === undefined).else(limitFields())],\r
141                 get: [iff(context => context.params.provider === undefined).else(limitFields())],\r
142                 create: [\r
143                         context => {\r
144                                 authManagement(context.app).notifier('resendVerifySignup', context.result);\r
145                         },\r
146                         function (context) {\r
147                                 \r
148                                 // await context.app.services[context.app.get('base-path') + 'groups']\r
149                                 // .get(context.data.parentGroupId, context.params)\r
150                                 // .then( result => {   \r
151                                 //      group = result;\r
152                                 // });\r
153                         },\r
154                         verifyHooks.removeVerification()\r
155                 ],\r
156                 update: [iff(context => context.params.provider === undefined).else(limitFields())],\r
157                 patch: [iff(context => context.params.provider === undefined).else(limitFields()),\r
158                         context => {\r
159                                 let data = context['data']\r
160                                 if(data && context.sendEmail){\r
161                                         let enabled = data['enabled'];\r
162                                                 if(enabled){\r
163                                                         authManagement(context.app).notifier('sendApprovalNotification', context.result)\r
164 \r
165                                                 }\r
166                                 }\r
167                         }\r
168                 ],\r
169                 remove: [iff(context => context.params.provider === undefined).else(limitFields())]\r
170         },\r
171 \r
172         error: {\r
173                 all: [],\r
174                 find: [],\r
175                 get: [],\r
176                 create: [],\r
177                 update: [],\r
178                 patch: [],\r
179                 remove: []\r
180         }\r
181 };\r