permission.guard.js 16.2 KB
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { AppConfigService } from '../app-config/app-config.service';
import { B2bService } from '../_services/b2b.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "../_services/b2b.service";
import * as i3 from "../app-config/app-config.service";
var PermissionGuard = /** @class */ (function () {
    function PermissionGuard(router, route, dataservice, appConfigService) {
        this.router = router;
        this.route = route;
        this.dataservice = dataservice;
        this.appConfigService = appConfigService;
        this.config = appConfigService.getConfig();
    }
    /**
     * @param {?} next
     * @param {?} state
     * @return {?}
     */
    PermissionGuard.prototype.canActivate = /**
     * @param {?} next
     * @param {?} state
     * @return {?}
     */
    function (next, state) {
        console.log(next.queryParams);
        /** @type {?} */
        var params = next.queryParams;
        if (params["token"]) {
            sessionStorage.setItem('token', params["token"]);
            // token = params.token
            return this.getPermission(next);
        }
        else if (params["token"] === '') {
            return false;
        }
        else {
            /** @type {?} */
            var token = sessionStorage.getItem('token');
            if (token) {
                return this.getPermission(next);
            }
            else {
                return false;
            }
        }
        // const path = this.getUrlPath(next);
        // let configData = null;
        // configData = this.getConfigByUrl(path);
        // if (configData) {
        //     if (this.dataservice.isCheckGuard(configData.role)) {
        //         return true;
        //     }
        //     else { return false; }
        // } else { return true; }
    };
    /**
     * @param {?} next
     * @return {?}
     */
    PermissionGuard.prototype.getPermission = /**
     * @param {?} next
     * @return {?}
     */
    function (next) {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var verifyToken, path, configData, __resultData;
            return tslib_1.__generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, this.dataservice.verify()];
                    case 1:
                        verifyToken = _a.sent();
                        console.log("verifyToken", verifyToken, verifyToken['resultCode'] === '40100');
                        if (verifyToken['resultCode'] == '20000') {
                            path = this.getUrlPath(next);
                            configData = null;
                            configData = this.getConfigByUrl(path);
                            console.log('configData ', configData);
                            if (configData) {
                                if (this.dataservice.isCheckGuardRoutePath(configData.routingPath) || configData.routingPath === '') {
                                    console.log('isCheckGuardRoutePath ', true);
                                    return [2 /*return*/, true];
                                }
                                else
                                    return [2 /*return*/, false];
                            }
                            else
                                return [2 /*return*/, true];
                        }
                        else if (verifyToken['resultCode'] === '40100') {
                            __resultData = verifyToken['resultData'];
                            this.checkSession(__resultData.userMessage);
                            return [2 /*return*/, false];
                        }
                        else {
                            return [2 /*return*/, false];
                        }
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @param {?} userMessage
     * @return {?}
     */
    PermissionGuard.prototype.checkSession = /**
     * @param {?} userMessage
     * @return {?}
     */
    function (userMessage) {
        console.log('checkSession');
        /** @type {?} */
        var token = sessionStorage.getItem('token');
        window.parent.postMessage(JSON.stringify({
            command: "checkSession",
            message: token,
            userMessage: userMessage || 'Unknow'
        }), '*');
        console.log('checkSession', JSON.stringify({
            command: "checkSession",
            message: token,
            userMessage: userMessage || 'Unknow'
        }));
    };
    /**
     * @param {?} url
     * @return {?}
     */
    PermissionGuard.prototype.getUrlPath = /**
     * @param {?} url
     * @return {?}
     */
    function (url) {
        console.log('path ', url.routeConfig.path);
        return url.routeConfig.path;
    };
    /**
     * @param {?} path
     * @return {?}
     */
    PermissionGuard.prototype.getConfigByUrl = /**
     * @param {?} path
     * @return {?}
     */
    function (path) {
        var e_1, _a;
        /** @type {?} */
        var permissionConfig = this.config.permission;
        /** @type {?} */
        var permissionData = null;
        try {
            for (var permissionConfig_1 = tslib_1.__values(permissionConfig), permissionConfig_1_1 = permissionConfig_1.next(); !permissionConfig_1_1.done; permissionConfig_1_1 = permissionConfig_1.next()) {
                var data = permissionConfig_1_1.value;
                if (path == data.routingPath) {
                    permissionData = data;
                    break;
                }
            }
        }
        catch (e_1_1) { e_1 = { error: e_1_1 }; }
        finally {
            try {
                if (permissionConfig_1_1 && !permissionConfig_1_1.done && (_a = permissionConfig_1.return)) _a.call(permissionConfig_1);
            }
            finally { if (e_1) throw e_1.error; }
        }
        console.log('Data ', permissionData);
        return permissionData;
    };
    PermissionGuard.decorators = [
        { type: Injectable, args: [{
                    providedIn: 'root'
                },] }
    ];
    /** @nocollapse */
    PermissionGuard.ctorParameters = function () { return [
        { type: Router },
        { type: ActivatedRoute },
        { type: B2bService },
        { type: AppConfigService }
    ]; };
    /** @nocollapse */ PermissionGuard.ngInjectableDef = i0.defineInjectable({ factory: function PermissionGuard_Factory() { return new PermissionGuard(i0.inject(i1.Router), i0.inject(i1.ActivatedRoute), i0.inject(i2.B2bService), i0.inject(i3.AppConfigService)); }, token: PermissionGuard, providedIn: "root" });
    return PermissionGuard;
}());
export { PermissionGuard };
if (false) {
    /** @type {?} */
    PermissionGuard.prototype.config;
    /** @type {?} */
    PermissionGuard.prototype.router;
    /** @type {?} */
    PermissionGuard.prototype.route;
    /** @type {?} */
    PermissionGuard.prototype.dataservice;
    /** @type {?} */
    PermissionGuard.prototype.appConfigService;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9fZ3VhcmQvcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNILE1BQU0sRUFFTixjQUFjLEVBR2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7SUFPaEQseUJBQW1CLE1BQWMsRUFBVSxLQUFxQixFQUFVLFdBQXVCLEVBQVUsZ0JBQWtDO1FBQTFILFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN6SSxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQzlDOzs7Ozs7SUFFRCxxQ0FBVzs7Ozs7SUFBWCxVQUFZLElBQTRCLEVBQzVCLEtBQTBCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztRQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlCLElBQUksTUFBTSxXQUFRO1lBQ2QsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxVQUFPLENBQUM7O1lBRTlDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksTUFBTSxjQUFXLEVBQUUsRUFBRTtZQUM1QixPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNOztZQUNILElBQU0sS0FB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QkFBQSxpQkFBQSxnQkFBZ0IsQ0FBQSxrREFBQSxnRkFBQztnQkFBN0IsSUFBSSxJQUFJLDZCQUFBO2dCQUNSLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQzFCLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07aUJBQ1Q7YUFDSjs7Ozs7Ozs7O1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDckMsT0FBTyxjQUFjLENBQUM7S0FDekI7O2dCQWxHSixVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7O2dCQVhHLE1BQU07Z0JBRU4sY0FBYztnQkFNVixVQUFVO2dCQURWLGdCQUFnQjs7OzBCQVR4Qjs7U0FjYSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgUm91dGVyLFxuICAgIENhbkFjdGl2YXRlLFxuICAgIEFjdGl2YXRlZFJvdXRlLFxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgUm91dGVyU3RhdGVTbmFwc2hvdFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gICAgY29uZmlnOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGRhdGFzZXJ2aWNlOiBCMmJTZXJ2aWNlLCBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIH1cblxuICAgIGNhbkFjdGl2YXRlKG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgICAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBhbnkge1xuICAgICAgICBjb25zb2xlLmxvZyhuZXh0LnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5leHQucXVlcnlQYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMudG9rZW4pIHtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgcGFyYW1zLnRva2VuKTtcbiAgICAgICAgICAgIC8vIHRva2VuID0gcGFyYW1zLnRva2VuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJtaXNzaW9uKG5leHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy50b2tlbiA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcm1pc3Npb24obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBwYXRoID0gdGhpcy5nZXRVcmxQYXRoKG5leHQpO1xuICAgICAgICAvLyBsZXQgY29uZmlnRGF0YSA9IG51bGw7XG4gICAgICAgIC8vIGNvbmZpZ0RhdGEgPSB0aGlzLmdldENvbmZpZ0J5VXJsKHBhdGgpO1xuICAgICAgICAvLyBpZiAoY29uZmlnRGF0YSkge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMuZGF0YXNlcnZpY2UuaXNDaGVja0d1YXJkKGNvbmZpZ0RhdGEucm9sZSkpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgLy8gfSBlbHNlIHsgcmV0dXJuIHRydWU7IH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRQZXJtaXNzaW9uKG5leHQpIHtcblxuICAgICAgICBsZXQgdmVyaWZ5VG9rZW4gPSBhd2FpdCB0aGlzLmRhdGFzZXJ2aWNlLnZlcmlmeSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInZlcmlmeVRva2VuXCIsdmVyaWZ5VG9rZW4gLHZlcmlmeVRva2VuWydyZXN1bHRDb2RlJ10gPT09ICc0MDEwMCcpO1xuICAgICAgICBpZiAodmVyaWZ5VG9rZW5bJ3Jlc3VsdENvZGUnXSA9PSAnMjAwMDAnKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnN0b3JlLnRva2VuID0ge3Rva2VuOiB2ZXJpZnlUb2tlblsncmVzdWx0RGF0YSddfTtcbiAgICAgICAgICAgIGxldCBwYXRoID0gdGhpcy5nZXRVcmxQYXRoKG5leHQpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICAgICAgY29uZmlnRGF0YSA9IHRoaXMuZ2V0Q29uZmlnQnlVcmwocGF0aCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29uZmlnRGF0YSAnLCBjb25maWdEYXRhKTtcbiAgICAgICAgICAgIGlmIChjb25maWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNlcnZpY2UuaXNDaGVja0d1YXJkUm91dGVQYXRoKGNvbmZpZ0RhdGEucm91dGluZ1BhdGgpIHx8IGNvbmZpZ0RhdGEucm91dGluZ1BhdGggPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2lzQ2hlY2tHdWFyZFJvdXRlUGF0aCAnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHJldHVybiB0cnVlO1xuICAgICAgICB9ZWxzZSBpZih2ZXJpZnlUb2tlblsncmVzdWx0Q29kZSddID09PSAnNDAxMDAnKXtcbiAgICAgICAgICBsZXQgX19yZXN1bHREYXRhID0gdmVyaWZ5VG9rZW5bJ3Jlc3VsdERhdGEnXTtcbiAgICAgICAgICB0aGlzLmNoZWNrU2Vzc2lvbihfX3Jlc3VsdERhdGEudXNlck1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZXNzaW9uKHVzZXJNZXNzYWdlKXtcbiAgICAgIGNvbnNvbGUubG9nKCdjaGVja1Nlc3Npb24nKTtcbiAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvbW1hbmQ6XCJjaGVja1Nlc3Npb25cIixcbiAgICAgICAgICBtZXNzYWdlOiB0b2tlbixcbiAgICAgICAgICB1c2VyTWVzc2FnZTogdXNlck1lc3NhZ2UgfHwgJ1Vua25vdydcbiAgICAgIH0pLCAnKicpO1xuICAgICAgY29uc29sZS5sb2coJ2NoZWNrU2Vzc2lvbicsSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvbW1hbmQ6XCJjaGVja1Nlc3Npb25cIixcbiAgICAgICAgICBtZXNzYWdlOiB0b2tlbixcbiAgICAgICAgICB1c2VyTWVzc2FnZTogdXNlck1lc3NhZ2UgfHwgJ1Vua25vdydcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBnZXRVcmxQYXRoKHVybCkge1xuICAgICAgICBjb25zb2xlLmxvZygncGF0aCAnLCB1cmwucm91dGVDb25maWcucGF0aCk7XG4gICAgICAgIHJldHVybiB1cmwucm91dGVDb25maWcucGF0aDtcbiAgICB9XG5cbiAgICBnZXRDb25maWdCeVVybChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25Db25maWcgPSB0aGlzLmNvbmZpZy5wZXJtaXNzaW9uO1xuICAgICAgICBsZXQgcGVybWlzc2lvbkRhdGEgPSBudWxsO1xuICAgICAgICBmb3IobGV0IGRhdGEgb2YgcGVybWlzc2lvbkNvbmZpZyl7XG4gICAgICAgICAgICBpZiAocGF0aCA9PSBkYXRhLnJvdXRpbmdQYXRoKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbkRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdEYXRhICcsIHBlcm1pc3Npb25EYXRhKTtcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25EYXRhO1xuICAgIH1cblxuXG59XG4iXX0=