import axios from 'axios'; import md5 from 'md5'; import { requestProxy } from "./indexEduplus2RequestProxy"; import { broadcastChannelOnmessage, SetAppModel, isDev, queryString } from 'educoder'; import { notification } from 'antd'; import cookie from 'react-cookies'; import './index.css'; const $ = window.$; const opens = "79e33abd4b6588941ab7622aed1e67e8"; let timestamp; let checkSubmitFlg = false; let message501 = false; function locationurl(list) { if (window.location.port === "3007") { } else { window.location.href = list } } function setCookier() { const _params = window.location.search; if (_params) { let _search = _params.split('?')[1]; _search.split('&').forEach(item => { console.log(item); const _arr = item.split('='); cookie.save('_educoder_session', _arr[0]); cookie.save('autologin_trustie', _arr[1]); }); } } // TODO 开发期多个身份切换 let debugType = "" if (isDev) { const _search = window.location.search; let parsed = {}; if (_search) { parsed = queryString.parse(_search); } debugType = window.location.search.indexOf('debug=t') != -1 ? 'teacher' : window.location.search.indexOf('debug=s') != -1 ? 'student' : window.location.search.indexOf('debug=a') != -1 ? 'admin' : parsed.debug || 'admin' } // 超管 debugType="admin"; // 老师 // debugType="teacher"; // 学生 // debugType="student"; function clearAllCookie() { cookie.remove('_educoder_session', { path: '/' }); cookie.remove('autologin_trustie', { path: '/' }); setpostcookie() } clearAllCookie(); function setpostcookie() { const str = window.location.pathname; if (str.indexOf("/wxcode") !== -1) { cookie.remove('_educoder_session', { path: '/' }); cookie.remove('autologin_trustie', { path: '/' }); const _params = window.location.search; if (_params) { let _search = _params.split('?')[1]; let _educoder_sessions = _search.split('&')[0].split('='); cookie.save('_educoder_session', _educoder_sessions[1], { domain: '.educoder.net', path: '/' }); let autologin_trusties = _search.split('&')[1].split('='); cookie.save('autologin_trustie', autologin_trusties[1], { domain: '.educoder.net', path: '/' }); } } } setpostcookie(); function railsgettimes(proxy) { clearAllCookie() if (timestamp && checkSubmitFlg === false) { $.ajax({ url: proxy, async: false, success: function (data) { if (data.status === 0) { timestamp = data.message; setpostcookie(); } } }) checkSubmitFlg = true window.setTimeout(() => { checkSubmitFlg = false; }, 2000); } else if (checkSubmitFlg === false) { $.ajax({ url: proxy, async: false, success: function (data) { if (data.status === 0) { timestamp = data.message; setpostcookie(); } } }) checkSubmitFlg = true window.setTimeout(() => { checkSubmitFlg = false; }, 2000); } } window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() // TODO 避免重复的请求 https://github.com/axios/axios#cancellation // https://github.com/axios/axios/issues/1497 // TODO 读取到package.json中的配置? var proxy = "http://localhost:3000" // proxy = "http://testbdweb.trustie.net" // proxy = "http://testbdweb.educoder.net" // proxy = "https://testeduplus2.educoder.net" //proxy="http://47.96.87.25:48080" proxy = "https://pre-newweb.educoder.net" proxy = "https://test-newweb.educoder.net" proxy = "https://test-jupyterweb.educoder.net" //proxy="http://192.168.2.63:3001" // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 const requestMap = {}; window.setfalseInRequestMap = function (keyName) { requestMap[keyName] = false; } window._debugType = debugType; export function initAxiosInterceptors(props) { initOnlineOfflineListener() // TODO 避免重复的请求 https://github.com/axios/axios#cancellation // https://github.com/axios/axios/issues/1497 // TODO 读取到package.json中的配置? var proxy = "http://localhost:3000" // proxy = "http://testbdweb.trustie.net" // proxy = "http://testbdweb.educoder.net" // proxy = "https://testeduplus2.educoder.net" //proxy="http://47.96.87.25:48080" proxy="https://pre-newweb.educoder.net" proxy="https://test-newweb.educoder.net" // proxy="https://test-jupyterweb.educoder.net" // proxy="https://test-newweb.educoder.net" proxy="https://test-jupyterweb.educoder.net" //proxy="http://192.168.2.63:3001" try { const str =window.location.pathname; if(str.indexOf("/wxcode") !== -1){ // console.log("开始重写cookis"); const _params = window.location.search; // console.log("1111"); if (_params) { // console.log("22222"); let _search = _params.split('?')[1]; _search.split('&').forEach(item => { const _arr = item.split('='); if(_arr[0]==='_educoder_session'){ cookie.save('_educoder_session',_arr[1],{ path: '/' }); cookie.save('_educoder_session',_arr[1], { domain: '.educoder.net', path: '/'}); }else{ cookie.save('autologin_trustie',_arr[1],{ path: '/' }); cookie.save('autologin_trustie',_arr[1], { domain: '.educoder.net', path: '/'}); } }); } } }catch (e) { } // 在这里使用requestMap控制,避免用户通过双击等操作发出重复的请求; // 如果需要支持重复的请求,考虑config里面自定义一个allowRepeat参考来控制 const requestMap = {}; window.setfalseInRequestMap = function (keyName) { requestMap[keyName] = false; } //响应前的设置 axios.interceptors.request.use( config => { setpostcookie() clearAllCookie() // config.headers['Content-Type']= 'no-cache' // if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 // config.headers.Authorization = token; // } // --------------------------------------------- 測試3007连测试服的代码 // if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) { // proxy = 'https://testbdweb.trustie.net' // } else { // proxy = 'http://localhost:3000' // } // --------------------------------------------- // console.log("开始请求了"); // console.log(config.url); // console.log(window.location.pathname); // // try { // const str =window.location.pathname; // if(str.indexOf("/wxcode") !== -1){ // // console.log("开始重写cookis"); // const _params = window.location.search; // // console.log("1111"); // if (_params) { // // console.log("22222"); // let _search = _params.split('?')[1]; // var _educoder_sessionmys=""; // var autologin_trusties=""; // _search.split('&').forEach(item => { // const _arr = item.split('='); // if(_arr[0]==='_educoder_session'){ // cookie.save('_educoder_session',_arr[1], { domain: '.educoder.net', path: '/'}); // _educoder_sessionmys=_arr[1]; // }else{ // cookie.save('autologin_trustie',_arr[1], { domain: '.educoder.net', path: '/'}); // autologin_trusties=_arr[1]; // } // }); // try { // const autlogins= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; // config.params = {'Cookie': autlogins} // config.headers['Cookie'] =autlogins; // // console.log("设置了cookis"); // } catch (e) { // // } // try { // const autloginysls= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; // config.params = {'autloginysls': autloginysls} // config.headers['Cookie'] =autloginysls; // // console.log("设置了cookis"); // }catch (e) { // // } // } // } // }catch (e) { // // } if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { return config } requestProxy(config) let url = `/api${config.url}`; //qq登录去掉api if(config.params&&config.params.redirect_uri!=undefined){ if(config.params.redirect_uri.indexOf('otherloginqq')!=-1){ url = `${config.url}`; } } if(`${config[0]}`!=`true`){ let timestamp = Date.parse(new Date())/1000; if (window.location.port === "3007") { // let timestamp=railsgettimes(proxy); // console.log(timestamp) // `https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp` railsgettimes( `${proxy}/api/main/first_stamp.json`); let newopens=md5(opens+timestamp) config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } } else { // 加api前缀 // railsgettimes(`http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`); railsgettimes( `/api/main/first_stamp.json`); let newopens=md5(opens+timestamp) config.url = url; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; } } setpostcookie(); } // // console.log(config); if (requestMap[config.url] === true) { return false; } // // 非file_update请求 if (config.url.indexOf('update_file') === -1) { requestMap[config.url] = true; // --------------------------------------------- 測試3007连测试服的代码 // if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) { // proxy = 'https://testbdweb.trustie.net' // } else { // proxy = 'http://localhost:3000' // } // --------------------------------------------- // console.log("开始请求了"); // console.log(config.url); // console.log(window.location.pathname); // // try { // const str =window.location.pathname; // if(str.indexOf("/wxcode") !== -1){ // // console.log("开始重写cookis"); // const _params = window.location.search; // // console.log("1111"); // if (_params) { // // console.log("22222"); // let _search = _params.split('?')[1]; // var _educoder_sessionmys=""; // var autologin_trusties=""; // _search.split('&').forEach(item => { // const _arr = item.split('='); // if(_arr[0]==='_educoder_session'){ // cookie.save('_educoder_session',_arr[1], { domain: '.educoder.net', path: '/'}); // _educoder_sessionmys=_arr[1]; // }else{ // cookie.save('autologin_trustie',_arr[1], { domain: '.educoder.net', path: '/'}); // autologin_trusties=_arr[1]; // } // }); // try { // const autlogins= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; // config.params = {'Cookie': autlogins} // config.headers['Cookie'] =autlogins; // // console.log("设置了cookis"); // } catch (e) { // // } // try { // const autloginysls= `_educoder_session=${_educoder_sessionmys}; autologin_trustie=${autologin_trusties} `; // config.params = {'autloginysls': autloginysls} // config.headers['Cookie'] =autloginysls; // // console.log("设置了cookis"); // }catch (e) { // // } // } // } // }catch (e) { // // } if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { return config } requestProxy(config) let url = `/api${config.url}`; //qq登录去掉api if (config.params && config.params.redirect_uri != undefined) { if (config.params.redirect_uri.indexOf('otherloginqq') != -1) { url = `${config.url}`; } } if (`${config[0]}` != `true`) { let timestamp = Date.parse(new Date()) / 1000; if (window.location.port === "3007") { // let timestamp=railsgettimes(proxy); // console.log(timestamp) // `https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp` railsgettimes(`${proxy}/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } } else { // 加api前缀 // railsgettimes(`http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`); railsgettimes(`/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = url; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; } } } // // console.log(config); if (config.method === "post") { if (requestMap[config.url] === true) { // 避免重复的请求 导致页面f5刷新 也会被阻止 显示这个方法会影响到定制信息 // console.log(config); // console.log(JSON.parse(config)); // console.log(config.url); // console.log("被阻止了是重复请求================================="); return false; } } // 非file_update请求 if (config.url.indexOf('update_file') === -1) { requestMap[config.url] = true; window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900) } // setTimeout("setfalseInRequestMap(" + config.url + ")", 1200) return config; }, err => { return Promise.reject(err); }); // --------------------------------------------- 測試3007连测试服的代码 // if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) { // proxy = 'https://testbdweb.trustie.net' // } else { // proxy = 'http://localhost:3000' // } // --------------------------------------------- if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { return config } requestProxy(config) let url = `/api${config.url}`; //qq登录去掉api if (config.params && config.params.redirect_uri != undefined) { if (config.params.redirect_uri.indexOf('otherloginqq') != -1) { url = `${config.url}`; } } if (`${config[0]}` != `true`) { let timestamp = Date.parse(new Date()) / 1000; if (window.location.port === "3007") { // let timestamp=railsgettimes(proxy); // console.log(timestamp) railsgettimes(`${proxy}/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } } else { // 加api前缀 railsgettimes(`/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = url; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; } } } // // console.log(config); // if (config.method === "post") { // if (requestMap[config.url] === true) { // 避免重复的请求 导致页面f5刷新 也会被阻止 显示这个方法会影响到定制信息 // // console.log(config); // // console.log(JSON.parse(config)); // // console.log(config.url); // // console.log("被阻止了是重复请求================================="); // return false; // } // } // 非file_update请求 if (config.url.indexOf('update_file') === -1) { requestMap[config.url] = true; window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900) } // setTimeout("setfalseInRequestMap(" + config.url + ")", 1200) return config; }, err => { return Promise.reject(err); }); window.setfalseInRequestMap = function (keyName) { requestMap[keyName] = false; } //响应前的设置 axios.interceptors.request.use( config => { setpostcookie() clearAllCookie() // config.headers['Content-Type']= 'no-cache' // if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 // config.headers.Authorization = token; // } // --------------------------------------------- 測試3007连测试服的代码 // if (url.indexOf('file_update') != -1 || url.indexOf('game_build') != -1 || url.indexOf('game_status') != -1) { // proxy = 'https://testbdweb.trustie.net' // } else { // proxy = 'http://localhost:3000' // } // --------------------------------------------- if (config.url.indexOf(proxy) != -1 || config.url.indexOf(':') != -1) { return config } requestProxy(config) let url = `/api${config.url}`; //qq登录去掉api if (config.params && config.params.redirect_uri != undefined) { if (config.params.redirect_uri.indexOf('otherloginqq') != -1) { url = `${config.url}`; } } if (`${config[0]}` != `true`) { let timestamp = Date.parse(new Date()) / 1000; if (window.location.port === "3007") { railsgettimes(`${proxy}/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = `${proxy}${url}`; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}debug=${debugType}&randomcode=${timestamp}&client_key=${newopens}`; } } else { railsgettimes(`/api/main/first_stamp.json`); let newopens = md5(opens + timestamp) config.url = url; if (config.url.indexOf('?') == -1) { config.url = `${config.url}?randomcode=${timestamp}&client_key=${newopens}`; } else { config.url = `${config.url}&randomcode=${timestamp}&client_key=${newopens}`; } } setpostcookie(); } if (config.method === "post") { if (requestMap[config.url] === true) { // 避免重复的请求 导致页面f5刷新 也会被阻止 显示这个方法会影响到定制信息 return false; } } // 非file_update请求 if (config.url.indexOf('update_file') === -1) { requestMap[config.url] = true; window.setTimeout("setfalseInRequestMap('" + config.url + "')", 900) } // setTimeout("setfalseInRequestMap(" + config.url + ")", 1200) return config; }, err => { return Promise.reject(err); }); axios.interceptors.response.use(function (response) { if (response === undefined) { return } if (response.data.status === -1) { // console.error('error:', response.data.message) // throw new Error() // https://github.com/axios/axios/issues?utf8=%E2%9C%93&q=cancel+request+in+response+interceptors+ // https://github.com/axios/axios/issues/583 // message.info(response.data.message || '服务端返回status -1,请联系管理员。'); // props.showSnackbar( response.data.message || '服务器异常,请联系管理员。' ) if (window.location.pathname.startsWith('/tasks/')) { props.showSnackbar(response.data.message || '服务器异常,请联系管理员。') } else { notification.open({ message: "提示", description: response.data.message || '服务器异常,请联系管理员。', style: { zIndex: 99999999 }, }); // notification['error']({ // message:"提示", // description: response.data.message || '服务器异常,请联系管理员。', // }); } throw new axios.Cancel('Operation canceled by the user.'); } else { // hash跳转 // var hash = window.location.hash; // if (hash) { // hashTimeout && window.clearTimeout(hashTimeout) // hashTimeout = setTimeout(() => { // var element = document.querySelector(hash); // if (element) { // element.scrollIntoView(); // } // }, 400) // } } // if(response.data.status === 401){ // console.log("401401401") // } if (response.data.status === 403 || response.data.status === "403") { locationurl('/403'); } if (response.data.status === 404) { locationurl('/nopage'); } if (response.data.status === 500) { locationurl('/500'); } if (response.data.status === 501) { if (message501 === false) { message501 = true notification.open({ message: "提示", description: response.data.message || '访问异常,请求不合理', style: { zIndex: 99999999 } }) } window.setTimeout(function () { message501 = false }, 2000); } requestMap[response.config.url] = false; setpostcookie(); return response; }, function (error) { return Promise.reject(error); }); // ----------------------------------------------------------------------------------- } function initOnlineOfflineListener() { const $ = window.$ $(window).bind("online", () => { notification.destroy() notification.success({ duration: 2, message: '网络恢复正常', description: '网络恢复正常,感谢使用。', }) }); $(window).bind("offline", () => { notification.destroy() notification.warning({ duration: null, message: '网络异常', description: '网络异常,请检测网络后重试。', }) }); }