From 210663123a9dc3fa20c905cabe84cf70536f3ec4 Mon Sep 17 00:00:00 2001
From: unknown <1371033826@qq.com>
Date: Sun, 2 Nov 2025 13:55:41 +0800
Subject: [PATCH] user-admin
---
ejs/manage.ejs | 51 ++++++++++++++++++-
js/lang.js | 2 +-
js/manage.js | 2 +-
mixio.js | 134 +++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 185 insertions(+), 4 deletions(-)
diff --git a/ejs/manage.ejs b/ejs/manage.ejs
index a52c894..f7e9352 100644
--- a/ejs/manage.ejs
+++ b/ejs/manage.ejs
@@ -174,7 +174,7 @@
-
+
@@ -188,7 +188,7 @@
|
消息量
|
-
+ |
执行操作
|
@@ -285,6 +285,53 @@
}
})
}
+ var resetPassword = function(userName){
+ if (!confirm(`确定要重置用户 ${userName} 的密码吗?新密码将设置为 "123456"`)) {
+ return;
+ }
+ const modald = showmodaltext("");
+ $.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("");
+ $.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())
setInterval(() => {
$("#time").html(new Date().toLocaleTimeString())
diff --git a/js/lang.js b/js/lang.js
index 4aaea13..778c12f 100644
--- a/js/lang.js
+++ b/js/lang.js
@@ -769,7 +769,7 @@ var arrLang = {
"ADMIN": "管理",
"BASICADMIN": "基础设置",
"USERADMIN": "批量注册",
- "DATAADMIN": "数据管理",
+ "DATAADMIN": "用户管理",
"UPEMAIL": "注册邮箱:",
"EMAIL": "placeholder$请输入电子邮箱地址",
"PASSWORD": "placeholder$请输入密码",
diff --git a/js/manage.js b/js/manage.js
index 07e11d2..960005b 100644
--- a/js/manage.js
+++ b/js/manage.js
@@ -2,7 +2,7 @@ $(function(){
$.getJSON("queryData",function(res){
for(var i = 0;i<=res.length-1;i = i+1)
{
- $("#tbody").append("| "+res[i]["username"]+" | "+res[i]["projects"]+" | "+res[i]["messages"]+" | "+ "清空消息"+" |
")
+ $("#tbody").append("| "+res[i]["username"]+" | "+res[i]["projects"]+" | "+res[i]["messages"]+" | "+ "清空消息 "+ "重置密码 "+"删除用户"+" |
")
}
datatable = $("#table").DataTable({
"order": [[ 2, "desc" ]],
diff --git a/mixio.js b/mixio.js
index a97e805..405ae94 100644
--- a/mixio.js
+++ b/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) {
if (!serverStatus) {
console.log("[INFO] Starting MixIO Server...")
@@ -1744,6 +1844,40 @@ var mixioServer = async function() {
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) {
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) {