option to log out from storages

This commit is contained in:
antelle 2020-04-17 21:36:56 +02:00
parent 833aa3c748
commit 349ec59df7
No known key found for this signature in database
GPG Key ID: 094A2F2D6136A4EE
9 changed files with 41 additions and 25 deletions

View File

@ -437,6 +437,7 @@
"setGenLockAutoType": "On auto-type",
"setGenLockOrSleep": "When the computer is locked or put to sleep",
"setGenStorage": "Storage",
"setGenStorageLogout": "Log out",
"setGenShowAdvanced": "Show advanced settings",
"setGenDevTools": "Show dev tools",
"setGenTryBeta": "Try beta version until restart",

View File

@ -208,15 +208,15 @@ class StorageDropbox extends StorageBase {
default:
return;
}
this._oauthRevokeToken();
this.logout();
break;
case 'key':
key = 'dropboxAppKey';
this._oauthRevokeToken();
this.logout();
break;
case 'secret':
key = 'dropboxSecret';
this._oauthRevokeToken();
this.logout();
break;
case 'folder':
key = 'dropboxFolder';
@ -401,11 +401,10 @@ class StorageDropbox extends StorageBase {
});
}
setEnabled(enabled) {
if (!enabled) {
this._oauthRevokeToken();
}
super.setEnabled(enabled);
logout() {
this._oauthRevokeToken('https://api.dropboxapi.com/2/auth/token/revoke', {
method: 'POST'
});
}
}

View File

@ -229,11 +229,8 @@ class StorageGDrive extends StorageBase {
});
}
setEnabled(enabled) {
if (!enabled) {
this._oauthRevokeToken('https://accounts.google.com/o/oauth2/revoke?token={token}');
}
super.setEnabled(enabled);
logout() {
this._oauthRevokeToken('https://accounts.google.com/o/oauth2/revoke?token={token}');
}
_getOAuthConfig() {

View File

@ -214,15 +214,8 @@ class StorageOneDrive extends StorageBase {
});
}
setEnabled(enabled) {
if (!enabled) {
const url = 'https://login.microsoftonline.com/common/oauth2/v2.0/logout?post_logout_redirect_uri={url}'.replace(
'{url}',
this._getOauthRedirectUrl()
);
this._oauthRevokeToken(url);
}
super.setEnabled(enabled);
logout(enabled) {
this._oauthRevokeToken();
}
_getOAuthConfig() {

View File

@ -40,9 +40,18 @@ class StorageBase {
}
setEnabled(enabled) {
if (!enabled) {
this.logout();
}
this.enabled = enabled;
}
get loggedIn() {
return !!this.runtimeData[this.name + 'OAuthToken'];
}
logout() {}
_xhr(config) {
this.logger.info('HTTP request', config.method || 'GET', config.url);
if (config.data) {
@ -374,13 +383,14 @@ class StorageBase {
}
}
_oauthRevokeToken(url) {
_oauthRevokeToken(url, requestOptions) {
const token = this.runtimeData[this.name + 'OAuthToken'];
if (token) {
if (url) {
this._xhr({
url: url.replace('{token}', token.accessToken),
statuses: [200, 401]
statuses: [200, 401],
...requestOptions
});
}
delete this.runtimeData[this.name + 'OAuthToken'];

View File

@ -49,6 +49,7 @@ class SettingsGeneralView extends View {
'click .settings__general-download-update-btn': 'downloadUpdate',
'click .settings__general-update-found-btn': 'installFoundUpdate',
'change .settings__general-prv-check': 'changeStorageEnabled',
'click .settings__general-prv-logout': 'logoutFromStorage',
'click .settings__general-show-advanced': 'showAdvancedSettings',
'click .settings__general-dev-tools-link': 'openDevTools',
'click .settings__general-try-beta-link': 'tryBeta',
@ -195,7 +196,8 @@ class SettingsGeneralView extends View {
return storageProviders.map(sp => ({
name: sp.name,
enabled: sp.enabled,
hasConfig: !!sp.getSettingsConfig
hasConfig: !!sp.getSettingsConfig,
loggedIn: sp.loggedIn
}));
}
@ -354,6 +356,14 @@ class SettingsGeneralView extends View {
}
}
logoutFromStorage(e) {
const storage = Storage[$(e.target).data('storage')];
if (storage) {
storage.logout();
$(e.target).remove();
}
}
showAdvancedSettings() {
this.$el
.find('.settings__general-show-advanced, .settings__general-advanced')

View File

@ -171,6 +171,9 @@
&__general-prv {
margin-bottom: $base-padding-v;
}
&__general-prv-logout {
margin-bottom: $base-padding-v;
}
&__logs {
user-select: text;
margin-top: $base-padding-v;

View File

@ -205,6 +205,8 @@
data-storage="{{prv.name}}" {{#if prv.enabled}}checked{{/if}}
/><label for="settings__general-prv-check-{{prv.name}}">{{res prv.name}}</label></h4>
<div class="settings__general-prv-wrap settings__general-{{prv.name}} {{#ifeq prv.enabled false}}hide{{/ifeq}}"></div>
{{#if prv.loggedIn}}<button class="btn-silent settings__general-prv-logout"
data-storage="{{prv.name}}">{{res 'setGenStorageLogout'}}</button>{{/if}}
{{/each}}
<h2>{{res 'advanced'}}</h2>

View File

@ -4,6 +4,7 @@ Release notes
`+` using OAuth authorization code grant for all storage providers
`-` fixed a number of vulnerabilities in opening untrusted kdbx files
`*` canOpenWebdav is now canOpenStorage
`+` option to log out from storages
##### v1.13.4 (2020-04-15)
`-` fix #1457: fixed styles in theme plugins