mirror of https://github.com/keeweb/keeweb.git
option to log out from storages
This commit is contained in:
parent
833aa3c748
commit
349ec59df7
|
@ -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",
|
||||
|
|
|
@ -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'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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'];
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue