tplus-api
Version:
tplus api invoke
119 lines (105 loc) • 3.73 kB
text/typescript
import _findIndex from 'lodash/findIndex';
var crypto = require('crypto');
import User from '../model/User';
import {
cspAk,
tplusHostArray,
ciaHostArray,
devProxyHost,
prodProxyHost,
noProxyHostArray
} from '../const/app';
import {env} from 'mutants-microfx';
import { url } from 'inspector';
const {constant,platform,browser,os} = env;
function getAppCloudAuthInfo(orgId) {
const user = User.restore();
if (!user) {
return '';
}
var params = {
appKey: atob(cspAk),
orgId: orgId ? orgId : user.orgId,
userUid: user.userId
}
var params_string = JSON.stringify(params);
var hash = crypto.createHash('md5').update(params_string).digest("hex");
return new Buffer(hash + ',' + params_string).toString('base64');
}
const middleware = function (axios) {
axios.interceptors.request.use(
function proxyRequest(cfg) {
let user = User.restore();
//使用在线的代理服务器 解决跨域问题
let proxyURL = user && user.proxyserver?user.proxyserver:prodProxyHost;
//如果调试时在启动本地代理
//_DEV_是否启用模拟数据
// if (__DEV__) {
// proxyURL = devProxyHost;
// }else{
// proxyURL = prodProxyHost;
// }
if (cfg.url.indexOf('http') == -1) {
cfg.url = `${cfg.baseURL}${cfg.url}`
}
let noProxyHostIndex = _findIndex(noProxyHostArray, (url) => {
return cfg.url.indexOf(url) !== -1;
});
if (proxyURL && noProxyHostIndex === -1) {
if(platform == constant.platform.chanjet && window.location.protocol.indexOf('file') > -1){
// 工作圈模式下 http转为file协议 不用使用代理
}else{
cfg.url = `${proxyURL}/?url=${cfg.url}`;
}
}
let tplusHostIndex = _findIndex(tplusHostArray, (url) => {
return cfg.baseURL.indexOf(url) !== -1;
});
if (tplusHostIndex !== -1) {
let authInfo = getAppCloudAuthInfo(cfg.data && cfg.data.targetOrgID ? cfg.data.targetOrgID : '');
cfg.headers['authInfo'] = authInfo;
}
if (user.channel && user.channel.throughProxy) {
cfg.headers['appkey'] = atob(cspAk);
if (user) {
cfg.headers['userid'] = user.userId;
cfg.headers['orgid'] = user.orgId;
cfg.headers['token'] = user.accessToken;
}
}
if(cfg.headers['checkThroughProxy'] && cfg.headers['checkOrgId']){
cfg.headers['appkey'] = atob(cspAk);
if (user) {
cfg.headers['userid'] = user.userId;
cfg.headers['orgid'] = cfg.headers['checkOrgId'];
cfg.headers['token'] = user.accessToken;
}
}
//支持saas版本
if (user && user.sid && !cfg.headers['checkThroughProxy']) {
cfg.headers['tplussid'] = user.sid;
}
if(cfg.url.indexOf('/api/v2/')>0){
cfg.headers['openToken'] = getAppCloudAuthInfo('');
cfg.headers['appkey'] = atob(cspAk);
}
delete cfg.headers['checkThroughProxy'];
delete cfg.headers['checkOrgId'];
let ciaHostIndex = _findIndex(ciaHostArray, (url) => {
return cfg.baseURL.indexOf(url) !== -1;
});
if (ciaHostIndex === -1 && user && user.tplusToken) {
if(!!cfg.headers['Authorization']){
//Authorization如果有值 用调用方的值 不覆盖
}else{
cfg.headers['Authorization'] = `token ${user.tplusToken}`;
}
}
return cfg;
},
function promiseError(error) {
return Promise.reject(error);
}
);
};
export default middleware;