All files index.js

89.13% Statements 82/92
71.88% Branches 23/32
92.31% Functions 12/13
94.12% Lines 80/85

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143    1x   1x 1x   2x   1x 1x                                 1x 2x             2x     1x           1x 1x 1x   1x   2x 2x         2x 2x 2x   1x 3x 3x 3x 3x 3x 3x   1x 2x 2x 1x 1x   1x 1x 1x 1x   1x 1x 1x 1x 1x   1x 2x 2x 2x 2x 2x 2x 2x 2x 2x   1x 1x 1x 1x 1x     1x   1x 3x 3x 3x 3x 3x 1x   2x 2x 1x   1x     1x 1x 1x 1x   1x 2x     2x 2x 2x     1x   2x   1x     1x  
'use strict';
 
Object.defineProperty(exports, '__esModule', { value: true });
 
var aes = require('crypto-js/aes');
var utf8 = require('crypto-js/enc-utf8');
 
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
 
var aes__default = /*#__PURE__*/_interopDefaultLegacy(aes);
var utf8__default = /*#__PURE__*/_interopDefaultLegacy(utf8);
 
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
 
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
 
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
 
var __assign = function() {
    __assign = Object.assign || function __assign(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
 
var config = {
    SECRET: 'bbg_520',
    EXPIRE_TIME: 30 * 1000,
};
 
var AuthType;
(function (AuthType) {
    AuthType["WxH5"] = "wx_h5";
    AuthType["Pc"] = "pc";
})(AuthType || (AuthType = {}));
var Auth = (function () {
    function Auth(params) {
        this.cstProps = params;
        this.SSO_HOST_MAP = new Map([
            ['dev', 'http://sso.lanxinxueyuan.com'],
            ['stage', 'http://sso.lanxinxueyuan.com'],
            ['prod', 'http://sso.lanxinxueyuan.com'],
        ]);
        this.SSO_HOST = this.SSO_HOST_MAP.get(params.env);
        this.expireTime = config.EXPIRE_TIME;
        this.secret = config.SECRET;
    }
    Auth.prototype.getSignInUrlIst = function (params) {
        var signInUrlIst = new URL(this.SSO_HOST);
        signInUrlIst.pathname = '/sign_in';
        signInUrlIst.searchParams.set('ref', decodeURIComponent(params.ref));
        signInUrlIst.searchParams.set('auth_type', params.auth_type);
        signInUrlIst.searchParams.set('source', this.cstProps.source);
        return signInUrlIst;
    };
    Auth.prototype.toSignInWxH5 = function (params) {
        var signInUrlIst = this.getSignInUrlIst(__assign(__assign({}, params), { auth_type: AuthType.WxH5 }));
        if (!this.cstProps.source_appid) {
            alert('缺失source_appid');
            return false;
        }
        signInUrlIst.searchParams.set('source_appid', this.cstProps.source_appid);
        var url = signInUrlIst.href;
        location.replace(url);
        return url;
    };
    Auth.prototype.toSignInPC = function (params) {
        var signInUrlIst = this.getSignInUrlIst(__assign(__assign({}, params), { auth_type: AuthType.WxH5 }));
        var url = signInUrlIst.href;
        location.replace(url);
        return url;
    };
    Auth.prototype.signOut = function (params) {
        if (params === void 0) { params = { ref: location.href }; }
        var refUrl = decodeURIComponent(params.ref);
        localStorage.removeItem('token');
        var signOutUrlIst = new URL(this.SSO_HOST);
        signOutUrlIst.pathname = 'sign_out';
        signOutUrlIst.searchParams.set('ref', refUrl);
        var url = signOutUrlIst.href;
        location.replace(url);
        return url;
    };
    Auth.prototype.getEncodeToken = function (params) {
        Iif (params === void 0) { params = {}; }
        var token = params.token || localStorage.getItem('token') || '';
        var tokenInfo = { token: token, expire: Date.now() + this.expireTime };
        var encodeToken = aes__default['default']
            .encrypt(JSON.stringify(tokenInfo), this.secret)
            .toString();
        return encodeURIComponent(encodeToken);
    };
    Auth.prototype.decodeSsoToken = function (params) {
        Eif (params === void 0) { params = {}; }
        var currentUrl = params.currentUrl || location.href;
        var urlIst = new URL(currentUrl);
        var ssoToken = urlIst.searchParams.get('sso_token');
        if (!ssoToken) {
            return { status: false, msg: '链接上不存在sso_token' };
        }
        var tokenInfo = this.getTokenInfo(ssoToken);
        if (!tokenInfo || typeof tokenInfo !== 'object') {
            return { status: false, msg: 'token解密失败' };
        }
        Iif (Date.now() > tokenInfo.expire) {
            return { status: false, msg: 'sso_token已过期' };
        }
        localStorage.setItem('token', tokenInfo.token);
        urlIst.searchParams.delete('sso_token');
        location.replace(urlIst.href);
        return { status: true, msg: '' };
    };
    Auth.prototype.getTokenInfo = function (ticket) {
        var tokenInfoStr = aes__default['default']
            .decrypt(decodeURIComponent(ticket), this.secret)
            .toString(utf8__default['default']);
        var tokenInfo = null;
        try {
            tokenInfo = JSON.parse(tokenInfoStr);
        }
        catch (_a) {
            console.log();
        }
        return tokenInfo;
    };
    return Auth;
}());
 
exports.Auth = Auth;