diff --git a/src/app/accounts/accountsOrganizationAcceptController.js b/src/app/accounts/accountsOrganizationAcceptController.js index 58009cae..6bb18dc8 100644 --- a/src/app/accounts/accountsOrganizationAcceptController.js +++ b/src/app/accounts/accountsOrganizationAcceptController.js @@ -1,7 +1,7 @@ angular .module('bit.accounts') - .controller('accountsOrganizationAcceptController', function ($scope, $state, apiService, authService, toastr) { + .controller('accountsOrganizationAcceptController', function ($scope, $state, apiService, authService, toastr, $analytics) { $scope.state = { name: $state.current.name, params: $state.params @@ -26,11 +26,13 @@ angular { token: $state.params.token }, function () { + $analytics.eventTrack('Accepted Invitation'); $state.go('backend.user.vault', null, { location: 'replace' }).then(function () { toastr.success('You can access this organization once an administrator confirms your membership.' + ' We\'ll send an email when that happens.', 'Invite Accepted', { timeOut: 10000 }); }); }, function () { + $analytics.eventTrack('Failed To Accept Invitation'); $state.go('backend.user.vault', null, { location: 'replace' }).then(function () { toastr.error('Unable to accept invitation.', 'Error'); }); diff --git a/src/app/accounts/accountsPasswordHintController.js b/src/app/accounts/accountsPasswordHintController.js index 45fe8fce..b26a2436 100644 --- a/src/app/accounts/accountsPasswordHintController.js +++ b/src/app/accounts/accountsPasswordHintController.js @@ -1,11 +1,12 @@ angular .module('bit.accounts') - .controller('accountsPasswordHintController', function ($scope, $rootScope, apiService) { + .controller('accountsPasswordHintController', function ($scope, $rootScope, apiService, $analytics) { $scope.success = false; $scope.submit = function (model) { $scope.submitPromise = apiService.accounts.postPasswordHint({ email: model.email }, function () { + $analytics.eventTrack('Requested Password Hint'); $scope.success = true; }).$promise; }; diff --git a/src/app/accounts/accountsRecoverController.js b/src/app/accounts/accountsRecoverController.js index 527e512f..67e1577a 100644 --- a/src/app/accounts/accountsRecoverController.js +++ b/src/app/accounts/accountsRecoverController.js @@ -1,7 +1,7 @@ angular .module('bit.accounts') - .controller('accountsRecoverController', function ($scope, apiService, cryptoService) { + .controller('accountsRecoverController', function ($scope, apiService, cryptoService, $analytics) { $scope.success = false; $scope.submit = function (model) { @@ -15,6 +15,7 @@ angular }; $scope.submitPromise = apiService.accounts.postTwoFactorRecover(request, function () { + $analytics.eventTrack('Recovered 2FA'); $scope.success = true; }).$promise; }; diff --git a/src/app/global/sideNavController.js b/src/app/global/sideNavController.js index 1e20a83c..7383cfe8 100644 --- a/src/app/global/sideNavController.js +++ b/src/app/global/sideNavController.js @@ -1,7 +1,7 @@ angular .module('bit.global') - .controller('sideNavController', function ($scope, $state, authService, toastr) { + .controller('sideNavController', function ($scope, $state, authService, toastr, $analytics) { $scope.$state = $state; $scope.params = $state.params; $scope.orgs = []; @@ -36,6 +36,7 @@ angular return; } + $analytics.eventTrack('View Organization From Side Nav'); $state.go('backend.org.dashboard', { orgId: org.id }); }; diff --git a/src/app/settings/settingsAddEditEquivalentDomainController.js b/src/app/settings/settingsAddEditEquivalentDomainController.js index f0a786be..3611eed5 100644 --- a/src/app/settings/settingsAddEditEquivalentDomainController.js +++ b/src/app/settings/settingsAddEditEquivalentDomainController.js @@ -1,7 +1,8 @@ angular .module('bit.vault') - .controller('settingsAddEditEquivalentDomainController', function ($scope, $uibModalInstance, $analytics, domainIndex, domains) { + .controller('settingsAddEditEquivalentDomainController', function ($scope, $uibModalInstance, $analytics, + domainIndex, domains) { $analytics.eventTrack('settingsAddEditEquivalentDomainController', { category: 'Modal' }); $scope.domains = domains; diff --git a/src/app/settings/settingsChangeEmailController.js b/src/app/settings/settingsChangeEmailController.js index 7db98a8d..61db736b 100644 --- a/src/app/settings/settingsChangeEmailController.js +++ b/src/app/settings/settingsChangeEmailController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsChangeEmailController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, cipherService, authService, $q, toastr, $analytics) { + .controller('settingsChangeEmailController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, + cipherService, authService, $q, toastr, $analytics) { $analytics.eventTrack('settingsChangeEmailController', { category: 'Modal' }); var _masterPasswordHash, _newMasterPasswordHash, diff --git a/src/app/settings/settingsDeleteController.js b/src/app/settings/settingsDeleteController.js index 0e80a1bf..3a057e96 100644 --- a/src/app/settings/settingsDeleteController.js +++ b/src/app/settings/settingsDeleteController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsDeleteController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, authService, toastr, $analytics) { + .controller('settingsDeleteController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, + authService, toastr, $analytics) { $analytics.eventTrack('settingsDeleteController', { category: 'Modal' }); $scope.submit = function (model) { var request = { diff --git a/src/app/settings/settingsDomainsController.js b/src/app/settings/settingsDomainsController.js index 721ea120..cd193b40 100644 --- a/src/app/settings/settingsDomainsController.js +++ b/src/app/settings/settingsDomainsController.js @@ -96,6 +96,7 @@ } return apiService.settings.putDomains(request, function (domains) { + $analytics.eventTrack('Saved Equivalent Domains'); toastr.success('Domains have been updated.', 'Success!'); }).$promise; }; diff --git a/src/app/settings/settingsSessionsController.js b/src/app/settings/settingsSessionsController.js index 27c69e78..d0d3920d 100644 --- a/src/app/settings/settingsSessionsController.js +++ b/src/app/settings/settingsSessionsController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsSessionsController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, authService, toastr, $analytics) { + .controller('settingsSessionsController', function ($scope, $state, apiService, $uibModalInstance, cryptoService, + authService, toastr, $analytics) { $analytics.eventTrack('settingsSessionsController', { category: 'Modal' }); $scope.submit = function (model) { var request = { diff --git a/src/app/settings/settingsTwoFactorController.js b/src/app/settings/settingsTwoFactorController.js index 5f9f70fb..a430ca41 100644 --- a/src/app/settings/settingsTwoFactorController.js +++ b/src/app/settings/settingsTwoFactorController.js @@ -1,7 +1,8 @@ angular .module('bit.settings') - .controller('settingsTwoFactorController', function ($scope, apiService, $uibModalInstance, cryptoService, authService, $q, toastr, $analytics) { + .controller('settingsTwoFactorController', function ($scope, apiService, $uibModalInstance, cryptoService, authService, + $q, toastr, $analytics) { $analytics.eventTrack('settingsTwoFactorController', { category: 'Modal' }); var _issuer = 'bitwarden', _profile = null, @@ -41,9 +42,9 @@ key: formatString(key), recovery: formatString(response.TwoFactorRecoveryCode), qr: 'https://chart.googleapis.com/chart?chs=120x120&chld=L|0&cht=qr&chl=otpauth://totp/' + - _issuer + ':' + encodeURIComponent(_profile.email) + - '%3Fsecret=' + encodeURIComponent(key) + - '%26issuer=' + _issuer + _issuer + ':' + encodeURIComponent(_profile.email) + + '%3Fsecret=' + encodeURIComponent(key) + + '%26issuer=' + _issuer }; } @@ -78,6 +79,7 @@ }; $scope.print = function (printContent) { + $analytics.eventTrack('Print Recovery Code'); var w = window.open(); w.document.write('

bitwarden two-step login recovery code:

' + '
' + printContent + '
'); diff --git a/src/app/tools/toolsExportController.js b/src/app/tools/toolsExportController.js index b91dd3dc..52e5d4c9 100644 --- a/src/app/tools/toolsExportController.js +++ b/src/app/tools/toolsExportController.js @@ -1,7 +1,8 @@ angular .module('bit.tools') - .controller('toolsExportController', function ($scope, apiService, authService, $uibModalInstance, cryptoService, cipherService, $q, toastr, $analytics) { + .controller('toolsExportController', function ($scope, apiService, authService, $uibModalInstance, cryptoService, + cipherService, $q, toastr, $analytics) { $analytics.eventTrack('toolsExportController', { category: 'Modal' }); $scope.export = function (model) { $scope.startedExport = true; @@ -47,7 +48,9 @@ var csvString = Papa.unparse(exportLogins); var csvBlob = new Blob([csvString]); - if (window.navigator.msSaveOrOpenBlob) { // IE hack. ref http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx + + // IE hack. ref http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx + if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(csvBlob, makeFileName()); } else { @@ -55,7 +58,9 @@ a.href = window.URL.createObjectURL(csvBlob, { type: 'text/plain' }); a.download = makeFileName(); document.body.appendChild(a); - a.click(); // IE: "Access is denied". ref: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access + // IE: "Access is denied". + // ref: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access + a.click(); document.body.removeChild(a); } diff --git a/src/app/vault/vaultController.js b/src/app/vault/vaultController.js index 7ba06b6d..0d83d6df 100644 --- a/src/app/vault/vaultController.js +++ b/src/app/vault/vaultController.js @@ -2,7 +2,7 @@ .module('bit.vault') .controller('vaultController', function ($scope, $uibModal, apiService, $filter, cryptoService, authService, toastr, - cipherService, $q, $localStorage, $timeout, $rootScope, $state) { + cipherService, $q, $localStorage, $timeout, $rootScope, $state, $analytics) { $scope.loading = true; $scope.logins = []; $scope.favoriteCollapsed = $localStorage.collapsedFolders && 'favorite' in $localStorage.collapsedFolders; @@ -187,6 +187,7 @@ } apiService.logins.del({ id: login.id }, function () { + $analytics.eventTrack('Deleted Login'); removeLoginFromScopes(login); }); }; @@ -231,6 +232,7 @@ } apiService.folders.del({ id: folder.id }, function () { + $analytics.eventTrack('Deleted Folder'); var index = $rootScope.vaultFolders.indexOf(folder); if (index > -1) { $rootScope.vaultFolders.splice(index, 1);