@@ -44,13 +44,17 @@ module.exports = [
4444 }
4545
4646 let invite ;
47+ let requestedInvite ;
4748 return models . ProjectMemberInvite . getPendingInviteByEmailOrUserId (
4849 projectId ,
4950 putInvite . email ,
5051 putInvite . userId ,
5152 ) . then ( ( _invite ) => {
5253 invite = _invite ;
53- if ( ! invite ) {
54+ } ) . then ( ( ) => models . ProjectMemberInvite . getRequestedInvite ( projectId , putInvite . userId ) )
55+ . then ( ( _requestedInvite ) => {
56+ requestedInvite = _requestedInvite ;
57+ if ( ! invite && ! requestedInvite ) {
5458 // check there is an existing invite for the user with status PENDING
5559 // handle 404
5660 const err = new Error (
@@ -60,18 +64,20 @@ module.exports = [
6064 return next ( err ) ;
6165 }
6266
67+ invite = invite || requestedInvite ;
68+
6369 req . log . debug ( 'Chekcing user permission for updating invite' ) ;
6470 let error = null ;
65- if ( putInvite . status === INVITE_STATUS . CANCELED ) {
71+ if ( invite . status === INVITE_STATUS . REQUESTED &&
72+ ! util . hasRoles ( req , [ USER_ROLE . CONNECT_ADMIN , USER_ROLE . COPILOT_MANAGER ] ) ) {
73+ error = 'Requested invites can only be updated by Copilot manager' ;
74+ } else if ( putInvite . status === INVITE_STATUS . CANCELED ) {
6675 if ( ! util . hasRoles ( req , MANAGER_ROLES ) && invite . role !== PROJECT_MEMBER_ROLE . CUSTOMER ) {
6776 error = `Project members can cancel invites only for ${ PROJECT_MEMBER_ROLE . CUSTOMER } ` ;
6877 }
69- } else if ( ( ! ! invite . role && invite . role === PROJECT_MEMBER_ROLE . COPILOT ) &&
70- ! req . authUser . roles . includes ( USER_ROLE . COPILOT_MANAGER ) ) {
71- error = 'Only Connect copilot manager can add copilots' ;
7278 } else if ( ( ( ! ! putInvite . userId && putInvite . userId !== req . authUser . userId ) ||
7379 ( ! ! putInvite . email && putInvite . email !== req . authUser . email ) ) &&
74- ( ! ! invite . role && invite . role !== PROJECT_MEMBER_ROLE . COPILOT ) ) {
80+ ! util . hasRoles ( req , [ USER_ROLE . CONNECT_ADMIN , USER_ROLE . COPILOT_MANAGER ] ) ) {
7581 error = 'Project members can only update invites for themselves' ;
7682 }
7783
@@ -101,7 +107,8 @@ module.exports = [
101107
102108 req . log . debug ( 'Adding user to project' ) ;
103109 // add user to project if accept invite
104- if ( updatedInvite . status === INVITE_STATUS . ACCEPTED ) {
110+ if ( updatedInvite . status === INVITE_STATUS . ACCEPTED ||
111+ updatedInvite . status === INVITE_STATUS . REQUEST_APPROVED ) {
105112 return models . ProjectMember . getActiveProjectMembers ( projectId )
106113 . then ( ( members ) => {
107114 req . context = req . context || { } ;
0 commit comments