mirror of
https://github.com/bitwarden/browser
synced 2025-12-15 07:43:35 +00:00
300 lines
12 KiB
JavaScript
300 lines
12 KiB
JavaScript
angular
|
|
.module('bit')
|
|
|
|
.config(function ($stateProvider, $urlRouterProvider, $compileProvider, $sceDelegateProvider, toastrConfig) {
|
|
$compileProvider.imgSrcSanitizationWhitelist(
|
|
/^\s*((https?|ftp|file|blob):|data:image\/|(moz|chrome|ms-browser)-extension)/);
|
|
|
|
angular.extend(toastrConfig, {
|
|
closeButton: true,
|
|
progressBar: true,
|
|
showMethod: 'slideDown',
|
|
positionClass: 'toast-bottom-center'
|
|
});
|
|
|
|
$urlRouterProvider.otherwise(function ($injector, $location) {
|
|
var $state = $injector.get('$state');
|
|
|
|
if (!chrome.extension.getBackgroundPage()) {
|
|
$state.go('privateMode');
|
|
return;
|
|
}
|
|
|
|
var userService = $injector.get('userService');
|
|
var cryptoService = $injector.get('cryptoService');
|
|
|
|
var key;
|
|
cryptoService.getKey().then(function (theKey) {
|
|
key = theKey;
|
|
return userService.isAuthenticated();
|
|
}).then(function (isAuthenticated) {
|
|
if (isAuthenticated) {
|
|
if (!key) {
|
|
$state.go('lock');
|
|
}
|
|
else {
|
|
$state.go('tabs.current');
|
|
}
|
|
}
|
|
else {
|
|
$state.go('home');
|
|
}
|
|
});
|
|
});
|
|
|
|
$stateProvider
|
|
.state('splash', {
|
|
url: '/splash',
|
|
controller: 'baseController',
|
|
template: require('./global/splash.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
.state('privateMode', {
|
|
url: '/private-mode',
|
|
controller: 'privateModeController',
|
|
template: require('./global/privateMode.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
.state('home', {
|
|
url: '/home',
|
|
controller: 'baseController',
|
|
template: require('./global/home.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
|
|
.state('login', {
|
|
url: '/login',
|
|
controller: 'accountsLoginController',
|
|
template: require('./accounts/views/accountsLogin.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null, email: null }
|
|
})
|
|
.state('hint', {
|
|
url: '/hint',
|
|
controller: 'accountsHintController',
|
|
template: require('./accounts/views/accountsHint.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
.state('twoFactor', {
|
|
url: '/two-factor',
|
|
controller: 'accountsLoginTwoFactorController',
|
|
template: require('./accounts/views/accountsLoginTwoFactor.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null, email: null, masterPassword: null, providers: null, provider: null }
|
|
})
|
|
.state('twoFactorMethods', {
|
|
url: '/two-factor-methods',
|
|
controller: 'accountsTwoFactorMethodsController',
|
|
template: require('./accounts/views/accountsTwoFactorMethods.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null, email: null, masterPassword: null, providers: null, provider: null }
|
|
})
|
|
.state('register', {
|
|
url: '/register',
|
|
controller: 'accountsRegisterController',
|
|
template: require('./accounts/views/accountsRegister.html'),
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
|
|
.state('tabs', {
|
|
url: '/tab',
|
|
abstract: true,
|
|
template: require('./global/tabs.html'),
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('tabs.current', {
|
|
url: '/current',
|
|
template: require('./current/views/current.html'),
|
|
controller: 'currentController'
|
|
})
|
|
.state('tabs.vault', {
|
|
url: '/vault',
|
|
template: require('./vault/views/vault.html'),
|
|
controller: 'vaultController',
|
|
params: { syncOnLoad: false, searchText: null }
|
|
})
|
|
.state('tabs.settings', {
|
|
url: '/settings',
|
|
template: require('./settings/views/settings.html'),
|
|
controller: 'settingsController'
|
|
})
|
|
.state('tabs.tools', {
|
|
url: '/tools',
|
|
component: 'tools'
|
|
})
|
|
|
|
.state('viewFolder', {
|
|
url: '/view-folder?folderId',
|
|
template: require('./vault/views/vaultViewFolder.html'),
|
|
controller: 'vaultViewFolderController',
|
|
data: { authorize: true },
|
|
params: { animation: null, from: 'vault' }
|
|
})
|
|
.state('viewCipher', {
|
|
url: '/view-cipher?cipherId',
|
|
template: require('./vault/views/vaultViewCipher.html'),
|
|
controller: 'vaultViewCipherController',
|
|
data: { authorize: true },
|
|
params: { animation: null, from: 'vault' }
|
|
})
|
|
.state('addCipher', {
|
|
url: '/add-cipher',
|
|
template: require('./vault/views/vaultAddCipher.html'),
|
|
controller: 'vaultAddCipherController',
|
|
data: { authorize: true },
|
|
params: { animation: null, name: null, uri: null, folderId: null, cipher: null, from: 'vault' }
|
|
})
|
|
.state('editCipher', {
|
|
url: '/edit-cipher?cipherId',
|
|
template: require('./vault/views/vaultEditCipher.html'),
|
|
controller: 'vaultEditCipherController',
|
|
data: { authorize: true },
|
|
params: { animation: null, fromView: true, cipher: null, from: 'vault' }
|
|
})
|
|
.state('attachments', {
|
|
url: '/attachments?id',
|
|
template: require('./vault/views/vaultAttachments.html'),
|
|
controller: 'vaultAttachmentsController',
|
|
data: { authorize: true },
|
|
params: { animation: null, fromView: true, from: 'vault' }
|
|
})
|
|
|
|
.state('passwordGenerator', {
|
|
url: '/password-generator',
|
|
component: 'passwordGenerator',
|
|
data: { authorize: true },
|
|
params: { animation: null, addState: null, editState: null }
|
|
})
|
|
.state('passwordGeneratorHistory', {
|
|
url: '/history',
|
|
template: require('./tools/views/toolsPasswordGeneratorHistory.html'),
|
|
controller: 'toolsPasswordGeneratorHistoryController',
|
|
data: { authorize: true },
|
|
params: { animation: null, addState: null, editState: null }
|
|
})
|
|
.state('export', {
|
|
url: '/export',
|
|
template: require('./tools/views/toolsExport.html'),
|
|
controller: 'toolsExportController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
|
|
.state('about', {
|
|
url: '/about',
|
|
template: require('./settings/views/settingsAbout.html'),
|
|
controller: 'settingsAboutController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('credits', {
|
|
url: '/credits',
|
|
template: require('./settings/views/settingsCredits.html'),
|
|
controller: 'settingsCreditsController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('features', {
|
|
url: '/features',
|
|
template: require('./settings/views/settingsFeatures.html'),
|
|
controller: 'settingsFeaturesController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('help', {
|
|
url: '/help',
|
|
template: require('./settings/views/settingsHelp.html'),
|
|
controller: 'settingsHelpController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('sync', {
|
|
url: '/sync',
|
|
template: require('./settings/views/settingsSync.html'),
|
|
controller: 'settingsSyncController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('premium', {
|
|
url: '/premium',
|
|
template: require('./settings/views/settingsPremium.html'),
|
|
controller: 'settingsPremiumController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
|
|
.state('folders', {
|
|
url: '/folders',
|
|
template: require('./settings/views/settingsFolders.html'),
|
|
controller: 'settingsFoldersController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('addFolder', {
|
|
url: '/addFolder',
|
|
template: require('./settings/views/settingsAddFolder.html'),
|
|
controller: 'settingsAddFolderController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('editFolder', {
|
|
url: '/editFolder?folderId',
|
|
template: require('./settings/views/settingsEditFolder.html'),
|
|
controller: 'settingsEditFolderController',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
})
|
|
.state('environment', {
|
|
url: '/environment',
|
|
template: require('./settings/views/settingsEnvironment.html'),
|
|
controller: 'settingsEnvironmentController',
|
|
data: { authorize: false },
|
|
params: { animation: null }
|
|
})
|
|
.state('lock', {
|
|
url: '/lock',
|
|
component: 'lock',
|
|
data: { authorize: true },
|
|
params: { animation: null }
|
|
});
|
|
})
|
|
.run(function ($trace, $transitions, userService, $state, constantsService, stateService) {
|
|
//$trace.enable('TRANSITION');
|
|
|
|
stateService.init();
|
|
|
|
$transitions.onStart({}, function (trans) {
|
|
const $state = trans.router.stateService;
|
|
const toState = trans.to();
|
|
|
|
if ($state.current.name.indexOf('tabs.') > -1 && toState.name.indexOf('tabs.') > -1) {
|
|
stateService.removeState('vault');
|
|
stateService.removeState('viewFolder');
|
|
}
|
|
|
|
const userService = trans.injector().get('userService');
|
|
|
|
if (!userService) {
|
|
return;
|
|
}
|
|
|
|
userService.isAuthenticated().then((isAuthenticated) => {
|
|
if (isAuthenticated) {
|
|
var obj = {};
|
|
obj[constantsService.lastActiveKey] = (new Date()).getTime();
|
|
chrome.storage.local.set(obj, function () { });
|
|
}
|
|
else if (toState.data && toState.data.authorize) {
|
|
event.preventDefault();
|
|
chrome.runtime.sendMessage({ command: 'logout' });
|
|
}
|
|
});
|
|
});
|
|
});
|