diff --git a/.travis.yml b/.travis.yml index 77cb5319..aad95c38 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,6 @@ install: unzip SenchaCmd-${SENCHA_VER}-osx-no_jre.app.zip; SenchaCmd-${SENCHA_VER}-osx-no_jre.app/Contents/MacOS/JavaApplicationStub -q -Dall=true; fi - - cp env-sample.js env.js before_script: - export PATH=~/bin/Sencha/Cmd/${SENCHA_VER}:${PATH} - export CURRENT_BRANCH=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH} diff --git a/README.md b/README.md index d0941315..ccc6d238 100644 --- a/README.md +++ b/README.md @@ -217,8 +217,6 @@ These **need** to be added to your PATH. ```shell git clone https://github.com/TheGoddessInari/rambox.git cd rambox -cp env-sample.js env.js -# update env.js with your auth0 details. npm install npm run repack:win64 ``` diff --git a/app.js b/app.js index f22a3379..82d35fb1 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,3 @@ -var auth0, lock; // Auth0 vars - // Sencha App Ext.setGlyphFontFamily('FontAwesome'); Ext.application({ diff --git a/app.json b/app.json index e737c72e..f6d927db 100644 --- a/app.json +++ b/app.json @@ -106,9 +106,6 @@ { "path": "resources/js/loadscreen.js" }, - { - "path": "env.js" - }, { "path": "app.js", "bundle": true diff --git a/app/Application.js b/app/Application.js index 34a8c07b..9f5908f8 100644 --- a/app/Application.js +++ b/app/Application.js @@ -4,7 +4,7 @@ Ext.define('Rambox.Application', { ,name: 'Rambox' ,requires: [ - 'Rambox.ux.Auth0' + 'Rambox.ux.FileBackup' ,'Rambox.util.MD5' ,'Ext.window.Toast' ,'Ext.util.Cookies' @@ -27,14 +27,11 @@ Ext.define('Rambox.Application', { ,launch: function () { // Load language for Ext JS library - Ext.Loader.loadScript({url: Ext.util.Format.format("ext/packages/ext-locale/build/ext-locale-{0}.js", localStorage.getItem('locale-auth0') || 'en')}); + Ext.Loader.loadScript({url: Ext.util.Format.format("ext/packages/ext-locale/build/ext-locale-{0}.js", localStorage.getItem('locale') || 'en')}); - // Initialize Auth0 - if ( auth0Cfg.clientID !== '' && auth0Cfg.domain !== '' ) Rambox.ux.Auth0.init(); // Set cookies to help Tooltip.io messages segmentation Ext.util.Cookies.set('version', require('electron').remote.app.getVersion()); - if ( Ext.util.Cookies.get('auth0') === null ) Ext.util.Cookies.set('auth0', false); // Check for updates if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Rambox.app.checkUpdate(true); diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 00000000..2053032e --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,284 @@ +{ + "name": "Rambox", + "version": "0.5.18", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "applescript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/applescript/-/applescript-1.0.0.tgz", + "integrity": "sha1-u4evVoytA0pOSMS9r2Bno6JwExc=" + }, + "auto-launch-patched": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/auto-launch-patched/-/auto-launch-patched-5.0.2.tgz", + "integrity": "sha1-8a5oPIwTG93Pr68YHuMsqGbwejM=", + "requires": { + "applescript": "^1.0.0", + "mkdirp": "^0.5.1", + "path-is-absolute": "^1.0.0", + "untildify": "^3.0.2", + "winreg": "1.2.2" + } + }, + "conf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-2.0.0.tgz", + "integrity": "sha512-iCLzBsGFi8S73EANsEJZz0JnJ/e5VZef/kSaxydYZLAvw0rFNAUx5R7K5leC/CXXR2mZfXWhUvcZOO/dM2D5xg==", + "requires": { + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "electron-context-menu": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-0.10.0.tgz", + "integrity": "sha512-8dv+cOIpGuSmxAje3qdydd7kzfUTHBiEq6V80CqW76P5M92sEl0WpHHhNKxKFZ2L+mNr5Lp4R9qGjyfDiYI8yg==", + "requires": { + "electron-dl": "^1.2.0", + "electron-is-dev": "^0.3.0" + } + }, + "electron-dl": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-1.12.0.tgz", + "integrity": "sha512-UMc2CL45Ybpvu66LDPYzwmDRmYK4Ivz+wdnTM0eXcNMztvQwhixAk2UPme1c7McqG8bAlKEkQpZn3epmQy4EWg==", + "requires": { + "ext-name": "^5.0.0", + "pupa": "^1.0.0", + "unused-filename": "^1.0.0" + } + }, + "electron-is-dev": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", + "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=" + }, + "electron-store": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-2.0.0.tgz", + "integrity": "sha512-1WCFYHsYvZBqDsoaS0Relnz0rd81ZkBAI0Fgx7Nq2UWU77rSNs1qxm4S6uH7TCZ0bV3LQpJFk7id/is/ZgoOPA==", + "requires": { + "conf": "^2.0.0" + } + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" + } + }, + "pupa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-1.0.0.tgz", + "integrity": "sha1-mpVopa9+ZXuEYqbp1TKHQ1YM7/Y=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "requires": { + "sort-keys": "^1.0.0" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "untildify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" + }, + "unused-filename": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-1.0.0.tgz", + "integrity": "sha1-00CID3GuIRXrqhMlvvBcxmhEacY=", + "requires": { + "modify-filename": "^1.1.0", + "path-exists": "^3.0.0" + } + }, + "winreg": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.2.tgz", + "integrity": "sha1-hQmvo7ccW70RCm18YkfsZ3NsWY8=" + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + } + } +} diff --git a/app/package.json b/app/package.json index 2736f01e..5c26b037 100644 --- a/app/package.json +++ b/app/package.json @@ -29,13 +29,11 @@ "author": "TheGoddessInari ", "license": "GPL-3.0", "dependencies": { - "auth0-js": "^8.12.3", - "auth0-lock": "^10.22.0", "auto-launch-patched": "5.0.2", - "electron-store": "2.0.0", - "electron-context-menu": "0.10.0", + "electron-store": "^2.0.0", + "electron-context-menu": "^0.10.0", "electron-is-dev": "^0.3.0", "mime": "^2.3.1", - "tmp": "0.0.33" + "tmp": "^0.0.33" } } diff --git a/app/ux/Auth0.js b/app/ux/Auth0.js deleted file mode 100644 index c83d7360..00000000 --- a/app/ux/Auth0.js +++ /dev/null @@ -1,256 +0,0 @@ -Ext.define('Rambox.ux.Auth0', { - singleton: true - - // private - ,lock: null - ,auth0: null - ,backupCurrent: false - - ,init: function() { - var me = this; - - var Auth0Lock = require('auth0-lock')['default']; - var Auth0 = require('auth0-js'); - - // Auth0 Config - me.lock = new Auth0Lock(auth0Cfg.clientID, auth0Cfg.domain, { - autoclose: true - ,autofocus: true - ,auth: { - redirect: false - ,params: {scope: 'openid offline_access'} - } - ,theme: { - logo: 'resources/Icon.png' - ,primaryColor: '#0675A0' - } - ,languageDictionary: { - title: 'Rambox-OS Account' - } - ,popupOptions: { - nodeIntegration: 'no' - } - ,language: localStorage.getItem('locale-auth0') === null ? 'en' : localStorage.getItem('locale-auth0') - }); - - me.auth0 = new Auth0.WebAuth({ clientID: auth0Cfg.clientID, domain : auth0Cfg.domain }); - - me.defineEvents(); - } - - ,defineEvents: function() { - var me = this; - - me.lock.on("authenticated", function(authResult) { - me.lock.getProfile(authResult.idToken, function(err, profile) { - if ( err ) { - if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration); - Ext.Msg.hide(); - return Ext.Msg.show({ - title: 'Error' - ,message: 'There was an error getting the profile: ' + err.error_description - ,icon: Ext.Msg.ERROR - ,buttons: Ext.Msg.OK - }); - } - - // Display a spinner while waiting - Ext.Msg.wait(locale['app.window[29]'], locale['app.window[28]']); - - // Set cookies to help Tooltip.io messages segmentation - Ext.util.Cookies.set('auth0', true); - - // User is logged in - // Save the profile and JWT. - localStorage.setItem('profile', JSON.stringify(profile)); - localStorage.setItem('id_token', authResult.idToken); - localStorage.setItem('refresh_token', authResult.refreshToken); - - if ( !Ext.isEmpty(profile.user_metadata) && !Ext.isEmpty(profile.user_metadata.services) && !me.backupCurrent ) { - Ext.each(profile.user_metadata.services, function(s) { - var service = Ext.create('Rambox.model.Service', s); - service.save(); - Ext.getStore('Services').add(service); - }); - - require('electron').remote.getCurrentWindow().reload(); - } - - Ext.Msg.hide(); - Ext.cq1('app-main').getViewModel().set('username', profile.name); - Ext.cq1('app-main').getViewModel().set('avatar', profile.picture); - }); - }); - } - - ,backupConfiguration: function(callback) { - var me = this; - - Ext.Msg.wait('Saving backup...', 'Please wait...'); - - // Getting all services - var lastupdate = (new Date()).toJSON(); - var services = []; - Ext.getStore('Services').each(function(service) { - var s = Ext.clone(service); - delete s.data.id; - delete s.data.zoomLevel; - services.push(s.data); - }); - - Ext.Ajax.request({ - url: 'https://rambox.auth0.com/api/v2/users/'+Ext.decode(localStorage.getItem('profile')).user_id - ,method: 'PATCH' - ,headers: { authorization: "Bearer " + localStorage.getItem('id_token') } - ,jsonData: { user_metadata: { services: services, services_lastupdate: lastupdate } } - ,success: function(response) { - Ext.Msg.hide(); - // Save the last update in localStorage - var profile = Ext.decode(localStorage.getItem('profile')); - if ( !profile.user_metadata ) profile.user_metadata = {}; - profile.user_metadata.services_lastupdate = lastupdate; - localStorage.setItem('profile', Ext.encode(profile)); - Ext.cq1('app-main').getViewModel().set('last_sync', new Date(lastupdate).toUTCString()); - - Ext.toast({ - html: ' Your configuration were successfully backed up.' - ,title: 'Synchronize Configuration' - ,width: 300 - ,align: 't' - ,closable: false - }); - - if ( Ext.isFunction(callback) ) callback.bind(me)(); - } - ,failure: function(response) { - if ( response.status === 401 ) return me.renewToken(me.backupConfiguration); - - Ext.Msg.hide(); - Ext.toast({ - html: ' Error occurred when trying to backup your configuration.' - ,title: 'Synchronize Configuration' - ,width: 300 - ,align: 't' - ,closable: false - }); - - if ( Ext.isFunction(callback) ) callback.bind(me)(); - - console.error(response); - } - }); - } - - ,restoreConfiguration: function() { - var me = this; - - me.lock.getProfile(localStorage.getItem('id_token'), function (err, profile) { - if ( err ) { - if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration); - return Ext.Msg.show({ - title: 'Error' - ,message: 'There was an error getting the profile: ' + err.error_description - ,icon: Ext.Msg.ERROR - ,buttons: Ext.Msg.OK - }); - } - - // First we remove all current services - Ext.cq1('app-main').getController().removeAllServices(false, function() { - Ext.each(profile.user_metadata.services, function(s) { - var service = Ext.create('Rambox.model.Service', s); - service.save(); - Ext.getStore('Services').add(service); - }); - - require('electron').remote.getCurrentWindow().reload(); - }); - }); - } - - ,checkConfiguration: function() { - var me = this; - - me.lock.getProfile(localStorage.getItem('id_token'), function (err, profile) { - if ( err ) { - if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration); - return Ext.Msg.show({ - title: 'Error' - ,message: 'There was an error getting the profile: ' + err.error_description - ,icon: Ext.Msg.ERROR - ,buttons: Ext.Msg.OK - }); - } - - if ( !profile.user_metadata ) { - Ext.toast({ - html: 'You don\'t have any backup yet.' - ,title: 'Synchronize Configuration' - ,width: 300 - ,align: 't' - ,closable: false - }); - return; - } - - if ( Math.floor(new Date(profile.user_metadata.services_lastupdate) / 1000) > Math.floor(new Date(Ext.decode(localStorage.getItem('profile')).user_metadata.services_lastupdate) / 1000) ) { - Ext.toast({ - html: 'Your settings are out of date.' - ,title: 'Synchronize Configuration' - ,width: 300 - ,align: 't' - ,closable: false - }); - } else { - Ext.toast({ - html: 'Latest backup is already applied.' - ,title: 'Synchronize Configuration' - ,width: 300 - ,align: 't' - ,closable: false - }); - } - }); - } - - ,renewToken: function(callback) { - var me = this; - - Ext.Ajax.request({ - url: 'https://rambox.auth0.com/delegation' - ,method: 'POST' - ,jsonData: { - grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer' - ,client_id: auth0Cfg.clientID - ,refresh_token: localStorage.getItem('refresh_token') - ,api_type: 'app' - } - ,success: function(response) { - var json = Ext.decode(response.responseText); - localStorage.setItem('id_token', json.id_token); - - if ( Ext.isFunction(callback) ) callback.bind(me)(); - } - ,failure: function(response) { - console.error(response); - } - }); - } - - ,login: function() { - var me = this; - - me.lock.show(); - } - - ,logout: function() { - var me = this; - - localStorage.removeItem('profile'); - localStorage.removeItem('id_token'); - localStorage.removeItem('refresh_token'); - - // Set cookies to help Tooltip.io messages segmentation - Ext.util.Cookies.set('auth0', false); - } -}); diff --git a/app/ux/FileBackup.js b/app/ux/FileBackup.js new file mode 100644 index 00000000..52d6150c --- /dev/null +++ b/app/ux/FileBackup.js @@ -0,0 +1,65 @@ +const remote = require('electron').remote; +const dialog = remote.dialog; +const app = remote.app; +const fs = require('fs'); +const path = require('path'); +const userPath = app.getPath('userData'); +const defaultFileName = 'rambox-backup.json'; +const myDefaultPath = userPath + path.sep + defaultFileName; + +Ext.define('Rambox.ux.FileBackup', { + singleton: true, + BackupConfiguration: function (callback) { + var me = this; + let services = []; + Ext.getStore('Services').each(function(service) { + const s = Ext.clone(service); + delete s.data.id; + delete s.data.zoomLevel; + services.push(s.data); + }); + + const json_string = JSON.stringify(services, null, 4); + dialog.showSaveDialog({ + defaultPath: myDefaultPath + }, function(filename, bookmark) { + if (!filename) return; + fs.writeFile(filename, json_string, function(err) { + if (err) { + console.log(err); + } + }); + }); + if (Ext.isFunction(callback)) callback.bind(me)(); + }, + restoreConfiguration: function () { + var me = this; + dialog.showOpenDialog({ + defaultPath: myDefaultPath, + properties: ['openFile'] + }, function(filePaths, bookmarks) { + if (filePaths.length === 1) { + const filePath = filePaths[0]; + console.log(filePath); + fs.readFile(filePath, function (err, data) { + if (err) { + console.log(err); + } + const services = JSON.parse(data); + if (services) { + console.dir(services); + Ext.cq1('app-main').getController().removeAllServices(true, function() { + Ext.each(services, function(s) { + const service = Ext.create('Rambox.model.Service', s); + service.save(); + Ext.getStore('Services').add(service); + }); + remote.getCurrentWindow().reload(); + }); + + } + }); + } + }); + } +}); diff --git a/app/view/main/Main.js b/app/view/main/Main.js index ba647924..1df02524 100644 --- a/app/view/main/Main.js +++ b/app/view/main/Main.js @@ -265,61 +265,22 @@ Ext.define('Rambox.view.main.Main', { ,style: 'border-radius: 50%;border:2px solid #d8d8d8;' } ,{ - id: 'usernameBtn' - ,bind: { - text: '{username}' - ,hidden: '{!username}' - } - ,menu: [ - { - text: 'Synchronize Configuration' - ,glyph: 'xf0c2@FontAwesome' - ,menu: [ - { - xtype: 'label' - ,bind: { - html: 'Last Sync: {last_sync}' - } - } - ,{ - text: 'Backup' - ,glyph: 'xf0ee@FontAwesome' - ,scope: Rambox.ux.Auth0 - ,handler: Rambox.ux.Auth0.backupConfiguration - } - ,{ - text: 'Restore' - ,glyph: 'xf0ed@FontAwesome' - ,scope: Rambox.ux.Auth0 - ,handler: Rambox.ux.Auth0.restoreConfiguration - } - ,{ - text: 'Check for updated backup' - ,glyph: 'xf021@FontAwesome' - ,scope: Rambox.ux.Auth0 - ,handler: Rambox.ux.Auth0.checkConfiguration - } - ] - } - ,'-' - ,{ - text: locale['app.main[21]'] - ,glyph: 'xf08b@FontAwesome' - ,handler: 'logout' - } - ] - } - ,{ - text: locale['app.main[22]'] - ,icon: 'resources/auth0.png' - ,id: 'loginBtn' - ,tooltip: locale['app.main[23]']+'

