user-admin
This commit is contained in:
@@ -174,7 +174,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="detail2" hidden>
|
<div id="detail2" hidden>
|
||||||
<div class="col-xl-8 col-md-6 mb-4">
|
<div class="col-xl-12 col-md-6 mb-4">
|
||||||
<div class="card shadow" style="margin-top:1.5rem;border-radius:10px">
|
<div class="card shadow" style="margin-top:1.5rem;border-radius:10px">
|
||||||
<div class="card-body" >
|
<div class="card-body" >
|
||||||
<table id="table">
|
<table id="table">
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
<td style="min-width:100px">
|
<td style="min-width:100px">
|
||||||
消息量
|
消息量
|
||||||
</td>
|
</td>
|
||||||
<td style="min-width:100px">
|
<td style="min-width:300px">
|
||||||
执行操作
|
执行操作
|
||||||
</td>
|
</td>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -285,6 +285,53 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
var resetPassword = function(userName){
|
||||||
|
if (!confirm(`确定要重置用户 ${userName} 的密码吗?新密码将设置为 "123456"`)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const modald = showmodaltext("<div style='text-align:center'><i class='fa fa-spin fa-cog' style='font-size:2rem;color:#4e73df'></i><p style='margin-top:6px;margin-bottom:0;color:#4e73df;font-size:1rem;font-weight:bold'>重置密码中...</p></div>");
|
||||||
|
$.get('resetf',{
|
||||||
|
"username":userName,
|
||||||
|
"password":"123456"
|
||||||
|
},function(res){
|
||||||
|
if(res == 1)
|
||||||
|
{
|
||||||
|
modald.close()
|
||||||
|
showtext("操作成功!")
|
||||||
|
setTimeout(function(){
|
||||||
|
window.location.href = window.location.href
|
||||||
|
},1000)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
modald.close()
|
||||||
|
showtext("操作失败")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var removeUser = function(userName){
|
||||||
|
if (!confirm(`确定要删除用户 ${userName} 的账号吗?此操作将不可恢复!`)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const modald = showmodaltext("<div style='text-align:center'><i class='fa fa-spin fa-cog' style='font-size:2rem;color:#4e73df'></i><p style='margin-top:6px;margin-bottom:0;color:#4e73df;font-size:1rem;font-weight:bold'>重置密码中...</p></div>");
|
||||||
|
$.get('deletef',{
|
||||||
|
"username":userName
|
||||||
|
},function(res){
|
||||||
|
if(res == 1)
|
||||||
|
{
|
||||||
|
modald.close()
|
||||||
|
showtext("操作成功!")
|
||||||
|
setTimeout(function(){
|
||||||
|
window.location.href = window.location.href
|
||||||
|
},1000)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
modald.close()
|
||||||
|
showtext("操作失败")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
$("#time").html(new Date().toLocaleTimeString())
|
$("#time").html(new Date().toLocaleTimeString())
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
$("#time").html(new Date().toLocaleTimeString())
|
$("#time").html(new Date().toLocaleTimeString())
|
||||||
|
|||||||
@@ -769,7 +769,7 @@ var arrLang = {
|
|||||||
"ADMIN": "管理",
|
"ADMIN": "管理",
|
||||||
"BASICADMIN": "基础设置",
|
"BASICADMIN": "基础设置",
|
||||||
"USERADMIN": "批量注册",
|
"USERADMIN": "批量注册",
|
||||||
"DATAADMIN": "数据管理",
|
"DATAADMIN": "用户管理",
|
||||||
"UPEMAIL": "注册邮箱:",
|
"UPEMAIL": "注册邮箱:",
|
||||||
"EMAIL": "placeholder$请输入电子邮箱地址",
|
"EMAIL": "placeholder$请输入电子邮箱地址",
|
||||||
"PASSWORD": "placeholder$请输入密码",
|
"PASSWORD": "placeholder$请输入密码",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ $(function(){
|
|||||||
$.getJSON("queryData",function(res){
|
$.getJSON("queryData",function(res){
|
||||||
for(var i = 0;i<=res.length-1;i = i+1)
|
for(var i = 0;i<=res.length-1;i = i+1)
|
||||||
{
|
{
|
||||||
$("#tbody").append("<tr><td>"+res[i]["username"]+"</td><td>"+res[i]["projects"]+"</td><td>"+res[i]["messages"]+"</td><td>"+ "<a class='btn btn-primary' style='cursor:pointer;' onclick=\"clearMessage('"+res[i]["username"]+"')\" >清空消息</a>"+"</td></tr>")
|
$("#tbody").append("<tr><td>"+res[i]["username"]+"</td><td>"+res[i]["projects"]+"</td><td>"+res[i]["messages"]+"</td><td>"+ "<a class='btn btn-primary' style='cursor:pointer;' onclick=\"clearMessage('"+res[i]["username"]+"')\" >清空消息</a> "+ "<a class='btn btn-success' style='cursor:pointer;' onclick=\"resetPassword('"+res[i]["username"]+"')\" >重置密码</a> "+"<a class='btn btn-danger' style='cursor:pointer;' onclick=\"removeUser('"+res[i]["username"]+"')\" >删除用户</a>"+"</td></tr>")
|
||||||
}
|
}
|
||||||
datatable = $("#table").DataTable({
|
datatable = $("#table").DataTable({
|
||||||
"order": [[ 2, "desc" ]],
|
"order": [[ 2, "desc" ]],
|
||||||
|
|||||||
134
mixio.js
134
mixio.js
@@ -706,6 +706,106 @@ async function daemon_start() {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
app.get('/resetf', function(req, res2) {
|
||||||
|
var userName = req.query.username
|
||||||
|
var password = req.query.password
|
||||||
|
if (userName && password) {
|
||||||
|
if(configs["MIXIO_HTTP_PORT"] !=0)
|
||||||
|
{
|
||||||
|
require('http').get('http://localhost:' + configs["MIXIO_HTTP_PORT"] + "/resetf?target=" + userName + "&pass=" + password, function(req, res) {
|
||||||
|
var html = '';
|
||||||
|
req.on('data', function(data) {
|
||||||
|
html += data;
|
||||||
|
});
|
||||||
|
req.on('end', function() {
|
||||||
|
res2.send(html)
|
||||||
|
});
|
||||||
|
}).on('error', function() {
|
||||||
|
res2.send('3')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
// 对参数进行编码
|
||||||
|
const encodedPath = "/resetf?target=" + encodeURIComponent(userName) +
|
||||||
|
"&pass=" + encodeURIComponent(password)
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
hostname: 'localhost',
|
||||||
|
port: configs["MIXIO_HTTPS_PORT"],
|
||||||
|
path: encodedPath,
|
||||||
|
method: 'GET',
|
||||||
|
rejectUnauthorized: false, // 忽略证书验证
|
||||||
|
agent: false
|
||||||
|
};
|
||||||
|
|
||||||
|
https.get(options, function(res) {
|
||||||
|
var html = '';
|
||||||
|
res.on('data', function(data) {
|
||||||
|
html += data;
|
||||||
|
});
|
||||||
|
res.on('end', function() {
|
||||||
|
res2.send(html);
|
||||||
|
});
|
||||||
|
}).on('error', function(e) {
|
||||||
|
console.log(e);
|
||||||
|
res2.send('3');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
app.get('/deletef', function(req, res2) {
|
||||||
|
var userName = req.query.username
|
||||||
|
if (userName) {
|
||||||
|
if(configs["MIXIO_HTTP_PORT"] !=0)
|
||||||
|
{
|
||||||
|
require('http').get('http://localhost:' + configs["MIXIO_HTTP_PORT"] + "/deletef?target=" + userName, function(req, res) {
|
||||||
|
var html = '';
|
||||||
|
req.on('data', function(data) {
|
||||||
|
html += data;
|
||||||
|
});
|
||||||
|
req.on('end', function() {
|
||||||
|
res2.send(html)
|
||||||
|
});
|
||||||
|
}).on('error', function() {
|
||||||
|
res2.send('3')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
// 对参数进行编码
|
||||||
|
const encodedPath = "/deletef?target=" + encodeURIComponent(userName)
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
hostname: 'localhost',
|
||||||
|
port: configs["MIXIO_HTTPS_PORT"],
|
||||||
|
path: encodedPath,
|
||||||
|
method: 'GET',
|
||||||
|
rejectUnauthorized: false, // 忽略证书验证
|
||||||
|
agent: false
|
||||||
|
};
|
||||||
|
|
||||||
|
https.get(options, function(res) {
|
||||||
|
var html = '';
|
||||||
|
res.on('data', function(data) {
|
||||||
|
html += data;
|
||||||
|
});
|
||||||
|
res.on('end', function() {
|
||||||
|
res2.send(html);
|
||||||
|
});
|
||||||
|
}).on('error', function(e) {
|
||||||
|
console.log(e);
|
||||||
|
res2.send('3');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
app.get('/start', async function(req, res) {
|
app.get('/start', async function(req, res) {
|
||||||
if (!serverStatus) {
|
if (!serverStatus) {
|
||||||
console.log("[INFO] Starting MixIO Server...")
|
console.log("[INFO] Starting MixIO Server...")
|
||||||
@@ -1744,6 +1844,40 @@ var mixioServer = async function() {
|
|||||||
res.send('2')
|
res.send('2')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
app.get('/resetf', function(req, res) {
|
||||||
|
if (req.query.target && req.query.pass) {
|
||||||
|
db.get("select * from `user` where username=?", [req.query.target], function(err, row) {
|
||||||
|
if (err)
|
||||||
|
console.log(err)
|
||||||
|
else
|
||||||
|
if (row) {
|
||||||
|
var salt = randomString(16, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
||||||
|
var password = md5(req.query.pass + salt)
|
||||||
|
db.run("update `user` set password = ?,salt = ?, verified = 0 where username=?", [password, salt, req.query.target], function(err) {
|
||||||
|
if (err)
|
||||||
|
console.log(err)
|
||||||
|
else
|
||||||
|
res.send('1')
|
||||||
|
})
|
||||||
|
} else
|
||||||
|
res.send('2')
|
||||||
|
})
|
||||||
|
} else
|
||||||
|
res.send('2')
|
||||||
|
})
|
||||||
|
|
||||||
|
app.get('/deletef', function(req, res) {
|
||||||
|
if (req.query.target) {
|
||||||
|
db.get("delete from `user` where username=?", [req.query.target], function(err, row) {
|
||||||
|
if (err)
|
||||||
|
console.log(err)
|
||||||
|
else
|
||||||
|
res.send('1')
|
||||||
|
})
|
||||||
|
} else
|
||||||
|
res.send('2')
|
||||||
|
})
|
||||||
|
|
||||||
app.get('/setProtect', function(req, res) {
|
app.get('/setProtect', function(req, res) {
|
||||||
if (req.session.userName && req.query.question && req.query.answer) {
|
if (req.session.userName && req.query.question && req.query.answer) {
|
||||||
db.run("update `user` set question=? , answer=? , verified=1 where username=?", [req.query.question, req.query.answer, req.session.userName], function(err) {
|
db.run("update `user` set question=? , answer=? , verified=1 where username=?", [req.query.question, req.query.answer, req.session.userName], function(err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user