diff --git a/src/app/organization/organizationEventsController.js b/src/app/organization/organizationEventsController.js index e3f4fdaf5e..53a2676a90 100644 --- a/src/app/organization/organizationEventsController.js +++ b/src/app/organization/organizationEventsController.js @@ -83,7 +83,8 @@ appName: eventInfo.appName, userId: userId, userName: userId ? (orgUsersUserIdDict[userId] || '-') : '-', - date: list.Data[i].Date + date: list.Data[i].Date, + ip: list.Data[i].IpAddress }); } if ($scope.events && $scope.events.length > 0) { diff --git a/src/app/organization/organizationPeopleController.js b/src/app/organization/organizationPeopleController.js index e56b183310..8e03c82625 100644 --- a/src/app/organization/organizationPeopleController.js +++ b/src/app/organization/organizationPeopleController.js @@ -5,6 +5,7 @@ toastr, $analytics) { $scope.users = []; $scope.useGroups = false; + $scope.useEvents = false; $scope.$on('$viewContentLoaded', function () { loadList(); @@ -13,6 +14,7 @@ if (profile.organizations) { var org = profile.organizations[$state.params.orgId]; $scope.useGroups = !!org.useGroups; + $scope.useEvents = !!org.useEvents; } }); }); @@ -110,6 +112,18 @@ }); }; + $scope.events = function (user) { + $uibModal.open({ + animation: true, + templateUrl: 'app/organization/views/organizationPeopleEvents.html', + controller: 'organizationPeopleEventsController', + resolve: { + orgUser: function () { return user; }, + orgId: function () { return $state.params.orgId; } + } + }); + }; + function loadList() { apiService.organizationUsers.list({ orgId: $state.params.orgId }, function (list) { var users = []; diff --git a/src/app/organization/organizationPeopleEventsController.js b/src/app/organization/organizationPeopleEventsController.js new file mode 100644 index 0000000000..9870c55d5d --- /dev/null +++ b/src/app/organization/organizationPeopleEventsController.js @@ -0,0 +1,74 @@ +angular + .module('bit.organization') + + .controller('organizationPeopleEventsController', function ($scope, apiService, $uibModalInstance, + orgUser, $analytics, eventService, orgId) { + $analytics.eventTrack('organizationPeopleEventsController', { category: 'Modal' }); + $scope.email = orgUser.email; + $scope.events = []; + $scope.loading = true; + $scope.continuationToken = null; + + var defaultFilters = eventService.getDefaultDateFilters(); + $scope.filterStart = defaultFilters.start; + $scope.filterEnd = defaultFilters.end; + + $uibModalInstance.opened.then(function () { + loadEvents(true); + }); + + $scope.refresh = function () { + loadEvents(true); + }; + + $scope.next = function () { + loadEvents(false); + }; + + function loadEvents(clearExisting) { + var filterResult = eventService.formatDateFilters($scope.filterStart, $scope.filterEnd); + if (filterResult.error) { + alert(filterResult.error); + return; + } + + if (clearExisting) { + $scope.continuationToken = null; + $scope.events = []; + } + + $scope.loading = true; + return apiService.events.listOrganizationUser({ + orgId: orgId, + id: orgUser.id, + start: filterResult.start, + end: filterResult.end, + continuationToken: $scope.continuationToken + }).$promise.then(function (list) { + $scope.continuationToken = list.ContinuationToken; + + var events = []; + for (var i = 0; i < list.Data.length; i++) { + var eventInfo = eventService.getEventInfo(list.Data[i]); + events.push({ + message: eventInfo.message, + appIcon: eventInfo.appIcon, + appName: eventInfo.appName, + date: list.Data[i].Date, + ip: list.Data[i].IpAddress + }); + } + if ($scope.events && $scope.events.length > 0) { + $scope.events = $scope.events.concat(events); + } + else { + $scope.events = events; + } + $scope.loading = false; + }); + } + + $scope.close = function () { + $uibModalInstance.dismiss('cancel'); + }; + }); diff --git a/src/app/organization/organizationVaultCipherEventsController.js b/src/app/organization/organizationVaultCipherEventsController.js index 9e3a8ca104..ad642ef7f6 100644 --- a/src/app/organization/organizationVaultCipherEventsController.js +++ b/src/app/organization/organizationVaultCipherEventsController.js @@ -1,7 +1,7 @@ angular .module('bit.organization') - .controller('organizationVaultCipherEventsController', function ($scope, apiService, $uibModalInstance, cipherService, + .controller('organizationVaultCipherEventsController', function ($scope, apiService, $uibModalInstance, cipher, $analytics, eventService) { $analytics.eventTrack('organizationVaultCipherEventsController', { category: 'Modal' }); $scope.cipher = cipher; @@ -84,7 +84,8 @@ appName: eventInfo.appName, userId: userId, userName: userId ? (orgUsersUserIdDict[userId] || '-') : '-', - date: list.Data[i].Date + date: list.Data[i].Date, + ip: list.Data[i].IpAddress }); } if ($scope.events && $scope.events.length > 0) { diff --git a/src/app/organization/organizationVaultController.js b/src/app/organization/organizationVaultController.js index 675c7fee9d..fa18beee40 100644 --- a/src/app/organization/organizationVaultController.js +++ b/src/app/organization/organizationVaultController.js @@ -6,8 +6,16 @@ $scope.ciphers = []; $scope.collections = []; $scope.loading = true; + $scope.useEvents = false; $scope.$on('$viewContentLoaded', function () { + authService.getUserProfile().then(function (profile) { + if (profile.organizations) { + var org = profile.organizations[$state.params.orgId]; + $scope.useEvents = !!org.useEvents; + } + }); + var collectionPromise = apiService.collections.listOrganization({ orgId: $state.params.orgId }, function (collections) { var decCollections = [{ id: null, diff --git a/src/app/organization/views/organizationEvents.html b/src/app/organization/views/organizationEvents.html index 6adbf2248f..dca66054b3 100644 --- a/src/app/organization/views/organizationEvents.html +++ b/src/app/organization/views/organizationEvents.html @@ -47,7 +47,7 @@ {{event.userName}} - + {{event.message}} diff --git a/src/app/organization/views/organizationPeople.html b/src/app/organization/views/organizationPeople.html index 26db4d9968..6e470bee8a 100644 --- a/src/app/organization/views/organizationPeople.html +++ b/src/app/organization/views/organizationPeople.html @@ -46,6 +46,12 @@ Groups +
  • + + Event Logs + +
  • Confirm diff --git a/src/app/organization/views/organizationPeopleEvents.html b/src/app/organization/views/organizationPeopleEvents.html new file mode 100644 index 0000000000..4f997976e5 --- /dev/null +++ b/src/app/organization/views/organizationPeopleEvents.html @@ -0,0 +1,56 @@ + + + diff --git a/src/app/organization/views/organizationVault.html b/src/app/organization/views/organizationVault.html index 500796afb2..4ef3c0b61e 100644 --- a/src/app/organization/views/organizationVault.html +++ b/src/app/organization/views/organizationVault.html @@ -57,7 +57,7 @@
  • - + Event Logs
  • diff --git a/src/app/organization/views/organizationVaultCipherEvents.html b/src/app/organization/views/organizationVaultCipherEvents.html index f3bd5c29fc..ea9d38d66f 100644 --- a/src/app/organization/views/organizationVaultCipherEvents.html +++ b/src/app/organization/views/organizationVaultCipherEvents.html @@ -39,7 +39,7 @@ {{event.userName}} - + {{event.message}} diff --git a/src/index.html b/src/index.html index e22d876f05..270e8918ef 100644 --- a/src/index.html +++ b/src/index.html @@ -185,6 +185,7 @@ + @@ -204,13 +205,13 @@ + -