You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
teamwk123/routes/index.js

457 lines
15 KiB

1 month ago
var express = require('express');
const http = require('http').Server(router);
var router = express.Router();
var bodyParser = require('body-parser');
var path = require("path");
const nodemailer = require('nodemailer');
const fs = require('fs');
const multer = require('multer')
const Database = require('sqlite-async');
const { name } = require('ejs');
var execSync = require('child_process').execSync;
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({
extended: false
})
//桌面latest版
function execute(cmd){
execSync(cmd,{cwd:'C:\\Users\\17217\\Desktop\\english\\python'},function(error, stdout, stderr){
if (error){
console.log("error!")
console.error(error);
}
else{
console.log("运行成功!")
}
})
}
//邮箱发送验证码
function sendMails(mailId, VerificationCode){
//设置邮箱配置、资源链接池
var transporter = nodemailer.createTransport({
//host:'smtp.qq.com', //邮箱服务的主机smtp.qq.com
service: 'qq',
port: '465', //对应的端口号QQ邮箱的端口号是465
secure: false, //开启安全连接
auth: { //用户信息
user: '1721777650@qq.com', //用来发邮件的邮箱账户
pass: 'woaibabamama' //这里的密码是qq的smtp授权码可以去qq邮箱后台开通查看
}
});
//设置收件人信息、邮件内容
var mailOptions = {
from: '1721777650@qq.com', //发送者
to: '947213307@qq.com', //接收者
subject: '验证码邮件', //主题
text: '您的注册验证码为' + VerificationCode, //文本内容
};
transporter.sendMail(mailOptions, (error) => {
if (error) {
return console.log(error);
}
console.log('邮件发送成功,发送至:', mailId);
});
}
//验证码生成
function getVerificationCode(){ //传入需要的字符串长度
// 准备一个用来抽取码的字符串,或者字典
var verification_code_str = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; //数字和字母
// 获取某个范围的随机整数,封装的函数,在上面抽取字典的时候进行了调用
function getRandom(min, max) { //获取min-max数字之间的某个随机数直接调用即可
return Math.round(Math.random() * (max - min) + min);
}
let newStr = ''; //创建一个空字符串,用来拼接四位随机码
for (var i = 0; i < 4; i++) { //for循环四次则拼接四位随机码
newStr += verification_code_str[getRandom(0, verification_code_str.length - 1)]; //从字典中随机选一个下标,并拼接到空字符串中
}
return newStr
}
function delDir(p) { //删除文件夹,用于注销用户
// 读取文件夹中所有文件及文件夹
var list = fs.readdirSync(p)
list.forEach((v) => {
// 拼接路径
var url = p + '/' + v
// 读取文件信息
var stats = fs.statSync(url)
// 判断是文件还是文件夹
if (stats.isFile()) {
// 当前为文件,则删除文件
fs.unlinkSync(url)
} else {
// 当前为文件夹,则递归调用自身
arguments.callee(url)
}
})
// 删除空文件夹
fs.rmdirSync(p)
}
// 定义全局变量
global.myVariable = '';
global.myVariable1 = '';
global.myVariable2 = '';
// 每2分钟更新一次全局变量
setInterval(function() {
global.myVariable = '';
global.myVariable1 = ''
global.myVariable2 = '';
}, 120000);
router.get('/guanli', function (req, res, next) {
res.render('guanli', {
xiugai_success: req.session.message
});
});
// 响应主页请求
router.get('/zuozhan', function(req, res) {
const title = 'Dynamic EJS Page';
const message = myVariable;
res.render('zuozhan', { title: title, message: message });//将动态数据渲染到前端界面
});
// 响应主页请求
router.get('/zuozhan2', function(req, res) {
const title = 'Dynamic EJS Page';
const message = myVariable2;
res.render('zuozhan2', { title: title, message: message });//将动态数据渲染到前端界面
});
/* GET home page. */
router.get('/', function (req, res, next) {
// const checkUserStatus = setInterval(() => {
if (req.session.user) {
admin_portal_link = req.session.admin ? '/data/admin' : '';
res.render('index', {
user_name: req.session.user,
admin_portal: admin_portal_link,
admin: req.session.admin,
message: req.session.message
});
} else {
if (!req.session.error) req.session.error = "请先登录!"
res.redirect('login');
}
// },1000)
});
/* Login functions */
router.get('/login', function (req, res) {
res.render('login', {
login_error: req.session.error
});
});
router.get('/download', function (req, res, next) {
res.render('download');
});
router.post('/login', urlencodedParser, function (req, res, next) {
var name = req.body.name;
var pwd = req.body.pwd;
var sqlite3 = require('sqlite3').verbose()
var sql = "SELECT * FROM users where username='" + name + "' and password='" + pwd+"'"
var db = new sqlite3.Database('data.db', () => {
db.get(sql, function (err, row) {
if (row== undefined) {
console.log('error');
req.session.error = "用户名或密码错误,请重新输入!";
res.redirect('login');
} else {
username = name
// var exec = require('child_process').exec;
// exec(`python C:/Users/17217/Desktop/english/users/admin/log.py `+username)
// db.run("delete from "+name,function(){ //每次先将表信息清空再重新读取文件夹里面的文件信息
// });
// fs.readdir('./users/'+name, 'utf8', function(err, data) {
// console.log(data);
// for (var key in data) {
// console.log(key);
// var a=key
// console.log(data[key]);
// var b=data[key]
// var c = fs.statSync(path.join(__dirname,'../users/'+name+'/'+data[key]))
// console.log(c.size)
// var add = db.prepare("INSERT INTO "+name+"(fid,fname,fsize,fowner) VALUES(?,?,?,?)");//读取用户名文件夹下文件ID、文件名、大小并写入数据库中
// add.run(a,b,c.size,name);
// add.finalize();
// }
// })
1 month ago
if (name == 'admin')
{
req.session.error = ''
req.session.message = '';
req.session.user = 'admin';
req.session.admin = true;
res.redirect('/')
}
else{
req.session.error = ''
req.session.message = '';
req.session.user = req.body.name;
req.session.admin = false;
res.redirect('/')
}
}
}
);
})
});
router.get('/register', function (req, res, next) {
res.render('register');
});
global.h1=''; //定义全局变量h1用于保存验证码信息
router.post('/register', urlencodedParser, function (req, res, next) {
var name = req.body.username;
var pwd = req.body.pwd1;
var pwd1 =req.body.pwd2;
var code1 = req.body.code;
var mailId =req.body.email;
if(code1=='')
{
VerificationCode = getVerificationCode() //生成随机码
global.h1 = VerificationCode;
console.log('发送的验证码为:'+ VerificationCode)
sendMails(mailId, VerificationCode) //发送邮箱验证码
}
else{
if(code1==h1)
{
var sqlite3 = require('sqlite3').verbose()
var sql = "SELECT * FROM users where username='" + name+"'"
var db = new sqlite3.Database('data.db', () => {
db.get(sql, function (err, row) {
if(name==''||pwd=='')
{
res.send("用户名或密码不能为空!");
}
else{
if (row == undefined) {
if(pwd==pwd1){
fs.mkdir(path.join(__dirname, '../users/'+name), (err) => {
if (err) {
return console.error(err);
}
console.log('Directory created successfully!');
});
var a="create table "+name+"(fid varchar(15),fname varchar(15),fsize varchar(15),fowner varchar(15))"
db.run(a)
var add = db.prepare("INSERT INTO users(username,password) VALUES(?,?)");
add.run(req.body.username, req.body.pwd1);
add.finalize();
res.redirect('login');
}
else{
res.send("输入密码不一致!");
}
}
else {
res.send("该用户名已存在,请重新注册");
}
}
}
);
})
}
else{
res.send("验证码错误!");
}
}
});
//文件上传页面
//上传文件到本地文件夹
router.post('/upload', multer({dest:'./users/'}).any(),function(req, res){
filepath = 'users/admin/'
filename = req.files[0].destination + req.files[0].originalname
console.log("filename: "+filename);
console.log("username: "+username)
fs.rename(req.files[0].path, filepath + req.files[0].originalname, function(err){//重命名
new_name = filepath + req.files[0].originalname
originalname=req.files[0].originalname
console.log("new_name: "+ new_name)
var exec = require('child_process').exec;
new_name2='./'+new_name
console.log("new_name2: "+ new_name2)
if (err){
res.send(err)
}
else{
var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database('data.db', () => {
db.run("delete from "+username,function(){ //每次先将表信息清空再重新读取文件夹里面的文件信息
});
fs.readdir('./users/'+username, 'utf8', function(err, data) { //读取用户名文件夹下文件ID、文件名、大小并写入数据库中
console.log(data);
for (var key in data) {
console.log(key);
var a=key
console.log(data[key]);
var b=data[key]
var c = fs.statSync(path.join(__dirname,'../users/'+username+'/'+data[key]))
console.log(c.size)
var add = db.prepare("INSERT INTO "+username+"(fid,fname,fsize,fowner) VALUES(?,?,?,?)");
add.run(a,b,c.size,username);
add.finalize();
}
})
})
// execute("python D:/99/ui_ref/users/admin/a.py")
var exec = require('child_process').exec;
exec(`python C:/Users/17217/Desktop/english/users/admin/decode.py`)
res.send('上传成功,点击←返回上一页');
}
})
})
//python
router.post('/execution',function(req, res){
var exec = require('child_process').exec;
exec(`python C:/Users/17217/Desktop/english/users/admin/decode.py`)
res.send('运行成功,点击←返回上一页!');
})
router.post("/getit", function (data, res) {
fs.readFile("C:\\Users\\17217\\Desktop\\english\\result.txt", 'utf-8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
a = data;
res.send(a);
});
})
router.post("/histroy", function (data, res) {
fs.readFile("C:\\Users\\17217\\Desktop\\english\\log.txt", 'utf-8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
a = data;
res.send(a);
});
})
router.post("/log", function (data, res) {
fs.readFile("C:\\Users\\17217\\Desktop\\english\\rizhi.txt", 'utf-8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
a = data;
res.send(a);
});
})
//下达指令接口
router.post('/sendit', urlencodedParser,function (req, res) {
var message = req.body.message;
console.log(message);
myVariable = message;
res.send('发送指令成功,点击←返回上一页!');
})
router.post('/sendit1', urlencodedParser,function (req, res) {
var message = req.body.message;
console.log(message);
myVariable2 = message;
res.send('发送指令成功,点击←返回上一页!');
})
//回复命令接口
router.post('/sendit2', urlencodedParser,function (req, res) {
var message = req.body.message;
console.log(message);
myVariable1 = message;
res.send('已向指挥员回复命令,点击←返回上一页!');
})
//修改用户名
router.post('/xiugai1', urlencodedParser, async function (req, res) {
var name = req.body.name;
if(name=='')
{
req.session.message = '用户名不能为空!'
res.redirect('guanli');
}
else
{
const db = await Database.open(path.resolve(__dirname, '../data.db')); //使用async await使代码相对顺序执行防止还没执行数据库操作req.session.user就改变了
await db.run("update users set code = "+"'"+req.session.user+"'"+" WHERE username = "+"'"+req.session.user+"'",function(err){
})
await db.run("update users set username = "+"'"+name+"'"+" WHERE code = "+"'"+req.session.user+"'",function(err){
})
await db.run("alter table "+req.session.user+" rename to "+name,function(err){
})
fs.rename("users\\"+req.session.user, "users\\"+name, function(err) {//改用户文件夹名字
})
req.session.message = '用户名修改成功!'
req.session.user=name
res.redirect('guanli');
console.log(req.session.user);
}
});
//修改密码
router.post('/xiugai2', urlencodedParser, function (req, res) {
var pwd = req.body.pwd;
if(pwd=='')
{
req.session.message = '密码不能为空!'
res.redirect('guanli');
}
else
{
var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database('data.db', () => {
db.run("update users set password = "+pwd+" WHERE username = "+"'"+req.session.user+"'",function(err){//数据库查找并修改对应用户名的密码
})
})
req.session.message = '密码修改成功!'
res.redirect('guanli');
}
});
//用户注销
router.post('/zhuxiao', async function (req, res) {
var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database('data.db', () => {
var sql_del = db.prepare("delete from users where username='"+req.session.user+"'")
sql_del.run()
db.run("drop table "+req.session.user,function(err){
})
})
delDir("users\\"+req.session.user)
req.session.error = '注销成功!'
res.redirect('login');
});
/* Logout functions */
router.get('/logout', function (req, res, next) {
req.session.user = 0;
req.session.message = '';
req.session.admin = false;
res.redirect('/')
});
module.exports = router;