'+locale['app.main[24]']+' Auth0 (https://auth0.com)' - ,bind: { - hidden: '{username}' - } - ,handler: 'login' + text: 'Backup' + ,glyph: 'xf0c7@FontAwesome' + ,id: 'backupBtn' + ,tooltip: 'Backup services to disk' + ,scope: Rambox.ux.FileBackup + ,handler: Rambox.ux.FileBackup.backupConfiguration } ,{ + text: 'Restore' + ,glyph: 'xf115@FontAwesome' + ,id: 'restoreBtn' + ,tooltip: 'Restore services from disk' + ,scope: Rambox.ux.FileBackup + ,handler: Rambox.ux.FileBackup.restoreConfiguration + } + ,{ tooltip: locale['preferences[0]'] ,glyph: 'xf013@FontAwesome' ,handler: 'openPreferences' diff --git a/app/view/main/MainController.js b/app/view/main/MainController.js index 873b6d83..dbbd8a1f 100644 --- a/app/view/main/MainController.js +++ b/app/view/main/MainController.js @@ -9,7 +9,9 @@ Ext.define('Rambox.view.main.MainController', { tabPanel.setTabPosition(config.tabbar_location); tabPanel.setTabRotation(0); - let reorderer = tabPanel.plugins.find((plugin) => plugin.ptype === "tabreorderer"); + let reorderer = tabPanel.plugins.find(function(plugin) { + return plugin.ptype === "tabreorderer"; + }); if ( reorderer !== undefined ) { const names = reorderer.container.getLayout().names; @@ -56,7 +58,7 @@ Ext.define('Rambox.view.main.MainController', { var store = Ext.getStore('Services'); var align = 'left'; - store.suspendEvent('remove'); + store.suspendEvent('childmove'); Ext.each(tabPanel.items.items, function(t, i) { if ( t.id !== 'ramboxTab' && t.id !== 'tbfill' && t.record.get('enabled') ) { var rec = store.getById(t.record.get('id')); @@ -72,7 +74,7 @@ Ext.define('Rambox.view.main.MainController', { }); store.load(); - store.resumeEvent('remove'); + store.resumeEvent('childmove'); } ,showServiceTab: function( grid, record, tr, rowIndex, e ) { @@ -125,47 +127,44 @@ Ext.define('Rambox.view.main.MainController', { }); } - ,removeServiceFn: function(serviceId, total, actual) { + ,removeServiceFn: function(serviceId, total, actual, resolve) { var me = this; if ( !serviceId ) return false; // Get Record - var rec = Ext.getStore('Services').getById(serviceId); + const rec = Ext.getStore('Services').getById(serviceId); if ( !rec.get('enabled') ) { rec.set('enabled', true); me.onEnableDisableService(null, Ext.getStore('Services').indexOf(rec), true, null, true); - Ext.defer(function() { - // Get Tab - var tab = Ext.getCmp('tab_'+serviceId); - // Clear all trash data - const webview = tab.getWebView(); - - webview.addEventListener("did-start-loading", function() { - clearData(webview, tab); - }); - }, 1000); + const tab = Ext.getCmp('tab_'+serviceId); + const webview = tab.getWebView(); + + webview.addEventListener("did-start-loading", function() { + clearData(webview, tab, resolve); + }); } else { // Get Tab - var tab = Ext.getCmp('tab_'+serviceId); // Clear all trash data + const tab = Ext.getCmp('tab_'+serviceId); const webview = tab.getWebView(); - clearData(webview, tab); + clearData(webview, tab, resolve); } const config = ipc.sendSync('getConfig'); if ( config.default_service === rec.get('id') ) ipc.send('setConfig', Ext.apply(config, { default_service: 'ramboxTab' })); - function clearData(webview, tab) { + function clearData(webview, tab, resolve) { webview.getWebContents().clearHistory(); webview.getWebContents().session.flushStorageData(); - webview.getWebContents().session.clearCache(function() { - webview.getWebContents().session.clearStorageData(function() { + webview.getWebContents().session.clearCache(function () { + webview.getWebContents().session.clearStorageData(function () { webview.getWebContents().session.cookies.flushStore(function() { // Remove record from localStorage Ext.getStore('Services').remove(rec); // Close tab tab.close(); + if ( Ext.isFunction(resolve) ) resolve(); // Close waiting message if ( total === actual ) Ext.Msg.hide(); }); @@ -191,33 +190,44 @@ Ext.define('Rambox.view.main.MainController', { // Clear counter for unread messaging document.title = 'Rambox-OS'; + const store = Ext.getStore('Services'); + if ( btn ) { Ext.Msg.confirm(locale['app.window[12]'], locale['app.window[14]'], function(btnId) { if ( btnId === 'yes' ) { - Ext.cq1('app-main').suspendEvent('remove'); - Ext.getStore('Services').load(); Ext.Msg.wait('Please wait until we clear all.', 'Removing...'); - const count = Ext.getStore('Services').getCount(); - var i = 1; - Ext.Array.each(Ext.getStore('Services').collect('id'), function(serviceId) { - me.removeServiceFn(serviceId, count, i++); - }); - if ( Ext.isFunction(callback) ) callback(); - Ext.cq1('app-main').resumeEvent('remove'); - document.title = 'Rambox-OS'; + _removeAllServices(callback); } }); } else { - Ext.cq1('app-main').suspendEvent('remove'); - Ext.getStore('Services').load(); - const count = Ext.getStore('Services').getCount(); - var i = 1; - Ext.Array.each(Ext.getStore('Services').collect('id'), function(serviceId) { - me.removeServiceFn(serviceId, count, i++); + _removeAllServices(callback); + } + function _removeAllServices (callback) { + store.load(function(records, operation, success) { + store.suspendEvent('remove'); + store.suspendEvent('childmove'); + const count = store.getCount(); + let i = 1; + let promises = []; + Ext.Array.each(store.collect('id'), function(serviceId) { + promises.push(new Promise(function(resolve) { + me.removeServiceFn(serviceId, count, i++, resolve); + })); + }); + Promise.all(promises) + .then(function(value) { + if ( Ext.isFunction(callback) ) callback(); + }) + .catch(function(err) { + console.error('Error removing services: ' + err); + Ext.Msg.alert('Error!','Error removing services: ' + err); + }) + .then(function() { // Replace when Promise.finally when available. + store.resumeEvent('childmove'); + store.resumeEvent('remove'); + document.title = 'Rambox-OS'; + }); }); - if ( Ext.isFunction(callback) ) callback(); - Ext.cq1('app-main').resumeEvent('remove'); - document.title = 'Rambox-OS'; } } @@ -458,36 +468,4 @@ Ext.define('Rambox.view.main.MainController', { Ext.create('Rambox.view.preferences.Preferences').show(); } - ,login: function(btn) { - var me = this; - - Rambox.ux.Auth0.login(); - } - - ,logout: function(btn) { - var me = this; - - var logoutFn = function(callback) { - Ext.Msg.wait(locale['app.window[37]'], locale['app.main[21]']); - - // Logout from Auth0 - Rambox.ux.Auth0.logout(); - - Ext.cq1('app-main').getViewModel().set('username', ''); - Ext.cq1('app-main').getViewModel().set('avatar', ''); - - if ( Ext.isFunction(callback) ) callback(); - }; - - if ( btn ) { - Ext.Msg.confirm(locale['app.main[21]'], locale['app.window[38]'], function(btnId) { - if ( btnId === 'yes' ) { - logoutFn(me.removeAllServices.bind(me)); - } - }); - } else { - logoutFn(); - } - } - }); diff --git a/app/view/preferences/PreferencesController.js b/app/view/preferences/PreferencesController.js index d72d9bc9..eba2331d 100644 --- a/app/view/preferences/PreferencesController.js +++ b/app/view/preferences/PreferencesController.js @@ -48,7 +48,6 @@ Ext.define('Rambox.view.preferences.PreferencesController', { // Locale if ( values.locale !== ipc.sendSync('getConfig').locale ) { localStorage.setItem('locale', values.locale); - localStorage.setItem('locale-auth0', me.getView().down('form').down('combo[name="locale"]').getSelection().get('auth0')); Ext.Msg.confirm('Action required', 'To change the language of Rambox, you need to reload the app. Do you want to do it now?', function(btnId) { if ( btnId === 'yes' ) ipc.send('relaunchApp'); }); diff --git a/appveyor.yml b/appveyor.yml index f7b6e1da..ff8a9a7c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,8 +43,6 @@ install: $env:PATH = "${env:HOME}/bin/Sencha/Cmd:${env:PATH}" } - Copy-Item env-sample.js env.js - git reset --hard HEAD npm i npm@latest -g diff --git a/electron/main.js b/electron/main.js index c390014a..21aa2a40 100644 --- a/electron/main.js +++ b/electron/main.js @@ -49,8 +49,8 @@ const config = new Config({ // Fix issues with HiDPI scaling on Windows platform if (config.get('enable_hidpi_support') && (process.platform === 'win32')) { - app.commandLine.appendSwitch('high-dpi-support', 'true') - app.commandLine.appendSwitch('force-device-scale-factor', '1') + app.commandLine.appendSwitch('high-dpi-support', 'true'); + app.commandLine.appendSwitch('force-device-scale-factor', '1'); } // This must match the package name in package.json @@ -205,7 +205,7 @@ function createMasterPasswordWindow() { if ( isDev ) mainMasterPasswordWindow.webContents.openDevTools(); mainMasterPasswordWindow.loadURL('file://' + __dirname + '/../masterpassword.html'); - mainMasterPasswordWindow.on('close', function() { mainMasterPasswordWindow = null }); + mainMasterPasswordWindow.on('close', function() { mainMasterPasswordWindow = null; }); } function updateBadge(title) { @@ -284,13 +284,13 @@ ipcMain.on('validateMasterPassword', function(event, pass) { ipcMain.on('setServiceNotifications', function(event, partition, op) { session.fromPartition(partition).setPermissionRequestHandler(function(webContents, permission, callback) { if (permission === 'notifications') return callback(op); - callback(true) + callback(true); }); }); ipcMain.on('setDontDisturb', function(event, arg) { config.set('dont_disturb', arg); -}) +}); // Reload app ipcMain.on('reloadApp', function(event) { @@ -407,9 +407,9 @@ if ( config.get('proxy') ) { if(!authInfo.isProxy) return; - event.preventDefault() - callback(config.get('proxyLogin'), config.get('proxyPassword')) - }) + event.preventDefault(); + callback(config.get('proxyLogin'), config.get('proxyPassword')); + }); } // Disable GPU Acceleration for Linux diff --git a/electron/menu.js b/electron/menu.js index 094fce77..15a308eb 100644 --- a/electron/menu.js +++ b/electron/menu.js @@ -211,7 +211,7 @@ module.exports = function(config) { { label: locale['preferences[0]'], click() { - sendAction('showPreferences') + sendAction('showPreferences'); } }, { @@ -226,7 +226,7 @@ module.exports = function(config) { { label: locale['menu.help[6]'], click() { - sendAction('showAbout') + sendAction('showAbout'); } }, { @@ -270,7 +270,7 @@ module.exports = function(config) { { label: locale['preferences[0]'], click() { - sendAction('showPreferences') + sendAction('showPreferences'); } }, { @@ -297,7 +297,7 @@ module.exports = function(config) { helpSubmenu.push({ label: `&`+locale['menu.help[6]'], click() { - sendAction('showAbout') + sendAction('showAbout'); } }); } diff --git a/env-sample.js b/env-sample.js deleted file mode 100644 index ffeba058..00000000 --- a/env-sample.js +++ /dev/null @@ -1,4 +0,0 @@ -var auth0Cfg = { - clientID: '' - ,domain: '' -}; diff --git a/package-lock.json b/package-lock.json index 125df42d..a98990cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,12 @@ "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==", "dev": true }, + "@types/node": { + "version": "8.10.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.24.tgz", + "integrity": "sha512-5YaBKa6oFuWy7ptIFMATyftIcpZTZtvgrzPThEbs+kl4Uu41oUxiRunG0k32QZjD6MXMELls//ry/epNxc11aQ==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -126,33 +132,32 @@ } }, "app-builder-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.0.0.tgz", - "integrity": "sha512-JUJ1Wiaig1589MxF110HHh5I5v9hn2Qu4ZeleNwSZHfD1S2LrCxm4H+q7Snr/rWlWdEChFoWM2lj11Cdl4LP0Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.1.1.tgz", + "integrity": "sha512-ye0fQcG/msVKJcHBOZOfXf8kIkHoY+1ZYpWyFH/jyeNRwlsdBQCmg0A+pbbTyvjiet9XQzPVA7s21oyRhUixRQ==", "dev": true }, "app-builder-lib": { - "version": "20.26.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.26.1.tgz", - "integrity": "sha512-tLRC9bU3f7TgeK//jjDfhwzQymmLACkcs6vC/5VZLstVigg0G55RejsD4cCP3YA7fdUNNH6MaOAUh4l9FblCMg==", + "version": "20.27.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.27.1.tgz", + "integrity": "sha512-nuGl5s6dGp0lbLfM3Ef/tst3ZAeKznBb+SB0zNjHR8chbU7338451y7TfDXkcLQVkvMivfhwIRlUCyN/sH5KKA==", "dev": true, "requires": { "7zip-bin": "~4.0.2", - "app-builder-bin": "2.0.0", + "app-builder-bin": "2.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.5", - "builder-util": "5.20.1", + "builder-util": "6.0.0", "builder-util-runtime": "4.4.1", "chromium-pickle-js": "^0.2.0", "debug": "^3.1.0", "ejs": "^2.6.1", "electron-osx-sign": "0.4.10", - "electron-publish": "20.26.0", - "env-paths": "^1.0.0", + "electron-publish": "20.27.0", "fs-extra-p": "^4.6.1", "hosted-git-info": "^2.7.1", "is-ci": "^1.1.0", - "isbinaryfile": "^3.0.2", + "isbinaryfile": "^3.0.3", "js-yaml": "^3.12.0", "lazy-val": "^1.0.3", "minimatch": "^3.0.4", @@ -161,7 +166,6 @@ "read-config-file": "3.1.0", "sanitize-filename": "^1.6.1", "semver": "^5.5.0", - "sumchecker": "^2.0.2", "temp-file": "^3.1.3" }, "dependencies": { @@ -781,13 +785,13 @@ "dev": true }, "builder-util": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.20.1.tgz", - "integrity": "sha512-rqSl3Tbi/sECIVWAys8Blic4UEzUpZkGgmVXR2mZwdVPreNnfY3MHqSGSxlJRMTqxSsO0SgxnAEnanBNw4212g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-6.0.0.tgz", + "integrity": "sha512-PPwBEQa8zNcgd0ht2IozdD9QDdrADSl/TkceGcErkT7By1v8LLcomBAThm+t+0Ebm7q6JJbdL2SShM6wbXRCUg==", "dev": true, "requires": { "7zip-bin": "~4.0.2", - "app-builder-bin": "2.0.0", + "app-builder-bin": "2.1.1", "bluebird-lst": "^1.0.5", "builder-util-runtime": "^4.4.1", "chalk": "^2.4.1", @@ -2002,14 +2006,14 @@ } }, "dmg-builder": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-5.1.0.tgz", - "integrity": "sha512-Pyi64um0eZMwwyZeKM2ckhwuCQCvudcRXDwREHm7m9hYzzfKVWmExYXIV0+a9aaeqHesqxwfWyTwl3lwThW+Bw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-5.2.0.tgz", + "integrity": "sha512-0doOlH/Lew4St3X5UwEyuj763sDa4GIJPBDr/0hDywPn06atclRO36Bf6oEy9BEp7YaNV5aoaOfH3l8SBBacYQ==", "dev": true, "requires": { - "app-builder-lib": "~20.26.0", + "app-builder-lib": "~20.27.0", "bluebird-lst": "^1.0.5", - "builder-util": "~5.20.0", + "builder-util": "~6.0.0", "fs-extra-p": "^4.6.1", "iconv-lite": "^0.4.23", "js-yaml": "^3.12.0", @@ -2071,18 +2075,29 @@ "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", "dev": true }, + "electron": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.7.tgz", + "integrity": "sha512-MRrDE6mrp+ZrIBpZM27pxbO2yEDKYfkmc6Ll79BtedMNEZsY4+oblupeDJL6RM6meUIp82KMo63W7fP65Tb89Q==", + "dev": true, + "requires": { + "@types/node": "^8.0.24", + "electron-download": "^3.0.1", + "extract-zip": "^1.0.3" + } + }, "electron-builder": { - "version": "20.26.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.26.1.tgz", - "integrity": "sha512-WEqb8BVdcc8uSfWW9TA9WrltG4TDydwhlUIINkyXVOz68ckV56dSt383unTT9Awo+6oFsjABZdMMYtAjLAuDEw==", + "version": "20.27.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.27.1.tgz", + "integrity": "sha512-jsrUX2t8Yx8n5lVzIZ7AOMGlSYSb2iZhD+BX1DQ9H0O2FNDhWBNRfQQyj0mM2slNsk+5RWpK8FpOOsn5Z8BIqw==", "dev": true, "requires": { - "app-builder-lib": "20.26.1", + "app-builder-lib": "20.27.1", "bluebird-lst": "^1.0.5", - "builder-util": "5.20.1", + "builder-util": "6.0.0", "builder-util-runtime": "4.4.1", "chalk": "^2.4.1", - "dmg-builder": "5.1.0", + "dmg-builder": "5.2.0", "fs-extra-p": "^4.6.1", "is-ci": "^1.1.0", "lazy-val": "^1.0.3", @@ -2137,6 +2152,63 @@ } } }, + "electron-download": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", + "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "fs-extra": "^0.30.0", + "home-path": "^1.0.1", + "minimist": "^1.2.0", + "nugget": "^2.0.0", + "path-exists": "^2.1.0", + "rc": "^1.1.2", + "semver": "^5.3.0", + "sumchecker": "^1.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "sumchecker": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", + "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "es6-promise": "^4.0.5" + } + } + } + }, "electron-osx-sign": { "version": "0.4.10", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz", @@ -2177,26 +2249,18 @@ } }, "electron-publish": { - "version": "20.26.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.26.0.tgz", - "integrity": "sha512-CPh/U+qyyG8HXrS3s/E2JAgrmysIMDij9VTqz2QAUAwExH1e5V06iII0eMn47BFRRVqw4yF8VMzefuugpwAbkg==", + "version": "20.27.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.27.0.tgz", + "integrity": "sha512-bmyA9PbXeYDoh2S3Q5Rcs/AT3XUKxPnx0aChfy/qbsPBc/DtZirKuHh8B9SVjo8nK9wqm531rempyEOh3LAkDw==", "dev": true, "requires": { "bluebird-lst": "^1.0.5", - "builder-util": "~5.20.0", + "builder-util": "~6.0.0", "builder-util-runtime": "^4.4.1", "chalk": "^2.4.1", "fs-extra-p": "^4.6.1", "lazy-val": "^1.0.3", "mime": "^2.3.1" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - } } }, "end-of-stream": { @@ -2223,6 +2287,12 @@ "is-arrayish": "^0.2.1" } }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2881,6 +2951,12 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, + "home-path": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz", + "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==", + "dev": true + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -3263,10 +3339,13 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } }, "isexe": { "version": "2.0.0", @@ -3606,6 +3685,12 @@ "to-regex": "^3.0.2" } }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + }, "mime-types": { "version": "2.1.19", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", diff --git a/package.json b/package.json index 5601cb55..60ea0de4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "start:debug": "electron electron/main.js --enable-logging", "test": "./node_modules/.bin/mocha test/tests/**/*.spec.js", "clean": "rimraf ./build/production", - "compile": "sencha app build && cpy app/package.json build/production/Rambox/", + "compile": "sencha app build && cpy app/package.json app/package-lock.json build/production/Rambox/", "recompile": "npm run distclean && npm run compile", "distclean": "rimraf ./dist", "distclean:win": "rimraf ./dist/win-{ia32-,}unpacked", @@ -102,13 +102,14 @@ }, "devDependencies": { "asar": "^0.14.3", - "chai": "4.1.2", - "cpy-cli": "2.0.0", - "crowdin": "1.0.0", - "csvjson": "5.1.0", - "electron-builder": "^20.26.1", + "chai": "^4.1.2", + "cpy-cli": "^2.0.0", + "crowdin": "^1.0.0", + "csvjson": "^5.1.0", + "electron": "^2.0.7", + "electron-builder": "^20.27.1", "mocha": "^5.2.0", - "rimraf": "2.6.2", + "rimraf": "^2.6.2", "spectron": "^3.8.0" } }