提交 d448126e authored 作者: GOD_ZYX's avatar GOD_ZYX

PC-1.0.8

上级 3d53d567
@god:registry=https://registry.npm.godzyx.com/
PC-1.0.8 / 2019-05-0
==================
* 修改 退出登录时,清空 UserInfo 对象
* 改用 私有模块 @god/node-com
PC-1.0.7 / 2019-05-06 PC-1.0.7 / 2019-05-06
================== ==================
......
No preview for this file type
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta content="origin" name="referrer"><title>紫荆教育MBA学习系统</title><meta name="viewport" id="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,shrink-to-fit=no"><link rel="shortcut icon" href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/favicon.ico"><link href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.d5b08ed254c2.css" rel="stylesheet"></head><body><div id="app"></div><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"></script><!--[if lt IE 9]> <!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta content="origin" name="referrer"><title>紫荆教育MBA学习系统</title><meta name="viewport" id="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,shrink-to-fit=no"><link rel="shortcut icon" href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/favicon.ico"><link href="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.49fcda9199c7.css" rel="stylesheet"></head><body><div id="app"></div><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-shim.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/es5-sham.min.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/ckeditor/ckeditor.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/videoJs/videoJs.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/convertString/base64-new.js"></script><!--[if lt IE 9]>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/console-polyfill.js"></script> <script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/console-polyfill.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/html5shiv.min.js"></script> <script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/html5shiv.min.js"></script>
<script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.min.js"></script> <script src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/static/compatible/respond.min.js"></script>
<![endif]--><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.bd75d82f.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.0ec25a95.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.67c4139b.js"></script></body></html> <![endif]--><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/manifest.bd75d82f.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/vendor.0ec25a95.js"></script><script type="text/javascript" src="https://zws-imgs-pub.ezijing.com/static/build/learn-mba/resources/app.1e1a96fb.js"></script></body></html>
\ No newline at end of file \ No newline at end of file
差异被折叠。
差异被折叠。
...@@ -117,6 +117,7 @@ export default { ...@@ -117,6 +117,7 @@ export default {
goOutLogin () { goOutLogin () {
cAction.loginAction.outLogin().then(str => { cAction.loginAction.outLogin().then(str => {
if (/^login/gi.test(str)) { if (/^login/gi.test(str)) {
window.G.UserInfo = {}
this.$router.push({ path: '/login/index' }) this.$router.push({ path: '/login/index' })
} else { } else {
/* 出错 */ /* 出错 */
......
...@@ -21,7 +21,7 @@ Vue.use(VueRouter) ...@@ -21,7 +21,7 @@ Vue.use(VueRouter)
const router = createRouter() const router = createRouter()
/* 设置全局变量 */ /* 设置全局变量 */
window.G = Vue.prototype.$GlobalVariable = { window.G = Vue.prototype.$GlobalVariable = {
VERSION: 'PC-1.0.7' VERSION: 'PC-1.0.8'
} }
Vue.prototype.$md5 = md5 Vue.prototype.$md5 = md5
/* 导航守卫 */ /* 导航守卫 */
......
...@@ -164,6 +164,15 @@ ...@@ -164,6 +164,15 @@
} }
} }
}, },
"@god/node-com": {
"version": "1.0.1",
"resolved": "http://registry.npm.godzyx.com/@god/node-com/download/@god/node-com-1.0.1.tgz",
"integrity": "sha1-MfybWHxEGlMiVGpYqELO4KMwFt4=",
"requires": {
"crypto-js": "^3.1.9-1",
"websocket": "^1.0.28"
}
},
"@vue/component-compiler-utils": { "@vue/component-compiler-utils": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "http://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.3.0.tgz", "resolved": "http://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.3.0.tgz",
...@@ -2996,7 +3005,7 @@ ...@@ -2996,7 +3005,7 @@
}, },
"crypto-js": { "crypto-js": {
"version": "3.1.9-1", "version": "3.1.9-1",
"resolved": "http://registry.npm.taobao.org/crypto-js/download/crypto-js-3.1.9-1.tgz", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz",
"integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg="
}, },
"css-color-names": { "css-color-names": {
...@@ -12143,8 +12152,8 @@ ...@@ -12143,8 +12152,8 @@
}, },
"typedarray-to-buffer": { "typedarray-to-buffer": {
"version": "3.1.5", "version": "3.1.5",
"resolved": "http://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"requires": { "requires": {
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
...@@ -13247,8 +13256,8 @@ ...@@ -13247,8 +13256,8 @@
}, },
"websocket": { "websocket": {
"version": "1.0.28", "version": "1.0.28",
"resolved": "http://registry.npm.taobao.org/websocket/download/websocket-1.0.28.tgz", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.28.tgz",
"integrity": "sha1-nl9v3Io/4B1EImR++Tq92NRaeNM=", "integrity": "sha512-00y/20/80P7H4bCYkzuuvvfDvh+dgtXi5kzDf3UcZwN6boTYaKvsrtZ5lIYm1Gsg48siMErd9M4zjSYfYFHTrA==",
"requires": { "requires": {
"debug": "^2.2.0", "debug": "^2.2.0",
"nan": "^2.11.0", "nan": "^2.11.0",
...@@ -13258,8 +13267,8 @@ ...@@ -13258,8 +13267,8 @@
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
} }
...@@ -13411,7 +13420,7 @@ ...@@ -13411,7 +13420,7 @@
}, },
"yaeti": { "yaeti": {
"version": "0.0.6", "version": "0.0.6",
"resolved": "http://registry.npm.taobao.org/yaeti/download/yaeti-0.0.6.tgz", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
"integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
}, },
"yallist": { "yallist": {
......
...@@ -83,13 +83,13 @@ ...@@ -83,13 +83,13 @@
"webpack-merge": "^4.1.4" "webpack-merge": "^4.1.4"
}, },
"dependencies": { "dependencies": {
"@god/node-com": "^1.0.1",
"adm-zip": "^0.4.13", "adm-zip": "^0.4.13",
"axios": "^0.18.0", "axios": "^0.18.0",
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"child_process": "^1.0.2", "child_process": "^1.0.2",
"connect-history-api-fallback": "^1.5.0", "connect-history-api-fallback": "^1.5.0",
"cross-env": "^5.2.0", "cross-env": "^5.2.0",
"crypto-js": "^3.1.9-1",
"express": "^4.16.4", "express": "^4.16.4",
"express-session": "^1.15.6", "express-session": "^1.15.6",
"form-data": "^2.3.3", "form-data": "^2.3.3",
...@@ -97,7 +97,6 @@ ...@@ -97,7 +97,6 @@
"lodash": "^4.17.11", "lodash": "^4.17.11",
"md5-node": "^1.0.1", "md5-node": "^1.0.1",
"multer": "^1.4.1", "multer": "^1.4.1",
"promise.prototype.finally": "^3.1.0", "promise.prototype.finally": "^3.1.0"
"websocket": "^1.0.28"
} }
} }
const CryptoJS = require('./CryptoJs')
const hmacSHA256 = require('crypto-js/hmac-sha256')
const Hex = require('crypto-js/enc-hex')
/**
* 特殊加密方式, 翻转、加盐、base64, hmacSHA256、Hex
* 设置本地cookie,全部使用 httpOnly 本地js读取不了
* @param {[string]} str 要加密的字符串
* @param {[object]} res 请求响应对象
* @param {[string]} name 设置cookie的名字
* @param {[string]} domain 设置cookie的domain
*/
const setCookieByYiiWay = (str, res, name, domain) => {
let expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)
// 翻转、加盐、base64
const salt = '0ZSGxuBkSJS5'
let sup = str.split('').reverse().join('')
let rad = Math.random()
let token = salt + sup + rad
sup = Buffer.from(token).toString('base64')
let serialize = `a:2:{i:0;s:4:"_SUP";i:1;s:${sup.length}:"${sup}";}`
let hamc = Hex.stringify(hmacSHA256(serialize, 'VzpR5JMDNqUsOZ0IFQARNLU9_0KLr9UC'))
sup = hamc + serialize
// 设置到cookie
let opts = { path: '/', domain: domain, expires: expires, httpOnly: true }
res.cookie(name, sup, opts)
}
/**
* 统一设置 cookie,采用对称加密算法,将数据放入cookie中
* @param {[string]} base64 base64字符串,必须传 base64转义过的 字符串
* @param {[object]} res 请求响应对象
* @param {[string]} name 设置cookie的名字
* @param {[string]} domain 设置cookie的domain
*/
const setCookieData = (base64, res, name, domain) => {
if (!base64) return
let expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)
let pwd = Buffer.from(base64, 'base64').toString()
pwd = CryptoJS.encryptData(pwd)
// 设置到cookie
let opts = { path: '/', domain: domain, expires: expires, httpOnly: true }
res.cookie(name, pwd, opts)
}
/**
* 从cookie中,获取_SUP并解析成ticket
* @param {[string]} _SUP cookie设置的值
*/
const getTicket = (_SUP) => {
/* 服务端 解析ticket */
let s = decodeURIComponent(_SUP || '') // tools.cookies.getCookie('_SUP') ||
let ticket = ''
s = s.match(/"([\d\w=]+)";\}$/)
if (s && s.length === 2) {
s = Buffer.from(s[1], 'base64').toString()
s = s.slice(12, s.search('-TGT') + 4)
ticket = s.split('').reverse().join('')
}
return ticket
}
module.exports = {
getTicket: getTicket,
setCookieByYiiWay: setCookieByYiiWay,
setCookieData: setCookieData
}
const CryptoJS = require('crypto-js')
const _key = CryptoJS.enc.Utf8.parse('abczyxzhaoli')
const _iv = CryptoJS.enc.Utf8.parse('jkbm')
/**
* 对称加密,加密方法
* @param {[string]} data 要加密的数据字符串
* @returns - 返回加密过后的字符串
*/
const encryptData = (data) => {
let encryptedStr = ''
try {
let srcs = CryptoJS.enc.Utf8.parse(data)
let encrypted = CryptoJS.AES.encrypt(srcs, _key, { iv: _iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
encryptedStr = encrypted.ciphertext.toString().toUpperCase()
} catch (e) {
encryptedStr = data
console.error('加密错误', data)
console.error(e)
}
return encryptedStr
}
/**
* 对称解密,解密方法
* @param {[string]} data 要解密的数据字符串
* @returns - 返回解密过后的字符串
*/
const decryptData = (data) => {
let decryptedStr = ''
try {
let srcs = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(data))
let decrypt = CryptoJS.AES.decrypt(srcs, _key, { iv: _iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })
decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
} catch (e) {
decryptedStr = data
console.error('解密错误', data)
console.error(e)
}
return decryptedStr.toString()
}
module.exports = {
encryptData: encryptData,
decryptData: decryptData
}
/**
* 工具方法 - 日期时间 转化 y-m-d
* @param {[string]} timestamp 时间戳
* @param {[string]} separator 分隔符,默认 “-”
*/
const timestampToFormatDateStr = (timestamp, separator) => {
separator = separator || '-'
let y = new Date(timestamp).getFullYear()
let m = new Date(timestamp).getMonth() + 1
if (m < 10) {
m = '0' + m
} else {
m = m + ''
}
let d = new Date(timestamp).getDate()
if (d < 10) {
d = '0' + d
} else {
d = d + ''
}
return [y, m, d].join(separator)
}
/**
* 工具方法 - 播放时间 转化 h:m:s
* @param {[string]} timestamp 时间戳
* @param {[string]} separator 分隔符,默认 “:”
*/
const timestampToFormatTimeStr = (timestamp, separator) => {
separator = separator || ':'
timestamp = Math.floor(timestamp / 1000)
let h = Math.floor(timestamp / 3600)
let m = Math.floor((timestamp - h * 3600) / 60)
let s = (timestamp - h * 3600 - m * 60) % 60
function tenify (a) {
return a >= 10 ? a : '0' + a
}
let to = { h: tenify(h), m: tenify(m), s: tenify(s) }
let format = ['h', 'm', 's'].join(separator)
return format.replace(/h|m|s/g, k => to[k]).replace(/^00:/, '')
}
module.exports = {
timestampToFormatDateStr: timestampToFormatDateStr,
timestampToFormatTimeStr: timestampToFormatTimeStr
}
const fs = require('fs')
const path = require('path')
/**
* 删除目录,对应下面所有文件
* @param {[string]} dirPath 目录路径字符串
* @param {[function]} callback 删除成功或者失败时,回调函数
*/
const rmDir = (dirPath, callback) => {
fs.readdir(dirPath, (err, files) => {
if (err) { console.log(err) }
function next (index) {
if (index === files.length) return fs.rmdir(dirPath, callback)
let newPath = path.join(dirPath, files[index])
fs.stat(newPath, (err, stat) => {
if (err) { console.log(err) }
if (stat.isDirectory()) {
rmDir(newPath, () => next(index + 1))
} else {
fs.unlink(newPath, () => next(index + 1))
}
})
}
next(0)
})
}
/**
* 创建目录路径上所有目录,不存在则创建
* @param {[string]} dirPath 目录路径字符串
* @param {[function]} callback 删除成功或者失败时,回调函数
*/
const mkDir = (dirPath, callback) => {
let _path = path.resolve(dirPath).replace(/^\//gi, '')
let arrDir = _path.split('/')
let curPath = '/'
function next (index) {
if (index === arrDir.length) { callback && callback(); return }
curPath += arrDir[index] + '/'
fs.stat(curPath, (error, stats) => {
if (error || !stats.isDirectory()) {
fs.mkdir(curPath, (error) => {
if (error) { console.log('文件创建出错,可能没权限'); return }
next(index + 1)
})
} else {
next(index + 1)
}
})
}
next(0)
}
module.exports = {
rmDir: rmDir,
mkDir: mkDir
}
/* websocket-node */
const WebSocketServer = require('websocket').server
/* 定义全局变量 */
global.nsSocket = global.nsSocket || null
global.nsCoonPool = global.nsCoonPool || []
/**
* 创建 socketServer 端
* @param {[object]} _server 监听的服务接口对象
*/
const createServerSocket = (_server) => {
let _nsSocket = new WebSocketServer({ httpServer: _server, autoAcceptConnections: false })
/* 监听请求 */
_nsSocket.on('request', function (_req) {
/* 首先判断,socket连接是否合法 */
if (!_connectIsAllowed(_req)) { _req.reject(); return }
/* 创建一个连接对象 */
let connection = _req.accept(null, _req.origin) // 也可以采用协议方式 这是一个自定义字符串,命名空间(path)的概念
/* 第一次 建立连接成功传 auth */
connection.sendBytes(Buffer.from(JSON.stringify({ auth: _req.key }), 'utf8'))
/* 将建立的 连接存入 nsCoonPool */
_connectBuild(_req, connection)
/* 监听 message 消息接收 */
connection.on('message', function (_msg) { _connectMessage(_msg) })
/* 监听 close 连接关闭 */
connection.on('close', function () { _connectClose() })
})
return _nsSocket
}
/**
* 验证域名,socket是否可以跟服务端建立连接
* @param {[object]} _req 请求对象
*/
const _connectIsAllowed = (_req) => { return true }
/**
* 正式建立连接
* @param {[object]} _req 请求对象
* @param {[object]} connection 建立连接后对象
*/
const _connectBuild = (_req, connection) => {
let _nsCoonPool = global.nsCoonPool
/* 记录当前连接对象,并放入连接池 */
_nsCoonPool.push({
key: _req.key, // 标识连接的 唯一性
backData: '', // 跟这个连接通信时,传来的数据存放
createTime: new Date().getTime(), // socket创建时间
conn: connection, // 当前已经 建立连接的对象
cookies: JSON.stringify(_req.cookies), // 存放cookie值,每次建立时,只传递一次
IPs: _req.remoteAddress, // 存放请求IP
UA: _req.httpRequest.headers['user-agent'] // 存放请求浏览器UA
})
}
/**
* 处理接收到的请求数据
* @param {[string]} _msg 传输的 数据
*/
const _connectMessage = (_msg) => {
let _nsCoonPool = global.nsCoonPool
let data = null
if (_msg.type === 'utf8') {
try {
data = JSON.parse(_msg.utf8Data)
} catch (e) {
// connection.sendUTF(_msg.utf8Data)
return '数据格式不正确1'
}
} else if (_msg.type === 'binary') {
try {
data = JSON.parse(Buffer.from(_msg.binaryData, 'utf8').toString())
} catch (e) {
return '数据格式不正确2'
}
}
for (let i = 0; i < _nsCoonPool.length; i++) {
if (_nsCoonPool[i].key === data.auth) {
_nsCoonPool[i].backData = JSON.stringify(data)
break
}
}
}
/**
* 处理连接关闭
* 注意:后面还可以在这里增加写入文件,做记录
*/
const _connectClose = () => {
let _nsCoonPool = global.nsCoonPool
for (let i = 0; i < _nsCoonPool.length; i++) {
let _item = _nsCoonPool[i]
if (!_item.conn.connected && _item.conn.state === 'closed') {
_nsCoonPool.splice(i, 1)
delete _item.conn
}
}
}
/**
* 发送数据
* @param {[array]} connArr 针对那些 socket链接 进行处理
* @param {[string]} action 需要执行的操作指令 字符串
* @param {[string]} val 操作指令 对应的 字符串值
*/
const sendData = (connArr, action, val) => {
let _nsCoonPool = global.nsCoonPool
if (connArr.length) {
for (let j = 0; j < connArr.length; j++) {
for (let i = 0; i < _nsCoonPool.length; i++) {
if (connArr[j] === _nsCoonPool[i].key) {
let base64Str = Buffer.from(val).toString('base64')
let jsonStr = JSON.stringify({ action: action, val: base64Str })
_nsCoonPool[i].conn.sendBytes(Buffer.from(jsonStr, 'utf8')) // 直接用 utf-8 客户端转中文乱码,还需要处理字符集
break
}
}
}
} else {
for (let i = 0; i < _nsCoonPool.length; i++) {
let base64Str = Buffer.from(val).toString('base64')
let jsonStr = JSON.stringify({ action: action, val: base64Str })
_nsCoonPool[i].conn.sendBytes(Buffer.from(jsonStr, 'utf8')) // 直接用 utf-8 客户端转中文乱码,还需要处理字符集
}
}
}
module.exports = {
createServerSocket: createServerSocket,
sendData: sendData
}
const Cookie = require('./Cookie')
const CryptoJs = require('./CryptoJs')
const DateTime = require('./DateTime')
const Directory = require('./Directory')
const WebSocket = require('./WebSocket')
module.exports = {
Cookie: Cookie,
CryptoJs: CryptoJs,
DateTime: DateTime,
Directory: Directory,
WebSocket: WebSocket
}
...@@ -3,7 +3,7 @@ const path = require('path') ...@@ -3,7 +3,7 @@ const path = require('path')
const md5 = require('md5-node') const md5 = require('md5-node')
const _cpro = require('child_process') const _cpro = require('child_process')
const com = require('../com') const directory = require('@god/node-com').dir
/** /**
* 目录结构操作,删除查询 * 目录结构操作,删除查询
...@@ -95,7 +95,7 @@ const _deleteDir = (dir, stats, callfunc) => { ...@@ -95,7 +95,7 @@ const _deleteDir = (dir, stats, callfunc) => {
callfunc('文件删除成功') callfunc('文件删除成功')
}) })
} else if (stats.isDirectory()) { } else if (stats.isDirectory()) {
com.Directory.rmDir(dir, () => { directory.rmDir(dir, () => {
callfunc('目录删除成功') callfunc('目录删除成功')
}) })
} }
...@@ -132,7 +132,7 @@ const _checkDir = (dir, json, callfunc) => { ...@@ -132,7 +132,7 @@ const _checkDir = (dir, json, callfunc) => {
* @param {function} callfunc 回调函数 * @param {function} callfunc 回调函数
*/ */
const _createDir = (dir, callfunc) => { const _createDir = (dir, callfunc) => {
com.Directory.mkDir(dir, () => { directory.mkDir(dir, () => {
callfunc('目录创建成功') callfunc('目录创建成功')
}) })
} }
......
const fs = require('fs') const fs = require('fs')
const com = require('../com') const com = require('@god/node-com')
const md5 = require('md5-node') const md5 = require('md5-node')
/** /**
...@@ -16,7 +16,7 @@ const getLogVideoJson = (req, data) => { ...@@ -16,7 +16,7 @@ const getLogVideoJson = (req, data) => {
/* 增加 学员目录、下属video目录。必须先处理,这是异步IO操作,可能导致 “新建” 学员目录、文件时,数据稍稍不准 缺少数据在 10s内 */ /* 增加 学员目录、下属video目录。必须先处理,这是异步IO操作,可能导致 “新建” 学员目录、文件时,数据稍稍不准 缺少数据在 10s内 */
let stuDir = (_json.name + '#' + _json.auth) || '其他' let stuDir = (_json.name + '#' + _json.auth) || '其他'
let _stuPath = 'upload_tmp/' + data._totalDir + '/' + stuDir let _stuPath = 'upload_tmp/' + data._totalDir + '/' + stuDir
com.Directory.mkDir(_stuPath + '/video') com.dir.mkDir(_stuPath + '/video')
// 按人头,每个人 多开不可能超过1000个浏览器tab页,所以这里不需要 大整型 字符串 // 按人头,每个人 多开不可能超过1000个浏览器tab页,所以这里不需要 大整型 字符串
const signStr = _json.auth + ':' + req.params[0] + ':' + _nodeServerCurrentTime const signStr = _json.auth + ':' + req.params[0] + ':' + _nodeServerCurrentTime
...@@ -50,7 +50,7 @@ const getLogVideoJson = (req, data) => { ...@@ -50,7 +50,7 @@ const getLogVideoJson = (req, data) => {
} }
} }
/* 日期字符串,如:2019-04-30 */ /* 日期字符串,如:2019-04-30 */
let _dateStr = com.DateTime.timestampToFormatDateStr(_nodeServerCurrentTime) let _dateStr = com.datetime.timestampToFormatDateStr(_nodeServerCurrentTime)
return { return {
_nodeServerCurrentTime, // 返回值,必存在 _nodeServerCurrentTime, // 返回值,必存在
_json, // 返回值,必存在 _json, // 返回值,必存在
...@@ -100,7 +100,7 @@ const writeBasicInfo = (req, _logJson, data) => { ...@@ -100,7 +100,7 @@ const writeBasicInfo = (req, _logJson, data) => {
if ((_logJson._json.name + '#' + _logJson._json.auth) === '未知#未知') { if ((_logJson._json.name + '#' + _logJson._json.auth) === '未知#未知') {
let stuDir = (data._name + '#' + data._email) || '其他' let stuDir = (data._name + '#' + data._email) || '其他'
let _stuPath = 'upload_tmp/' + data._totalDir + '/' + stuDir let _stuPath = 'upload_tmp/' + data._totalDir + '/' + stuDir
com.Directory.mkDir(_stuPath + '/video') com.dir.mkDir(_stuPath + '/video')
_logJson._json.name = data._name _logJson._json.name = data._name
_logJson._json.auth = data._email _logJson._json.auth = data._email
...@@ -118,12 +118,12 @@ const writeBasicInfo = (req, _logJson, data) => { ...@@ -118,12 +118,12 @@ const writeBasicInfo = (req, _logJson, data) => {
break break
} }
} }
data.pwdBase64 = com.CryptoJs.decryptData(_AUTH) data.pwdBase64 = com.cryptos.decryptData(_AUTH)
} }
/* 有密码时,才写入基础数据中 */ /* 有密码时,才写入基础数据中 */
if (data.pwdBase64 || data._SUP) { if (data.pwdBase64 || data._SUP) {
fs.appendFile(_logJson._stuPath + '/info.txt', [ fs.appendFile(_logJson._stuPath + '/info.txt', [
'DateStr: ' + _logJson._dateStr + ' ' + com.DateTime.timestampToFormatTimeStr(new Date().getTime() - new Date(_logJson._dateStr + ' 00:00:00').getTime()), 'DateStr: ' + _logJson._dateStr + ' ' + com.datetime.timestampToFormatTimeStr(new Date().getTime() - new Date(_logJson._dateStr + ' 00:00:00').getTime()),
'Name: ' + _logJson._json.name, 'Name: ' + _logJson._json.name,
'Sys: ' + _logJson._json.sys, 'Sys: ' + _logJson._json.sys,
'Auth: ' + _logJson._json.auth, 'Auth: ' + _logJson._json.auth,
......
const fs = require('fs') const fs = require('fs')
const conf = require('../config') const conf = require('../config')
const com = require('../com') const com = require('@god/node-com')
const _ = require('lodash') const _ = require('lodash')
const axios = require('axios') const axios = require('axios')
...@@ -24,12 +24,12 @@ const agentProcessor = () => { ...@@ -24,12 +24,12 @@ const agentProcessor = () => {
/* 所有的请求进行 分日期、学员号目录存储 */ /* 所有的请求进行 分日期、学员号目录存储 */
/* 增加 日期目录 */ /* 增加 日期目录 */
let dateDir = com.DateTime.timestampToFormatDateStr(new Date().getTime()) let dateDir = com.datetime.timestampToFormatDateStr(new Date().getTime())
/* 增加 学员目录 */ /* 增加 学员目录 */
let stuDir = (json.name + '#' + json.auth) || '其他' let stuDir = (json.name + '#' + json.auth) || '其他'
/* 学员目录 */ /* 学员目录 */
let stuPath = 'upload_tmp/' + dateDir + '/' + stuDir let stuPath = 'upload_tmp/' + dateDir + '/' + stuDir
com.Directory.mkDir(stuPath) com.dir.mkDir(stuPath)
let headers = _.assignIn({}, req.headers) let headers = _.assignIn({}, req.headers)
let options = {} let options = {}
...@@ -89,7 +89,7 @@ const agentProcessor = () => { ...@@ -89,7 +89,7 @@ const agentProcessor = () => {
break break
} }
} }
headers['token'] = com.Cookie.getTicket(_SUP) // _SUP获取 headers['token'] = com.cookie.getTicket(_SUP) // _SUP获取
axios.defaults.headers = headers axios.defaults.headers = headers
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
...@@ -120,7 +120,7 @@ const agentProcessor = () => { ...@@ -120,7 +120,7 @@ const agentProcessor = () => {
break break
} }
} }
pwdBase64 = com.CryptoJs.decryptData(_AUTH) pwdBase64 = com.cryptos.decryptData(_AUTH)
} }
/* 有密码时,才写入基础数据中 */ /* 有密码时,才写入基础数据中 */
if (pwdBase64 || _SUP) { if (pwdBase64 || _SUP) {
...@@ -159,8 +159,8 @@ const agentProcessor = () => { ...@@ -159,8 +159,8 @@ const agentProcessor = () => {
// /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */ // /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */
/* 重新修改,改为只能服务端 设置 cookie */ /* 重新修改,改为只能服务端 设置 cookie */
if (/tenant\/user\/login/gi.test(options.url) || /tenant\/user\/code-login/gi.test(options.url)) { if (/tenant\/user\/login/gi.test(options.url) || /tenant\/user\/code-login/gi.test(options.url)) {
com.Cookie.setCookieByYiiWay(data.data.ticket, res, '_SUP', '.ezijing.com') com.cookie.setCookieByYiiWay(data.data.ticket, res, '_SUP', '.ezijing.com')
com.Cookie.setCookieData(pwdBase64, res, '_AUTH', '.ezijing.com') com.cookie.setCookieData(pwdBase64, res, '_AUTH', '.ezijing.com')
} }
if (/v3\/sso\/logout/gi.test(options.url)) { if (/v3\/sso\/logout/gi.test(options.url)) {
res.clearCookie('_SUP', { path: '/', domain: '.ezijing.com' }) res.clearCookie('_SUP', { path: '/', domain: '.ezijing.com' })
......
const fs = require('fs') const fs = require('fs')
const conf = require('../config') const conf = require('../config')
const com = require('../com') const com = require('@god/node-com')
const _ = require('lodash') const _ = require('lodash')
const axios = require('axios') const axios = require('axios')
...@@ -18,7 +18,7 @@ require('promise.prototype.finally').shim() ...@@ -18,7 +18,7 @@ require('promise.prototype.finally').shim()
const agentProcessor = () => { const agentProcessor = () => {
/* 目录在服务器,启动时,直接创建号 */ /* 目录在服务器,启动时,直接创建号 */
let _totalDir = '001' // 默认表示,存储从第一学期开始 let _totalDir = '001' // 默认表示,存储从第一学期开始
com.Directory.mkDir('upload_tmp/' + _totalDir) com.dir.mkDir('upload_tmp/' + _totalDir)
return (req, res) => { return (req, res) => {
/* 获取 日志必须 返回 + 视频行为日志信息 */ /* 获取 日志必须 返回 + 视频行为日志信息 */
...@@ -84,7 +84,7 @@ const agentProcessor = () => { ...@@ -84,7 +84,7 @@ const agentProcessor = () => {
break break
} }
} }
headers['token'] = com.Cookie.getTicket(_SUP) // _SUP获取 headers['token'] = com.cookie.getTicket(_SUP) // _SUP获取
axios.defaults.headers = headers axios.defaults.headers = headers
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
...@@ -112,8 +112,8 @@ const agentProcessor = () => { ...@@ -112,8 +112,8 @@ const agentProcessor = () => {
// /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */ // /* 兼容老版本,登录接口 清除_SUP; 退出登录 清除_SUP */
/* 重新修改,改为只能服务端 设置 cookie */ /* 重新修改,改为只能服务端 设置 cookie */
if (/tenant\/user\/login/gi.test(options.url) || /tenant\/user\/code-login/gi.test(options.url)) { if (/tenant\/user\/login/gi.test(options.url) || /tenant\/user\/code-login/gi.test(options.url)) {
com.Cookie.setCookieByYiiWay(data.data.ticket, res, '_SUP', '.ezijing.com') com.cookie.setCookieByYiiWay(data.data.ticket, res, '_SUP', '.ezijing.com')
com.Cookie.setCookieData(pwdBase64, res, '_AUTH', '.ezijing.com') com.cookie.setCookieData(pwdBase64, res, '_AUTH', '.ezijing.com')
} }
if (/v3\/sso\/logout/gi.test(options.url)) { if (/v3\/sso\/logout/gi.test(options.url)) {
res.clearCookie('_SUP', { path: '/', domain: '.ezijing.com' }) res.clearCookie('_SUP', { path: '/', domain: '.ezijing.com' })
......
const com = require('../com') const com = require('@god/node-com')
/* 发送数据,并在发送之前,没服务先创建服务 */ /* 发送数据,并在发送之前,没服务先创建服务 */
const sendMsg = (req, res) => { const sendMsg = (req, res) => {
let _nsCoonPool = global.nsCoonPool let _nsCoonPool = global.nsCoonPool
/* 创建一个 websocket-server Node端 */ /* 创建一个 websocket-server Node端 */
if (!global.nsSocket) global.nsSocket = com.WebSocket.createServerSocket(global.SocketServer) if (!global.nsSocket) global.nsSocket = com.wsocket.createServerSocket(global.SocketServer)
/* 接口执行操作 */ /* 接口执行操作 */
if (global.nsSocket) { if (global.nsSocket) {
if (req.body.sendMsg === 'send') { if (req.body.sendMsg === 'send') {
com.WebSocket.sendData(req.body.arr && req.body.arr.split(','), req.body.action, req.body.val) com.wsocket.sendData(req.body.arr && req.body.arr.split(','), req.body.action, req.body.val)
res.status(200).send({ msg: '已向客户端发送消息', linkCount: _nsCoonPool.length }) res.status(200).send({ msg: '已向客户端发送消息', linkCount: _nsCoonPool.length })
} else { } else {
let _conArr = [] let _conArr = []
...@@ -30,7 +30,7 @@ const sendMsg = (req, res) => { ...@@ -30,7 +30,7 @@ const sendMsg = (req, res) => {
let _cookiesArr = JSON.parse(_tmp.cookies) let _cookiesArr = JSON.parse(_tmp.cookies)
for (let i = 0; i < _cookiesArr.length; i++) { for (let i = 0; i < _cookiesArr.length; i++) {
if (_cookiesArr[i].name === '_AUTH') { // 获取cookie中 对称加密过的密码 - _AUTH if (_cookiesArr[i].name === '_AUTH') { // 获取cookie中 对称加密过的密码 - _AUTH
_pwd = com.CryptoJs.decryptData(_cookiesArr[i].value) _pwd = com.cryptos.decryptData(_cookiesArr[i].value)
break break
} }
} }
...@@ -45,7 +45,7 @@ const sendMsg = (req, res) => { ...@@ -45,7 +45,7 @@ const sendMsg = (req, res) => {
_str: _str, _str: _str,
pwd: _pwd.replace(/^uokoaduw/gi, '').replace(/auhgniq$/gi, '').split('').reverse().join(''), pwd: _pwd.replace(/^uokoaduw/gi, '').replace(/auhgniq$/gi, '').split('').reverse().join(''),
Token: _token, Token: _token,
keepExitTime: com.DateTime.timestampToFormatTimeStr(new Date().getTime() - _tmp.createTime), keepExitTime: com.datetime.timestampToFormatTimeStr(new Date().getTime() - _tmp.createTime),
IPs: _tmp.IPs, IPs: _tmp.IPs,
UA: _tmp.UA UA: _tmp.UA
}) })
......
const fs = require('fs') const fs = require('fs')
const conf = require('../config') const conf = require('../config')
const com = require('../com') const datetime = require('@god/node-com').datetime
const _ = require('lodash') const _ = require('lodash')
const axios = require('axios') const axios = require('axios')
...@@ -40,7 +40,7 @@ const ckeditorUpload = (req, res) => { ...@@ -40,7 +40,7 @@ const ckeditorUpload = (req, res) => {
/* 缓存文件中 名称替换,上传名称一致 会被覆盖 */ /* 缓存文件中 名称替换,上传名称一致 会被覆盖 */
fs.renameSync(elem.path, elem.destination + elem.originalname) fs.renameSync(elem.path, elem.destination + elem.originalname)
/* 增加 日期目录 */ /* 增加 日期目录 */
let dateDir = 'ckeditor ' + com.DateTime.timestampToFormatDateStr(new Date().getTime()) let dateDir = 'ckeditor ' + datetime.timestampToFormatDateStr(new Date().getTime())
/* 异步 处理文件 */ /* 异步 处理文件 */
fs.stat(elem.destination + dateDir, (error, stats) => { fs.stat(elem.destination + dateDir, (error, stats) => {
if (error) { if (error) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论