@@ -103,21 +103,40 @@ async function getUser (req, res, next) {
103103 const isSecretariat = await repo . isSecretariatByShortName ( req . ctx . org )
104104
105105 try {
106- const result = identifier
107- ? await userRepo . getUserUUID ( identifier )
108- : await userRepo . findOneByUsernameAndOrgShortname ( userToGetParameters . username , userToGetParameters . org )
106+ let result
107+ let org
108+
109+ if ( identifier ) {
110+ result = await userRepo . findUserByUUID ( identifier )
111+ if ( ! result ) {
112+ logger . info ( { uuid : req . ctx . uuid , message : identifier + ' user could not be found.' } )
113+ return res . status ( 404 ) . json ( error . userDne ( identifier ) )
114+ }
115+
116+ const orgUUID = await repo . getOrgUUIDByUserUUID ( identifier )
117+ if ( ! orgUUID ) {
118+ logger . info ( { uuid : req . ctx . uuid , message : identifier + ' user organization could not be found.' } )
119+ return res . status ( 404 ) . json ( error . userDne ( identifier ) )
120+ }
109121
110- const org = identifier
111- ? await repo . getOrg ( identifier , true )
112- : await repo . getOrg ( req . ctx . params . shortname )
122+ org = await repo . getOrg ( orgUUID , true )
113123
114- if ( ! result ) {
115- logger . info ( { uuid : req . ctx . uuid , message : identifier || userToGetParameters . username + 'user could not be found.' } )
116- return res . status ( 404 ) . json ( error . userDne ( userToGetParameters . username ) )
117- }
118- userToGetParameters = {
119- org : org . short_name ,
120- username : result . username
124+ userToGetParameters = {
125+ org : org . short_name ,
126+ username : result . username
127+ }
128+ } else {
129+ result = await userRepo . findOneByUsernameAndOrgShortname ( userToGetParameters . username , userToGetParameters . org )
130+ if ( ! result ) {
131+ logger . info ( { uuid : req . ctx . uuid , message : userToGetParameters . username + ' user could not be found.' } )
132+ return res . status ( 404 ) . json ( error . userDne ( userToGetParameters . username ) )
133+ }
134+
135+ org = await repo . getOrg ( req . ctx . params . shortname )
136+ userToGetParameters = {
137+ org : org . short_name ,
138+ username : result . username
139+ }
121140 }
122141
123142 if ( ! isSecretariat && req . ctx . org !== userToGetParameters . org ) {
@@ -249,14 +268,31 @@ async function updateUser (req, res, next) {
249268 // TODO: This will need to be atomic at some point like revoke or grant
250269 // Specific check for org_short_name (Secretariat only)
251270
252- const userToEdit = identifier
253- ? await userRepo . getUserUUID ( identifier )
254- : await userRepo . findOneByUsernameAndOrgShortname ( userToEditParameters . username , userToEditParameters . org , { session } )
271+ let userToEdit
272+ let org
273+ if ( identifier ) {
274+ userToEdit = await userRepo . findUserByUUID ( identifier , { session } )
275+ if ( ! userToEdit ) {
276+ logger . info ( { uuid : req . ctx . uuid , message : identifier + ' user could not be found.' } )
277+ return res . status ( 404 ) . json ( error . userDne ( identifier ) )
278+ }
255279
256- const org = await orgRepo . findOneByShortName ( userToEditParameters . org )
257- if ( ! org ) {
258- logger . info ( { uuid : req . ctx . uuid , message : `Target organization ${ userToEditParameters . org } does not exist.` } )
259- return res . status ( 404 ) . json ( error . orgDnePathParam ( userToEditParameters . org ) )
280+ const orgUUID = await orgRepo . getOrgUUIDByUserUUID ( identifier )
281+ if ( ! orgUUID ) {
282+ logger . info ( { uuid : req . ctx . uuid , message : identifier + ' user organization could not be found.' } )
283+ return res . status ( 404 ) . json ( error . orgDnePathParam ( identifier ) )
284+ }
285+
286+ org = await orgRepo . findOneByUUID ( orgUUID , { session } )
287+ userToEditParameters . org = org . short_name
288+ userToEditParameters . username = userToEdit . username
289+ } else {
290+ userToEdit = await userRepo . findOneByUsernameAndOrgShortname ( userToEditParameters . username , userToEditParameters . org , { session } )
291+ org = await orgRepo . findOneByShortName ( userToEditParameters . org )
292+ if ( ! org ) {
293+ logger . info ( { uuid : req . ctx . uuid , message : `Target organization ${ userToEditParameters . org } does not exist.` } )
294+ return res . status ( 404 ) . json ( error . orgDnePathParam ( userToEditParameters . org ) )
295+ }
260296 }
261297
262298 if ( body . org_short_name && ! isSecretariat ) {
0 commit comments