From 3fb39693515ddfd45628364be642ac0b638b2e66 Mon Sep 17 00:00:00 2001 From: Afrisal Yodi Purnama Date: Thu, 26 Mar 2020 17:04:55 +0700 Subject: [PATCH] Gitlab add user expiration feature. --- package.json | 1 + src/controllers/GitlabController.js | 13 +++++++++++-- src/front/src/app/app.js | 3 ++- .../git-access-control/access-control.service.js | 7 ++++++- .../git-access-dialog.controller.js | 10 ++++++++++ .../app/git-access-control/git-access-dialog.html | 11 +++++++++-- .../gitAccessControl.controller.js | 7 ++++++- src/front/src/index.css | 3 ++- src/front/src/index.js | 1 + src/models/OwnerUserGroup.js | 4 ++++ src/routes.js | 6 ++++++ src/services/GitlabService.js | 15 ++++++++++++--- 12 files changed, 70 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index b0b388b..aed6a92 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "angular-touch": "~1.7.4", "angular-ui-bootstrap": "~2.5.0", "angular-ui-router": "~1.0.23", + "angularjs-datepicker": "^2.1.23", "auth0-angular": "~4.0.4", "auth0-js": "^9.11.3", "auth0-lock": "^11.17.2", diff --git a/src/controllers/GitlabController.js b/src/controllers/GitlabController.js index 3575005..a1ed04a 100644 --- a/src/controllers/GitlabController.js +++ b/src/controllers/GitlabController.js @@ -115,7 +115,11 @@ async function getGroupRegistrationUrl(req) { if (!user || !user.accessToken) { throw new errors.UnauthorizedError('You have not setup for Gitlab.'); } - return await GitlabService.getGroupRegistrationUrl(user.username, req.params.id, req.params.accessLevel); + return await GitlabService.getGroupRegistrationUrl( + user.username, + req.params.id, + req.params.accessLevel, + req.params.expiredAt); } /** @@ -193,7 +197,12 @@ async function addUserToGroupCallback(req, res) { }); // add user to group - const gitlabUser = await GitlabService.addGroupMember(group.groupId, ownerUser.accessToken, token, group.accessLevel); + const gitlabUser = await GitlabService.addGroupMember( + group.groupId, + ownerUser.accessToken, + token, + group.accessLevel, + group.expiredAt); // associate gitlab username with TC username const mapping = await dbHelper.scanOne(UserMapping, { topcoderUsername: {eq: req.session.tcUsername}, diff --git a/src/front/src/app/app.js b/src/front/src/app/app.js index 33f89c9..c3e6911 100644 --- a/src/front/src/app/app.js +++ b/src/front/src/app/app.js @@ -12,7 +12,8 @@ angular.module('topcoderX', [ 'ui.router', 'ui.bootstrap', 'angular-clipboard', - 'angular-jwt']) + 'angular-jwt', + '720kb.datepicker']) // In the run phase of your Angular application .run(['AuthService', function (AuthService) { // init AuthService, it has to be done once, when app starts diff --git a/src/front/src/app/git-access-control/access-control.service.js b/src/front/src/app/git-access-control/access-control.service.js index dadf140..fcc9eec 100644 --- a/src/front/src/app/git-access-control/access-control.service.js +++ b/src/front/src/app/git-access-control/access-control.service.js @@ -24,7 +24,12 @@ angular.module('topcoderX') * get gitlab shareable link * */ - service.getGitlabShareableLink = function (groupId, accessLevel) { + service.getGitlabShareableLink = function (groupId, accessLevel, expiredAt) { + if (expiredAt) { + return $http.get(baseUrl + '/api/v1/gitlab/groups/' + groupId + '/registrationurl/' + accessLevel + '/' + expiredAt).then(function (response) { + return response; + }); + } return $http.get(baseUrl + '/api/v1/gitlab/groups/' + groupId + '/registrationurl/' + accessLevel).then(function (response) { return response; }); diff --git a/src/front/src/app/git-access-control/git-access-dialog.controller.js b/src/front/src/app/git-access-control/git-access-dialog.controller.js index 1823278..6838f17 100644 --- a/src/front/src/app/git-access-control/git-access-dialog.controller.js +++ b/src/front/src/app/git-access-control/git-access-dialog.controller.js @@ -12,10 +12,12 @@ angular.module('topcoderX').controller('GitAccessDialogController', [ ) { $scope.provider = provider; $scope.accessLevel = ''; + $scope.expiredAt = ''; if ($scope.provider === 'github') { $scope.accessLevel = 'member'; } else { $scope.accessLevel = '30'; + $scope.dateLimit = new Date().toDateString(); } /** @@ -25,12 +27,20 @@ angular.module('topcoderX').controller('GitAccessDialogController', [ $scope.accessLevel = accessLevel; }; + /** + * Update the expired at params + */ + $scope.updateExpired = function (expiredAt) { + $scope.expiredAt = expiredAt; + }; + /** * Set changes to father controller */ $scope.setChanges = function () { $uibModalInstance.close({ accessLevel: $scope.accessLevel, + expiredAt: $scope.expiredAt }); }; diff --git a/src/front/src/app/git-access-control/git-access-dialog.html b/src/front/src/app/git-access-control/git-access-dialog.html index d0794a6..570ec13 100644 --- a/src/front/src/app/git-access-control/git-access-dialog.html +++ b/src/front/src/app/git-access-control/git-access-dialog.html @@ -9,14 +9,21 @@