Skip to content

Commit d7840ba

Browse files
committed
fix(Experimental): Fix Google signin
1 parent d7be68b commit d7840ba

3 files changed

Lines changed: 34 additions & 7 deletions

File tree

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ function linux() {
1919
return 'X11; Ubuntu; Linux x86_64';
2020
}
2121

22-
export default function userAgent() {
22+
export default function userAgent(removeChromeVersion = false) {
2323
let platformString = '';
2424

2525
if (isMac) {
@@ -31,5 +31,6 @@ export default function userAgent() {
3131
}
3232

3333
// TODO: Update AppleWebKit and Safari version after electron update
34-
return `Mozilla/5.0 (${platformString}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${process.versions.chrome} Safari/537.36`;
34+
return `Mozilla/5.0 (${platformString}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome${!removeChromeVersion ? `/${process.versions.chrome}` : ''} Safari/537.36`;
35+
// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) old-airport-include/1.0.0 Chrome Electron/7.1.7 Safari/537.36
3536
}

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import {
4444
} from './config';
4545
import { asarPath } from './helpers/asar-helpers';
4646
import { isValidExternalURL } from './helpers/url-helpers';
47-
import userAgent from './electron/userAgent';
47+
import userAgent from './helpers/userAgent-helpers';
4848

4949
/* eslint-enable import/first */
5050
const debug = require('debug')('Franz:App');

src/models/Service.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { computed, observable, autorun } from 'mobx';
22
import path from 'path';
33
import normalizeUrl from 'normalize-url';
4+
import userAgent from '../helpers/userAgent-helpers';
45

56
const debug = require('debug')('Franz:Service');
67

@@ -76,6 +77,8 @@ export default class Service {
7677

7778
@observable lastUsed = Date.now(); // timestamp
7879

80+
@observable chromelessUserAgent = false;
81+
7982
constructor(data, recipe) {
8083
if (!data) {
8184
console.error('Service config not valid');
@@ -188,17 +191,34 @@ export default class Service {
188191
}
189192

190193
@computed get userAgent() {
191-
let userAgent = window.navigator.userAgent;
194+
let ua = window.navigator.userAgent;
192195
if (typeof this.recipe.overrideUserAgent === 'function') {
193-
userAgent = this.recipe.overrideUserAgent();
196+
ua = this.recipe.overrideUserAgent();
194197
}
195198

196-
return userAgent;
199+
return ua;
197200
}
198201

199202
initializeWebViewEvents({ handleIPCMessage, openWindow, stores }) {
200203
const webContents = this.webview.getWebContents();
201204

205+
const handleUserAgent = (url, forwardingHack = false) => {
206+
if (url.startsWith('https://accounts.google.com')) {
207+
if (!this.chromelessUserAgent) {
208+
debug('Setting user agent to chromeless for url', url);
209+
this.webview.setUserAgent(userAgent(true));
210+
if (forwardingHack) {
211+
this.webview.loadURL(url);
212+
}
213+
this.chromelessUserAgent = true;
214+
}
215+
} else if (this.chromelessUserAgent) {
216+
debug('Setting user agent to contain chrome');
217+
this.webview.setUserAgent(this.userAgent);
218+
this.chromelessUserAgent = false;
219+
}
220+
};
221+
202222
this.webview.addEventListener('ipc-message', e => handleIPCMessage({
203223
serviceId: this.id,
204224
channel: e.channel,
@@ -215,6 +235,9 @@ export default class Service {
215235
});
216236
});
217237

238+
239+
this.webview.addEventListener('will-navigate', event => handleUserAgent(event.url, true));
240+
218241
this.webview.addEventListener('did-start-loading', (event) => {
219242
debug('Did start load', this.name, event);
220243

@@ -232,7 +255,10 @@ export default class Service {
232255
};
233256

234257
this.webview.addEventListener('did-frame-finish-load', didLoad.bind(this));
235-
this.webview.addEventListener('did-navigate', didLoad.bind(this));
258+
this.webview.addEventListener('did-navigate', (event) => {
259+
handleUserAgent(event.url);
260+
didLoad();
261+
});
236262

237263
this.webview.addEventListener('did-fail-load', (event) => {
238264
debug('Service failed to load', this.name, event);

0 commit comments

Comments
 (0)