Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ServerRequirementCheck.js « Helper « js « src - github.com/marius-wieschollek/passwords-webextension.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e1d7f5d6122d1ebe415157a3598a66c00fdd94d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import ServerRepository from '@js/Repositories/ServerRepository';
import ToastService from '@js/Services/ToastService';
import SystemService from '@js/Services/SystemService';
import ErrorManager from '@js/Manager/ErrorManager';
import Toast from '@js/Models/Toast/Toast';
import ConnectionErrorHelper from '@js/Helper/ConnectionErrorHelper';

export default class ServerRequirementCheck {

    get MINIMUM_APP_VERSION() {
        return [2021, 12];
    }

    /**
     *
     * @param {PasswordsClient} api
     */
    constructor(api) {
        this._connectionError = new ConnectionErrorHelper();
        this._api = api;
    }

    /**
     *
     * @param disable
     * @return {Promise<boolean>}
     */
    async check(disable = false) {
        try {
            let repository = this._api.getInstance('repository.setting'),
                collection = await repository.findByName('server.app.version'),
                setting    = collection.get(0);

            if(setting.getValue() === null || !this._versionCompare(setting.getValue())) {
                if(disable) await this._disableServer(setting.getValue());
                return false;
            }

        } catch(e) {
            this._processError(e);
            return false;
        }

        return true;
    };

    /**
     *
     * @return {Promise<void>}
     * @private
     */
    async _disableServer(serverVersion) {
        let server = this._api.getServer();
        server.setEnabled(false);
        server.setStatus(server.STATUS_DISABLED);
        await ServerRepository.update(server);
        let minVersion = this.MINIMUM_APP_VERSION.join('.');

        let toast = new Toast()
            .setTitle('ToastServerCheckTitle')
            .setMessage('ToastServerCheckMessage')
            .setTitleVars([server.getLabel()])
            .setMessageVars([server.getLabel(), minVersion, serverVersion])
            .setType('error')
            .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 version
     * @return {Boolean}
     */
    _versionCompare(version) {
        let base  = this.MINIMUM_APP_VERSION,
            parts = version.split('.');

        for(let i = 0; i < base.length; i++) {
            if(!parts.hasOwnProperty(i)) return false;

            let part = parseInt(parts[i]);
            if(part < base[i]) return false;
            if(part > base[i]) return true;
        }

        return true;
    }

    /**
     *
     * @param {Error} error
     * @return {Promise<void>}
     * @private
     */
    _processError(error) {
        return this._connectionError.processError(error, this._api.getServer());
    }
}