UNPKG

vue-app-sdk

Version:
103 lines (102 loc) 3.44 kB
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 };