vue-app-sdk
Version:
103 lines (102 loc) • 3.44 kB
JavaScript
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import "../../vendors/nice-fns/dist/compactObject.js";
import "../../vendors/nice-fns/dist/pascalCase.js";
import isArray from "../../vendors/lodash-es/isArray.js";
import isString from "../../vendors/lodash-es/isString.js";
import omit from "../../vendors/lodash-es/omit.js";
const SSO_ID = Symbol("sso");
const DEFAULT_GROUP_KEY = "normal";
class SSO {
constructor(options) {
__publicField(this, "id", SSO_ID);
/**
* 需要验证的参数列表
*/
__publicField(this, "_verifyParams");
/**
* 统一化参数列表
* @param params 参数列表
*/
__publicField(this, "_normalizeParams", (params) => {
return params.map((param) => ({
required: true,
...isString(param) ? { name: param } : param
}));
});
/**
* 获取不带参数的哈希路径
*/
__publicField(this, "_getHashWithoutParams", () => {
const hash = location.hash;
return hash.slice(0, hash.indexOf("?"));
});
/**
* 验证分组参数列表
* @param route 路由
* @param params 需要验证的参数列表
*/
__publicField(this, "_verifyGroupParams", (route, params) => {
return params.every(({ name, required }) => {
if (!required)
return true;
return name in route.query;
});
});
/**
* 验证路由是否来源于单点登录
* @param route 路由
*/
__publicField(this, "isFromSSO", (route) => {
return Object.values(this._verifyParams).some((verifyParams) => this._verifyGroupParams(route, verifyParams));
});
/**
* 获取验证参数
* @param route 路由
*/
__publicField(this, "getVerifyParams", (route) => {
const params = {};
for (const [groupKey, verifyParams] of Object.entries(this._verifyParams)) {
if (!this._verifyGroupParams(route, verifyParams))
continue;
for (const { name } of verifyParams) {
if (name in route.query)
params[name] = route.query[name];
}
return [groupKey, params];
}
return [DEFAULT_GROUP_KEY, params];
});
/**
* 剔除 `route.query` 里的验证参数
* @param query 路由查询参数
* @param params 验证参数
*/
__publicField(this, "omitVerifyParams", (query, params) => {
return omit(query, Object.keys(params || {}));
});
/**
* 跳转至单点登录页
*/
__publicField(this, "gotoSSO", () => {
const redirectURI = [location.origin, location.pathname, this._getHashWithoutParams()].filter(Boolean).join("");
location.replace(this.options.resolveSSOUri(redirectURI));
});
__publicField(this, "install", () => {
});
this.options = options;
const { verifyParams } = options;
if (isArray(verifyParams)) {
this._verifyParams = { [DEFAULT_GROUP_KEY]: this._normalizeParams(verifyParams) };
} else {
this._verifyParams = Object.fromEntries(
Object.entries(verifyParams).map(([key, params]) => [key, this._normalizeParams(params)])
);
}
}
}
export {
SSO,
SSO_ID
};