fix #810: Google Drive cookies

This commit is contained in:
antelle 2019-01-06 23:33:09 +01:00
parent 19545e5cca
commit ae8e6e4bc8
5 changed files with 27 additions and 53 deletions

View File

@ -10,7 +10,6 @@ const IdleTracker = require('./comp/idle-tracker');
const PopupNotifier = require('./comp/popup-notifier');
const SingleInstanceChecker = require('./comp/single-instance-checker');
const AppRightsChecker = require('./comp/app-rights-checker');
const CookieManager = require('./comp/cookie-manager');
const Alerts = require('./comp/alerts');
const Updater = require('./comp/updater');
const AuthReceiver = require('./comp/auth-receiver');
@ -137,7 +136,6 @@ ready(() => {
Updater.init();
SingleInstanceChecker.init();
AppRightsChecker.init();
CookieManager.init();
setTimeout(() => PluginManager.runAutoUpdate(), Timeouts.AutoUpdatePluginsAfterStart);
}

View File

@ -1,47 +0,0 @@
const Logger = require('../util/logger');
const Launcher = require('./launcher');
const RuntimeDataModel = require('../models/runtime-data-model');
const CookieManager = {
logger: new Logger('cookie-manager'),
cookies: undefined,
cookiesStr: undefined,
init() {
if (Launcher) {
this.cookies = RuntimeDataModel.instance.get('cookies');
this.cookiesStr = JSON.stringify(this.cookies);
Launcher.setCookies(this.cookies);
}
},
saveCookies() {
if (Launcher) {
Launcher.getCookies((err, cookies) => {
if (err) {
return this.logger.error('Error getting cookies', err);
}
if (cookies && cookies.length) {
cookies = cookies.filter(cookie => !cookie.session).map(cookie => ({
url: (cookie.secure ? 'https' : 'http') + '://' + cookie.domain + (cookie.path || ''),
name: cookie.name,
value: cookie.value,
domain: cookie.domain,
path: cookie.path,
secure: cookie.secure,
httpOnly: cookie.httpOnly,
expirationDate: cookie.expirationDate
}));
const cookiesStr = JSON.stringify(cookies);
if (cookiesStr !== this.cookiesStr) {
this.cookies = cookies;
this.cookiesStr = cookiesStr;
RuntimeDataModel.instance.set('cookies', cookies);
}
}
});
}
}
};
module.exports = CookieManager;

View File

@ -11,6 +11,10 @@ const RuntimeDataModel = Backbone.Model.extend({
load: function() {
return SettingsStore.load('runtime-data').then(data => {
if (data) {
if (data.cookies) {
// we're not using now
delete data.cookies;
}
this.set(data, {silent: true});
}
});

View File

@ -4,7 +4,6 @@ const AppSettingsModel = require('../models/app-settings-model');
const RuntimeDataModel = require('../models/runtime-data-model');
const Links = require('../const/links');
const FeatureDetector = require('../util/feature-detector');
const CookieManager = require('../comp/cookie-manager');
const MaxRequestRetries = 3;
@ -58,7 +57,6 @@ _.extend(StorageBase.prototype, {
}
const statuses = config.statuses || [200];
xhr.addEventListener('load', () => {
CookieManager.saveCookies();
if (statuses.indexOf(xhr.status) >= 0) {
return config.success && config.success(xhr.response, xhr);
}
@ -81,7 +79,6 @@ _.extend(StorageBase.prototype, {
}
});
xhr.addEventListener('error', () => {
CookieManager.saveCookies();
return config.error && config.error('network error', xhr);
});
xhr.addEventListener('timeout', () => {
@ -191,7 +188,6 @@ _.extend(StorageBase.prototype, {
this._oauthToken = token;
this.runtimeData.set(this.name + 'OAuthToken', token);
this.logger.debug('OAuth token received');
CookieManager.saveCookies();
}
return token;
},

View File

@ -33,6 +33,7 @@ const showDevToolsOnStart = process.argv.some(arg => arg.startsWith('--devtools'
app.setPath('userData', path.join(tempUserDataPath, tempUserDataPathRand));
setEnv();
restorePreferences();
app.on('window-all-closed', () => {
if (restartPending) {
@ -392,6 +393,28 @@ function setEnv() {
}
}
function restorePreferences() {
const profileConfigPath = path.join(userDataDir, 'profile.json');
const newProfile = { dir: tempUserDataPathRand };
let oldProfile;
try {
oldProfile = JSON.parse(fs.readFileSync(profileConfigPath, 'utf8'));
} catch (e) { }
fs.writeFileSync(profileConfigPath, JSON.stringify(newProfile));
if (oldProfile && oldProfile.dir && /^[\d.]+$/.test(oldProfile.dir)) {
const oldProfilePath = path.join(tempUserDataPath, oldProfile.dir);
const newProfilePath = path.join(tempUserDataPath, newProfile.dir);
if (fs.existsSync(path.join(oldProfilePath, 'Cookies'))) {
const oldCookies = fs.readFileSync(path.join(oldProfilePath, 'Cookies'));
fs.mkdirSync(newProfilePath);
fs.writeFileSync(path.join(newProfilePath, 'Cookies'), oldCookies);
}
}
}
function deleteOldTempFiles() {
if (app.oldTempFilesDeleted) {
return;