Change: stop revoking google token, change syncErrorRelogin message, recognize token manager errors as grant error (#1362)
* WIP: don't revoke google token, add TokenError * Fix: stop suggesting disconnecting * Add: recognize token error as grant error * Change: sync immediately after re-login
This commit is contained in:
parent
7e3c6f16e9
commit
3ea7e45624
|
@ -1666,7 +1666,7 @@
|
||||||
"description": "Tooltip for the toolbar icon"
|
"description": "Tooltip for the toolbar icon"
|
||||||
},
|
},
|
||||||
"syncErrorRelogin": {
|
"syncErrorRelogin": {
|
||||||
"message": "Sync failed.\nTry to re-login in Stylus options:\nclick 'disconnect' first, then 'connect'.",
|
"message": "Sync failed. You have been logged out.\nTry to re-login in Stylus options.",
|
||||||
"description": "Tooltip for the toolbar icon"
|
"description": "Tooltip for the toolbar icon"
|
||||||
},
|
},
|
||||||
"syncErrorLock": {
|
"syncErrorLock": {
|
||||||
|
|
|
@ -220,6 +220,7 @@ const syncMan = (() => {
|
||||||
function isGrantError(err) {
|
function isGrantError(err) {
|
||||||
if (err.code === 401) return true;
|
if (err.code === 401) return true;
|
||||||
if (err.code === 400 && /invalid_grant/.test(err.message)) return true;
|
if (err.code === 400 && /invalid_grant/.test(err.message)) return true;
|
||||||
|
if (err.name === 'TokenError') return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,11 @@ const tokenMan = (() => {
|
||||||
},
|
},
|
||||||
tokenURL: 'https://oauth2.googleapis.com/token',
|
tokenURL: 'https://oauth2.googleapis.com/token',
|
||||||
scopes: ['https://www.googleapis.com/auth/drive.appdata'],
|
scopes: ['https://www.googleapis.com/auth/drive.appdata'],
|
||||||
revoke: token => {
|
// FIXME: https://github.com/openstyles/stylus/issues/1248
|
||||||
const params = {token};
|
// revoke: token => {
|
||||||
return postQuery(`https://accounts.google.com/o/oauth2/revoke?${new URLSearchParams(params)}`);
|
// const params = {token};
|
||||||
},
|
// return postQuery(`https://accounts.google.com/o/oauth2/revoke?${new URLSearchParams(params)}`);
|
||||||
|
// },
|
||||||
},
|
},
|
||||||
onedrive: {
|
onedrive: {
|
||||||
flow: 'code',
|
flow: 'code',
|
||||||
|
@ -62,6 +63,17 @@ const tokenMan = (() => {
|
||||||
|
|
||||||
let alwaysUseTab = FIREFOX ? false : null;
|
let alwaysUseTab = FIREFOX ? false : null;
|
||||||
|
|
||||||
|
class TokenError extends Error {
|
||||||
|
constructor(provider, message) {
|
||||||
|
super(`[${provider}] ${message}`);
|
||||||
|
this.name = 'TokenError';
|
||||||
|
this.provider = provider;
|
||||||
|
if (Error.captureStackTrace) {
|
||||||
|
Error.captureStackTrace(this, TokenError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
||||||
buildKeys(name, hooks) {
|
buildKeys(name, hooks) {
|
||||||
|
@ -91,7 +103,7 @@ const tokenMan = (() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!interactive) {
|
if (!interactive) {
|
||||||
throw new Error(`Invalid token: ${name}`);
|
throw new TokenError(name, 'Token is missing');
|
||||||
}
|
}
|
||||||
return authUser(k, name, interactive, hooks);
|
return authUser(k, name, interactive, hooks);
|
||||||
},
|
},
|
||||||
|
@ -113,7 +125,7 @@ const tokenMan = (() => {
|
||||||
|
|
||||||
async function refreshToken(name, k, obj) {
|
async function refreshToken(name, k, obj) {
|
||||||
if (!obj[k.REFRESH]) {
|
if (!obj[k.REFRESH]) {
|
||||||
throw new Error('No refresh token');
|
throw new TokenError(name, 'No refresh token');
|
||||||
}
|
}
|
||||||
const provider = AUTH[name];
|
const provider = AUTH[name];
|
||||||
const body = {
|
const body = {
|
||||||
|
@ -179,7 +191,7 @@ const tokenMan = (() => {
|
||||||
new URL(finalUrl).search.slice(1)
|
new URL(finalUrl).search.slice(1)
|
||||||
);
|
);
|
||||||
if (params.get('state') !== state) {
|
if (params.get('state') !== state) {
|
||||||
throw new Error(`Unexpected state: ${params.get('state')}, expected: ${state}`);
|
throw new TokenError(name, `Unexpected state: ${params.get('state')}, expected: ${state}`);
|
||||||
}
|
}
|
||||||
let result;
|
let result;
|
||||||
if (provider.flow === 'token') {
|
if (provider.flow === 'token') {
|
||||||
|
|
|
@ -111,7 +111,10 @@ document.onclick = e => {
|
||||||
[elStart, () => API.sync.start(elCloud.value)],
|
[elStart, () => API.sync.start(elCloud.value)],
|
||||||
[elStop, API.sync.stop],
|
[elStop, API.sync.stop],
|
||||||
[elSyncNow, API.sync.syncNow],
|
[elSyncNow, API.sync.syncNow],
|
||||||
[elLogin, API.sync.login],
|
[elLogin, async () => {
|
||||||
|
await API.sync.login();
|
||||||
|
await API.sync.syncNow();
|
||||||
|
}],
|
||||||
]) {
|
]) {
|
||||||
btn.on('click', e => {
|
btn.on('click', e => {
|
||||||
if (getEventKeyName(e) === 'MouseL') {
|
if (getEventKeyName(e) === 'MouseL') {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user