Commit 92d20503 by lixinming

no message

parent 85170ee7
......@@ -326,6 +326,26 @@
}
}
},
"coffee-script": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz",
"integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=",
"requires": {
"mkdirp": "~0.3.5"
},
"dependencies": {
"mkdirp": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
"integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc="
}
}
},
"coffeescript-module": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/coffeescript-module/-/coffeescript-module-0.2.1.tgz",
"integrity": "sha1-LGGqhpg8rNImcZ+fHdqSPLCuZ7A="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
......@@ -821,6 +841,11 @@
"graceful-fs": "^4.1.6"
}
},
"jspack": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/jspack/-/jspack-0.0.4.tgz",
"integrity": "sha1-Mt01x/3LPjRWwY+7fvntC8YjgXc="
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
......@@ -842,6 +867,11 @@
"resolved": "https://registry.npm.taobao.org/kitx/download/kitx-1.3.0.tgz",
"integrity": "sha1-qz7nxZjSsdYp/VVWj4aMREDCAOo="
},
"lodash": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4="
},
"log4js": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz",
......@@ -1064,6 +1094,21 @@
"resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz",
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
},
"node-psd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/node-psd/-/node-psd-1.0.1.tgz",
"integrity": "sha1-wNh/QP3oh/YaGv8FxvdpZbJLasM=",
"requires": {
"coffee-script": "~ 1.7.1",
"coffeescript-module": "~ 0.2.1",
"iconv-lite": "~ 0.4.4",
"jspack": "~ 0.0.3",
"lodash": "~ 2.4",
"parse-engine-data": "~ 0.1",
"pngjs": "~ 0.4.0",
"rsvp": "~ 3.0.6"
}
},
"node-xlsx": {
"version": "0.16.1",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.16.1.tgz",
......@@ -1115,6 +1160,14 @@
"resolved": "https://registry.npmjs.org/oracledb/-/oracledb-5.3.0.tgz",
"integrity": "sha512-HMJzQ6lCf287ztvvehTEmjCWA21FQ3RMvM+mgoqd4i8pkREuqFWO+y3ovsGR9moJUg4T0xjcwS8rl4mggWPxmg=="
},
"parse-engine-data": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/parse-engine-data/-/parse-engine-data-0.1.2.tgz",
"integrity": "sha1-UWH2EzyYiPUhVezO1CcWV13+oFI=",
"requires": {
"iconv-lite": "^0.4.4"
}
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
......@@ -1130,6 +1183,11 @@
"resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pngjs": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-0.4.0.tgz",
"integrity": "sha1-KUBxrcGytgv9SspNvkdZvM7m/Xc="
},
"printj": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
......@@ -1267,6 +1325,11 @@
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"rsvp": {
"version": "3.0.21",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.0.21.tgz",
"integrity": "sha1-ScWI/hjvKTvNCrn05nVuasQzNZ8="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
......
......@@ -19,6 +19,7 @@
"mongoose": "^5.4.0",
"multer": "^1.4.3",
"mysql": "^2.18.1",
"node-psd": "^1.0.1",
"node-xlsx": "^0.16.1",
"nodemailer": "^6.1.1",
"oracledb": "^5.3.0",
......
import formidable = require('formidable');
import { upImgPathConfig } from '../serverConfig';
import * as userData from './../model/users';
import * as pictureData from './../model/picture';
import * as crypto from 'crypto';
import { BizError } from '../util/bizError';
import { psdForPng } from '../util/psd';
const fs = require('fs');
const path = require('path');
//上传psd文件
export async function upPsdFile(req) {
let result = await up(req, getFileName());
console.log(result);
//上传成功通过fs改名称
return {}
export async function upPsdFile(req, userId, psdType, userName, desc) {
let {fileName, pId} = getFileName();
let upResult:any = await up(req, fileName);
let success = true;
if (upResult.file) {
let pngName = psdForPng(fileName);
let size = upResult.file.size;
await pictureData.addOncePic(pId, userId, userName, fileName, pngName, psdType, desc, size);
} else {
success = false;
throw new BizError("上传psd错误 fileName", fileName);
}
return { success };
}
function up(req, fileName) {
async function up(req, fileName) {
let form = new formidable.IncomingForm();
let psdUrl = path.join(__dirname.substring(0,__dirname.indexOf("out")), upImgPathConfig.psd);
form.uploadDir = psdUrl;
form.name = fileName
form.on('end',()=>{
console.log("up end");
})
return new Promise((resolve, reject) => {
form.parse(req, (err, fields, files) => {
form.parse(req, async (err, fields, files) => {
if (err) reject(err);
else resolve(files);
fs.rename(files.file.path, path.join(psdUrl, 'sdfa/',fileName), (err) => {
if (err) throw new BizError("改名失败", err);
else resolve(files);
});
});
});
}
function getFileName() {
let randomStr = Math.ceil(Math.random()* 10000000) + '' +new Date().valueOf();
const md5 = crypto.createHash('md5');
let fileNameMd5 = md5.update(randomStr);
return fileNameMd5+'.psd';
let fileNameMd5 = md5.update(randomStr).digest('hex');
return {fileName:fileNameMd5+'.psd', pId:fileNameMd5};
}
export async function picList(picType) {
let dbList = await pictureData.selectAllPicture();
let picList = [];
dbList.forEach(info => {
let {pId ,uId ,uName ,psdName ,pngName ,chartType ,createTime ,desc ,size} = info;
picList.push({
pId,
uId,
uName,
psdName,
pngName,
chartType,
createTime,
desc,
size
});
});
return {picList}
}
import { now } from "mongoose";
import { testCheck } from "./config/paramaterConfig";
import { initDB } from "./db/mongo/db_init";
import { httpServer } from "./net/http_server";
import { getPort } from "./serverConfig";
async function lanuch() {
httpServer.createServer(getPort());
testCheck();
}
lanuch();
const configMap = {};
paramatersConfig.forEach(info => {
configMap[info.url] = info.parm;
});
export function checkingReqParm(url, body) {
let configInfo = configMap[url];
if (!configInfo) return true;
for (let key in configInfo) {
let type = typeof configInfo[key];
let thisParamater = configInfo[key];
let bodyType = typeof body[key];
let bodyThisParamater = body[key];
if ( type != bodyType ) return `参数错误 ${key}`;
if (thisParamater == [] && !(bodyThisParamater instanceof Array) ) `参数错误 ${key}`;
}
return true;
}
\ No newline at end of file
......@@ -5,21 +5,28 @@ const LRU = require("lru-cache")
, maxAge: 1000 * 60 * 10 }
, cache = LRU(cacheOptions);
let notTokenInterfaceList = [
"/datalist",
"/api/user/login",
"/api/user/register",
];
const notTokenSign = 'xxakdfwosaddf!@3sadfhDAse';
const signKey = "12345678asd!@#%DFFGa";
export async function checkSign(req, res, next) {
let signKey = "12345678asd!@#%DFFGa";
let userId = req.headers.userid;
let playerId = req.headers.playerid;
let userId = req.headers.userId;
let token = req.headers.token;
let timeStamp = req.headers.timestamp;
let platform = req.headers.platform;
if (req.path != '/api/system/servertime' && req.path.indexOf('admin') < 0 && req.headers.sign != 'xxakdfwosaddf!@3sadfhDAse') {
if (notTokenInterfaceList.indexOf(req.path) < 0 && req.headers.sign != notTokenSign ) {
let now = Date.now();
if (Math.abs(now - timeStamp) > 120000) {
console.log(req.path, new Date(now), "timeStamp", timeStamp);
return next(new BizError('timeStamp error time difference error'))
}
let sign = getSign([signKey, userId, playerId, token, timeStamp, platform, req.path, signKey]);
let sign = getSign(userId, token, timeStamp, req.path, signKey);
let cacheSign = cache.get(sign);
if (cacheSign) {
if (cacheSign > 5) return next(new BizError("sign error repetitive sign"));
......@@ -36,6 +43,8 @@ export async function checkSign(req, res, next) {
console.log(req.path, JSON.stringify(req.headers));
next(new BizError("sign error"))
}
}
next();
......
......@@ -3,14 +3,15 @@ import { picDB } from "../db/mongo/db_init";
const pictureSchema = new Schema({
pId: {type: Number, index:true},
uId: {type: Number},
pId: {type: String, index:true},
uId: {type: String},
uName: {type: String},
psdName: {type: String},
pngName: {type: String},
path: {type: String},
chartType:{type:Number, index:true},// 按图表类型分 后续有新的标签类型,就往后加
createTime:{type:Date, index:true},
desc:{type:String},//描述
size:{type:Number},//文件大小 单位: b
});
let pictureModel;
......@@ -19,57 +20,18 @@ export function initModel() {
pictureModel = picDB.model('picture', pictureSchema)
}
export async function selectPicList() {
let userModel = require('../model/users');
return await pictureModel.find((err, doc) => {
let picItem = JSON.parse(JSON.stringify(doc));
let uId = picItem[0].uId;
userModel.find({"uId":uId}, (err, doc) => {
picItem[0].picInfo = doc[0];
})
})
}
export async function selectAllPicture() {
return await pictureModel.find({}).exec();
}
export async function selectPicById(pId) {
let query = {pId: pId};
let query = { pId };
return await pictureModel.find(query).exec();
}
export async function addOncePic(addInfo) {
// await pictureModel.inseraddInfot(addInfo);
// return true;
await pictureModel.save((err, doc) => {
doc = addInfo;
if (!err) {
console.log('保存成功');
return true;
} else {
console.log('Error:' + err);
}
})
return false;
export async function addOncePic(pId, uId, uName, psdName, pngName, chartType, desc, size) {
let addInfo = {pId, uId, uName, psdName, pngName, chartType, desc, size, createTime:new Date()};
return await pictureModel.create(addInfo);
}
export async function update(pId, reviseInfo) {//todo
// await pictureModel.update(reviseInfo);
// return true;
await pictureModel.findById(pId, (err, doc) => {
doc = reviseInfo;
doc.save((err) => {
if (!err) {
console.log('修改成功');
return true;
} else {
console.log('Error:' + err);
}
})
})
return false;
}
\ No newline at end of file
......@@ -18,7 +18,6 @@ export function initModel() {
usersModel = picDB.model('users', usersSchema);
}
export async function selectAllUser() {
return await usersModel.find({}).exec();
}
......
......@@ -5,6 +5,8 @@ import routers = require('../routers/router');
import compression = require('compression');
import { encryptionReturn } from '../middleware/encryptionReturn';
import { getEnv } from '../serverConfig';
import { checkSign } from '../middleware/sign';
import { checkingReqParm } from '../middleware/paramaterCheck';
export class httpServer {
static createServer(port:number) {
......@@ -28,14 +30,19 @@ export class httpServer {
httpServer.use(express.static('public') );
httpServer.use(bodyParser.json({limit:"10kb"}));
httpServer.use(compression())
httpServer.use(compression());
httpServer.use(checkSign);
httpServer.use(checkingReqParm);
//演示环境加密数据
if (getEnv() == "dem") {
console.log("演示环境 开启数据加密");
httpServer.use(encryptionReturn);
}
routers.setRouter(httpServer);
httpServer.listen(port);
console.log('server listen on port:'+port);
......
......@@ -6,9 +6,12 @@ export function setRouter(httpServer) {
}
async function upFile(req, res) {
picBiz.upPsdFile(req);
let result = await picBiz.upPsdFile(req, userId, psdType, userName, desc);
res.send(result);
}
async function fileList(req, res) {
let picType = req.picType;
let result = await picBiz.picList(picType);
res.send(result);
}
\ No newline at end of file
......@@ -7,4 +7,14 @@ export function setRouter(httpServer) {
httpServer.get('/datalist', asyncHandler(dataListBiz.getData));
userRouters.setRouter(httpServer);
picRouters.setRouter(httpServer);
}
export const paramatersConfig = [
{url:"/api/user/login", parm:{loginId:"", pwd:""} },
{url:"/api/user/register", parm:{loginId:"", pwd:-1, uName:""} },
{url:"/api/user/test", parm:{roles:[], data:{}, num:1, str:"'" } }
];
export function newSetRouter(httpServer) {
}
\ No newline at end of file
import * as asyncHandler from 'express-async-handler';
import * as userBiz from './../biz/user'
import * as userBiz from './../biz/user';
export function setRouter(httpServer) {
httpServer.post('/api/user/login', asyncHandler(login));
......
......@@ -4,11 +4,11 @@ var PSD = require('node-psd');
const path = require('path');
/**
* psdForPng psd转png
* @param fileName psd文件名称,记得带.psd
* @param fileName psd文件名称,记得带.psd
*/
export async function psdForPng(fileName:string) {
export function psdForPng(fileName:string) {
fileName = "1213"
const psdName = fileName+".psd";
const psdName = fileName;
const pngName = fileName+".png";
......@@ -25,4 +25,6 @@ export async function psdForPng(fileName:string) {
} catch(err) {
throw new BizError(psdName, "转png失败", err.message || err.msg);
}
return pngName;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment