diff options
Diffstat (limited to 'src/js/Helper/ServerRequirementCheck.js')
-rw-r--r-- | src/js/Helper/ServerRequirementCheck.js | 87 |
1 files changed, 80 insertions, 7 deletions
diff --git a/src/js/Helper/ServerRequirementCheck.js b/src/js/Helper/ServerRequirementCheck.js index eceef09..1485b8b 100644 --- a/src/js/Helper/ServerRequirementCheck.js +++ b/src/js/Helper/ServerRequirementCheck.js @@ -11,6 +11,10 @@ export default class ServerRequirementCheck { return [2021, 1]; } + get WARNING_APP_VERSION() { + return [2022, 2]; + } + /** * * @param {PasswordsClient} api @@ -34,6 +38,10 @@ export default class ServerRequirementCheck { if(setting.getValue() === null || !this._versionCompare(setting.getValue())) { if(disable) await this._disableServer(setting.getValue()); return false; + } else if(disable && !this._versionCompare(setting.getValue(), this.WARNING_APP_VERSION)) { + await this._markServerAsSoonIncompatible(setting.getValue()); + } else { + this._removeFlags(disable); } } catch(e) { @@ -53,9 +61,54 @@ export default class ServerRequirementCheck { let server = this._api.getServer(); server.setEnabled(false); server.setStatus(server.STATUS_DISABLED); + server.addFlag(server.FLAG_INCOMPATIBLE); await ServerRepository.update(server); let minVersion = this.MINIMUM_APP_VERSION.join('.'); + ErrorManager.error('Disabled account with unsupported api version', {server: server.getLabel(), version: serverVersion, requiredVersion: minVersion}); + this._sendServerDisabledToast(server, minVersion, serverVersion); + } + + /** + * + * @return {Promise<void>} + * @private + */ + async _markServerAsSoonIncompatible(serverVersion) { + let server = this._api.getServer(); + server.addFlag(server.FLAG_SOON_INCOMPATIBLE); + await ServerRepository.update(server); + + this._sendServerWarningToast(server, this.WARNING_APP_VERSION.join('.'), serverVersion); + } + + /** + * + * @return {Promise<void>} + * @private + */ + async _removeFlags(save) { + let server = this._api.getServer(); + if(server.hasFlag(server.FLAG_SOON_INCOMPATIBLE)) { + server.removeFlag(server.FLAG_SOON_INCOMPATIBLE); + if(save) await ServerRepository.update(server); + } + if(server.hasFlag(server.FLAG_INCOMPATIBLE)) { + server.removeFlag(server.FLAG_INCOMPATIBLE); + server.setEnabled(true); + server.setStatus(server.STATUS_UNAUTHORIZED); + if(save) await ServerRepository.update(server); + } + } + + /** + * + * @param {Server} server + * @param {String} minVersion + * @param {String} serverVersion + * @private + */ + _sendServerDisabledToast(server, minVersion, serverVersion) { let toast = new Toast() .setTitle('ToastServerCheckTitle') .setMessage('ToastServerCheckMessage') @@ -65,20 +118,40 @@ export default class ServerRequirementCheck { .setTags([this._api.getServer().getId(), 'server-error']) .setTtl(0); - ErrorManager.error('Disabled account with unsupported api version', {server: server.getLabel(), version: serverVersion, requiredVersion: minVersion}); + ToastService.create(toast) + .then(() => {SystemService.getBrowserApi().tabs.create({active: true, url: server.getBaseUrl()});}) + .catch(ErrorManager.catch); + } + + /** + * + * @param {Server} server + * @param {String} minVersion + * @param {String} serverVersion + * @private + */ + _sendServerWarningToast(server, minVersion, serverVersion) { + let toast = new Toast() + .setTitle('ToastServerCheckTitle') + .setMessage('ToastServerCheckWarning') + .setTitleVars([server.getLabel()]) + .setMessageVars([server.getLabel(), minVersion, serverVersion]) + .setType('warning') + .setTags([this._api.getServer().getId(), 'server-error']) + .setTtl(0); ToastService.create(toast) - .then(() => {SystemService.getBrowserApi().tabs.create({active: true, url: server.getBaseUrl()});}) - .catch(ErrorManager.catch); + .then(() => {SystemService.getBrowserApi().tabs.create({active: true, url: server.getBaseUrl()});}) + .catch(ErrorManager.catch); } /** - * @param version + * @param {String} version + * @param {Array} base * @return {Boolean} */ - _versionCompare(version) { - let base = this.MINIMUM_APP_VERSION, - parts = version.split('.'); + _versionCompare(version, base = this.MINIMUM_APP_VERSION) { + let parts = version.split('.'); for(let i = 0; i < base.length; i++) { if(!parts.hasOwnProperty(i)) return false; |