From 456d2332f3f3b42130fd77ff23ae70aeca4f3ec0 Mon Sep 17 00:00:00 2001 From: Dhruvit Raithatha <dhruvit.raithatha@gmail.com> Date: Fri, 8 Sep 2023 10:08:51 +0530 Subject: [PATCH] fix: handle case of missing member in "Add User to Repository" flow --- services/GitlabService.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/services/GitlabService.js b/services/GitlabService.js index 6d24fd4..c58449f 100644 --- a/services/GitlabService.js +++ b/services/GitlabService.js @@ -345,7 +345,17 @@ async function getRepository(user, repoURL) { async function addUserToRepository(copilot, repository, user, accessLevel) { const refreshedCopilot = await _refreshGitlabUserAccessToken(copilot); const gitlab = await _authenticate(refreshedCopilot.accessToken); - const member = await gitlab.ProjectMembers.show(repository.id, user.userProviderId); + const member = await new Promise((resolve, reject) => { + gitlab.ProjectMembers.show(repository.id, user.userProviderId) + .then((result) => resolve(result)) + .catch((err) => { + // eslint-disable-next-line no-magic-numbers + if (_.get(err, 'cause.response.status') === 404) { + return resolve(null); + } + return reject(err); + }); + }); if (!member) { await gitlab.ProjectMembers.add(repository.id, user.userProviderId, accessLevel); return; @@ -386,16 +396,17 @@ async function _refreshGitlabUserAccessToken(copilot) { .end(); // save user token data const expiresIn = refreshTokenResult.body.expires_in || config.GITLAB_ACCESS_TOKEN_DEFAULT_EXPIRATION; - return await dbHelper.update(models.User, copilot.id, { + const updates = { accessToken: refreshTokenResult.body.access_token, accessTokenExpiration: new Date(new Date().getTime() + expiresIn * MS_PER_SECOND), refreshToken: refreshTokenResult.body.refresh_token - }); + }; + copilot = _.assign(copilot, updates); + return await dbHelper.update(models.User, copilot.id, updates); } return copilot; } - module.exports = { createComment, updateIssue,