From ee11bb5137c89894b66e4c83e26acf3dc6f1f592 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 3 Nov 2017 15:12:49 -0400 Subject: [PATCH] user service to ts --- src/background.html | 1 - src/background.js | 5 +- src/services/cipherService.js | 16 ++-- src/services/folderService.js | 12 +-- src/services/settingsService.js | 4 +- src/services/syncService.js | 6 +- src/services/user.service.ts | 83 +++++++++++++++++ src/services/userService.js | 153 -------------------------------- 8 files changed, 105 insertions(+), 175 deletions(-) create mode 100644 src/services/user.service.ts delete mode 100644 src/services/userService.js diff --git a/src/background.html b/src/background.html index fe0c92c308f..ad2926ad51f 100644 --- a/src/background.html +++ b/src/background.html @@ -5,7 +5,6 @@ - diff --git a/src/background.js b/src/background.js index 3c3a35b0372..044708bc7e7 100644 --- a/src/background.js +++ b/src/background.js @@ -9,6 +9,7 @@ import LockService from './services/lockService.js'; import PasswordGenerationService from './services/passwordGeneration.service'; import TokenService from './services/token.service'; import TotpService from './services/totp.service'; +import UserService from './services/user.service'; import UtilsService from './services/utils.service'; // Model imports @@ -84,7 +85,7 @@ var bg_isBackground = true, window.bg_appIdService = bg_appIdService = new AppIdService(); window.bg_apiService = bg_apiService = new ApiService(bg_tokenService, logout); window.bg_environmentService = bg_environmentService = new EnvironmentService(bg_apiService); - window.bg_userService = bg_userService = new UserService(bg_tokenService, bg_apiService, bg_cryptoService, bg_utilsService); + window.bg_userService = bg_userService = new UserService(bg_tokenService); window.bg_settingsService = bg_settingsService = new SettingsService(bg_userService, bg_utilsService); window.bg_cipherService = bg_cipherService = new CipherService(bg_cryptoService, bg_userService, bg_apiService, bg_settingsService, bg_utilsService, bg_constantsService); @@ -896,7 +897,7 @@ var bg_isBackground = true, function logout(expired, callback) { bg_syncService.setLastSync(new Date(0), function () { - bg_userService.getUserIdPromise().then(function (userId) { + bg_userService.getUserId().then(function (userId) { return Q.all([ bg_tokenService.clearToken(), bg_cryptoService.clearKeys(), diff --git a/src/services/cipherService.js b/src/services/cipherService.js index 1e3c25706cf..4398420f7ba 100644 --- a/src/services/cipherService.js +++ b/src/services/cipherService.js @@ -160,7 +160,7 @@ function initCipherService() { key = null, localData; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'ciphers_' + userId; return self.utilsService.getObjFromStorage(self.localDataKey); }).then(function (data) { @@ -183,7 +183,7 @@ function initCipherService() { key = null, localData = null; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'ciphers_' + userId; return self.utilsService.getObjFromStorage(self.localDataKey); }).then(function (data) { @@ -337,7 +337,7 @@ function initCipherService() { function apiSuccess(response) { cipher.id = response.id; - self.userService.getUserIdPromise().then(function (userId) { + self.userService.getUserId().then(function (userId) { var data = new CipherData(response, userId); return self.upsert(data); }).then(function () { @@ -352,7 +352,7 @@ function initCipherService() { var self = this, key = null; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'ciphers_' + userId; return self.utilsService.getObjFromStorage(key); }).then(function (ciphers) { @@ -412,7 +412,7 @@ function initCipherService() { CipherService.prototype.replace = function (ciphers) { var self = this; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { return self.utilsService.saveObjToStorage('ciphers_' + userId, ciphers); }).then(function () { self.decryptedCipherCache = null; @@ -430,7 +430,7 @@ function initCipherService() { var self = this, key = null; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'ciphers_' + userId; return self.utilsService.getObjFromStorage(key); }).then(function (ciphers) { @@ -514,7 +514,7 @@ function initCipherService() { return self.apiService.postCipherAttachment(cipher.id, fd); }).then(function (resp) { response = resp; - return self.userService.getUserIdPromise(); + return self.userService.getUserId(); }, function (resp) { apiErrored = true; handleErrorMessage(resp, deferred); @@ -542,7 +542,7 @@ function initCipherService() { var self = this, key = null; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'ciphers_' + userId; return self.utilsService.getObjFromStorage(key); }).then(function (ciphers) { diff --git a/src/services/folderService.js b/src/services/folderService.js index 538610883ca..01d8d058fbb 100644 --- a/src/services/folderService.js +++ b/src/services/folderService.js @@ -28,7 +28,7 @@ function initFolderService() { FolderService.prototype.get = function (id) { var self = this; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { return self.utilsService.getObjFromStorage('folders_' + userId); }).then(function (folders) { if (folders && id in folders) { @@ -42,7 +42,7 @@ function initFolderService() { FolderService.prototype.getAll = function () { var self = this; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { return self.utilsService.getObjFromStorage('folders_' + userId); }).then(function (folders) { var response = []; @@ -120,7 +120,7 @@ function initFolderService() { function apiSuccess(response) { folder.id = response.id; - self.userService.getUserIdPromise().then(function (userId) { + self.userService.getUserId().then(function (userId) { var data = new FolderData(response, userId); return self.upsert(data); }).then(function () { @@ -135,7 +135,7 @@ function initFolderService() { var self = this, key = null; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'folders_' + userId; return self.utilsService.getObjFromStorage(key); }).then(function (folders) { @@ -160,7 +160,7 @@ function initFolderService() { FolderService.prototype.replace = function (folders) { var self = this; - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { return self.utilsService.saveObjToStorage('folders_' + userId, folders); }).then(function () { self.decryptedFolderCache = null; @@ -180,7 +180,7 @@ function initFolderService() { // TODO: Delete folder reference for associated ciphers - return self.userService.getUserIdPromise().then(function (userId) { + return self.userService.getUserId().then(function (userId) { key = 'folders_' + userId; return self.utilsService.getObjFromStorage(key); }).then(function (folders) { diff --git a/src/services/settingsService.js b/src/services/settingsService.js index a1183879f14..741adb4ab6b 100644 --- a/src/services/settingsService.js +++ b/src/services/settingsService.js @@ -23,7 +23,7 @@ function initSettingsService() { return; } - this.userService.getUserId(function (userId) { + this.userService.getUserId().then(function (userId) { var key = 'settings_' + userId; chrome.storage.local.get(key, function (obj) { self.settingsCache = obj[key]; @@ -66,7 +66,7 @@ function initSettingsService() { throw 'callback function required'; } - self.userService.getUserId(function (userId) { + self.userService.getUserId().then(function (userId) { var settingsKey = 'settings_' + userId; self.getSettings(function (settings) { diff --git a/src/services/syncService.js b/src/services/syncService.js index 88405848b24..95f33ba31e2 100644 --- a/src/services/syncService.js +++ b/src/services/syncService.js @@ -44,7 +44,7 @@ function initSyncService() { return; } - self.userService.getUserId(function (userId) { + self.userService.getUserId().then(function (userId) { self.apiService.getSync().then(function (response) { syncProfile(self, response.profile).then(function () { return syncFolders(self, userId, response.folders); @@ -173,7 +173,7 @@ function initSyncService() { throw 'callback function required'; } - this.userService.getUserId(function (userId) { + this.userService.getUserId().then(function (userId) { var lastSyncKey = 'lastSync_' + userId; chrome.storage.local.get(lastSyncKey, function (obj) { var lastSync = obj[lastSyncKey]; @@ -192,7 +192,7 @@ function initSyncService() { throw 'callback function required'; } - this.userService.getUserId(function (userId) { + this.userService.getUserId().then(function (userId) { var lastSyncKey = 'lastSync_' + userId; var obj = {}; diff --git a/src/services/user.service.ts b/src/services/user.service.ts new file mode 100644 index 00000000000..6a4059066dc --- /dev/null +++ b/src/services/user.service.ts @@ -0,0 +1,83 @@ +import TokenService from './token.service'; +import UtilsService from './utils.service'; + +const Keys = { + userId: 'userId', + userEmail: 'userEmail', + stamp: 'securityStamp', +}; + +export default class UserService { + userId: string; + email: string; + stamp: string; + + constructor(private tokenService: TokenService) { + } + + // TODO: fix callbacks + setUserIdAndEmail(userId: string, email: string): Promise { + this.email = email; + this.userId = userId; + + return Promise.all([ + UtilsService.saveObjToStorage(Keys.userEmail, email), + UtilsService.saveObjToStorage(Keys.userId, userId), + ]); + } + + setSecurityStamp(stamp: string): Promise { + this.stamp = stamp; + return UtilsService.saveObjToStorage(Keys.stamp, stamp); + } + + // TODO: callbacks + async getUserId(): Promise { + if (this.userId != null) { + return this.userId; + } + + this.userId = await UtilsService.getObjFromStorage(Keys.userId); + return this.userId; + } + + // TODO: callbacks + async getEmail(): Promise { + if (this.email != null) { + return this.email; + } + + this.email = await UtilsService.getObjFromStorage(Keys.userEmail); + return this.email; + } + + async getSecurityStamp(): Promise { + if (this.stamp != null) { + return this.stamp; + } + + this.stamp = await UtilsService.getObjFromStorage(Keys.stamp); + return this.stamp; + } + + async clear(): Promise { + await Promise.all([ + UtilsService.removeFromStorage(Keys.userId), + UtilsService.removeFromStorage(Keys.userEmail), + UtilsService.removeFromStorage(Keys.stamp), + ]); + + this.userId = this.email = this.stamp = null; + } + + // TODO: fix callbacks + async isAuthenticated(): Promise { + const token = await this.tokenService.getToken(); + if (token == null) { + return false; + } + + const userId = await this.getUserId(); + return userId != null; + } +} diff --git a/src/services/userService.js b/src/services/userService.js deleted file mode 100644 index f0e54744df7..00000000000 --- a/src/services/userService.js +++ /dev/null @@ -1,153 +0,0 @@ -function UserService(tokenService, apiService, cryptoService, utilsService) { - this.tokenService = tokenService; - this.apiService = apiService; - this.cryptoService = cryptoService; - this.utilsService = utilsService; - - initUserService(); -} - -function initUserService() { - var userIdKey = 'userId', - userEmailKey = 'userEmail', - stampKey = 'securityStamp'; - - var _userId = null, - _email = null, - _stamp = null; - - UserService.prototype.setUserIdAndEmail = function (userId, email, callback) { - if (!callback || typeof callback !== 'function') { - throw 'callback function required'; - } - - _email = email; - var emailObj = {}; - emailObj[userEmailKey] = email; - - _userId = userId; - var userIdObj = {}; - userIdObj[userIdKey] = userId; - - chrome.storage.local.set(userIdObj, function () { - chrome.storage.local.set(emailObj, function () { - callback(); - }); - }); - }; - - UserService.prototype.setSecurityStamp = function (stamp) { - var deferred = Q.defer(); - - if (stamp === undefined) { - deferred.resolve(); - return deferred.promise; - } - - _stamp = stamp; - var stampObj = {}; - stampObj[stampKey] = stamp; - - chrome.storage.local.set(stampObj, function () { - deferred.resolve(); - }); - - return deferred.promise; - }; - - UserService.prototype.getUserId = function (callback) { - if (!callback || typeof callback !== 'function') { - throw 'callback function required'; - } - - if (_userId) { - return callback(_userId); - } - - chrome.storage.local.get(userIdKey, function (obj) { - if (obj && obj[userIdKey]) { - _userId = obj[userIdKey]; - } - - return callback(_userId); - }); - }; - - UserService.prototype.getUserIdPromise = function () { - if (_userId) { - return Q(_userId); - } - - return utilsService.getObjFromStorage(userIdKey).then(function (obj) { - if (obj) { - _userId = obj; - } - return _userId; - }); - }; - - UserService.prototype.getEmail = function (callback) { - if (!callback || typeof callback !== 'function') { - throw 'callback function required'; - } - - if (_email) { - return callback(_email); - } - - chrome.storage.local.get(userEmailKey, function (obj) { - if (obj && obj[userEmailKey]) { - _email = obj[userEmailKey]; - } - - return callback(_email); - }); - }; - - UserService.prototype.getSecurityStamp = function () { - var deferred = Q.defer(); - - if (_stamp) { - deferred.resolve(_stamp); - } - - chrome.storage.local.get(stampKey, function (obj) { - if (obj && obj[stampKey]) { - _stamp = obj[stampKey]; - } - - deferred.resolve(_stamp); - }); - - return deferred.promise; - }; - - UserService.prototype.clear = function () { - var self = this; - return Q.all([ - self.utilsService.removeFromStorage(userIdKey), - self.utilsService.removeFromStorage(userEmailKey), - self.utilsService.removeFromStorage(stampKey) - ]).then(function () { - _userId = _email = _stamp = null; - }); - }; - - UserService.prototype.isAuthenticated = function (callback) { - if (!callback || typeof callback !== 'function') { - throw 'callback function required'; - } - - var self = this; - self.tokenService.getToken().then(function (token) { - if (!token) { - callback(false); - } - else { - self.getUserId(function (userId) { - callback(userId !== null); - }); - } - }); - }; -}