mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 13:57:10 +00:00
fix: 修复喵崽多适配器工具箱登录;移除crypto依赖
This commit is contained in:
parent
2b19302b87
commit
46d88c2669
5 changed files with 216 additions and 255 deletions
|
|
@ -2,170 +2,182 @@ import { UserInfo, AddUser } from './user_data.js'
|
|||
import { randomString, getUserData, getMasterQQ, getUin } from '../../utils/common.js'
|
||||
import fs from 'fs'
|
||||
|
||||
async function User(fastify, options) {
|
||||
// 登录
|
||||
fastify.post('/login', async (request, reply) => {
|
||||
const body = request.body || {}
|
||||
let guobaLoginService
|
||||
let guobaAPI = ''
|
||||
try {
|
||||
let { LoginService } = await import('../../../Guoba-Plugin/server/service/both/LoginService.js')
|
||||
let { getAllWebAddress } = await import('../../../Guoba-Plugin/utils/common.js')
|
||||
guobaLoginService = new LoginService()
|
||||
guobaAPI = await getAllWebAddress()
|
||||
}
|
||||
catch (err) {
|
||||
console.error(err)
|
||||
guobaLoginService = {
|
||||
signToken: () => {return null}
|
||||
}
|
||||
}
|
||||
if (body.qq && body.passwd) {
|
||||
const token = randomString(32)
|
||||
if (body.qq == getUin() && await redis.get('CHATGPT:ADMIN_PASSWD') == body.passwd) {
|
||||
const guobaToken = await guobaLoginService.signToken(body.qq)
|
||||
AddUser({ user: body.qq, token: token, autho: 'admin' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'admin', token: token, guobaToken: guobaToken, guoba: guobaAPI })
|
||||
} else {
|
||||
const user = await getUserData(body.qq)
|
||||
if (user.passwd != '' && user.passwd === body.passwd) {
|
||||
AddUser({ user: body.qq, token: token, autho: 'user' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'user', token: token })
|
||||
} else {
|
||||
reply.send({ login: false, err: `用户名密码错误,如果忘记密码请私聊机器人输入 ${body.qq == getUin() ? '#修改管理密码' : '#修改用户密码'} 进行修改` })
|
||||
}
|
||||
}
|
||||
} else if (body.otp) {
|
||||
const token = randomString(32)
|
||||
const opt = await redis.get(`CHATGPT:SERVER_QUICK`)
|
||||
if (opt && body.otp == opt) {
|
||||
const guobaToken = await guobaLoginService.signToken(getUin())
|
||||
AddUser({ user: getUin(), token: token, autho: 'admin' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'admin', token: token, user: getUin(), guobaToken: guobaToken, guoba: guobaAPI })
|
||||
} else {
|
||||
reply.send({ login: false, err: `快捷登录代码错误,请检查后重试` })
|
||||
}
|
||||
} else {
|
||||
reply.send({ login: false, err: '未输入用户名或密码' })
|
||||
}
|
||||
return reply
|
||||
})
|
||||
// 快速登录
|
||||
fastify.post('/quick', async (request, reply) => {
|
||||
const otp = randomString(6)
|
||||
await redis.set(
|
||||
`CHATGPT:SERVER_QUICK`,
|
||||
otp,
|
||||
{ EX: 60000 }
|
||||
)
|
||||
const master = (await getMasterQQ())[0]
|
||||
if (Array.isArray(Bot.uin)) {
|
||||
Bot.pickFriend(master).sendMsg(`收到工具箱快捷登录请求,1分钟内有效:${otp}`)
|
||||
} else {
|
||||
Bot.sendPrivateMsg(master, `收到工具箱快捷登录请求,1分钟内有效:${otp}`, false)
|
||||
}
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
})
|
||||
// 检查用户是否存在
|
||||
fastify.post('/verify', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || token === 'unknown') {
|
||||
reply.send({
|
||||
verify: false,
|
||||
})
|
||||
return
|
||||
}
|
||||
reply.send({
|
||||
verify: true,
|
||||
user: user.user,
|
||||
autho: user.autho,
|
||||
version: 10016,
|
||||
})
|
||||
return reply
|
||||
})
|
||||
// 获取用户数据
|
||||
fastify.post('/userData', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
let user = UserInfo(token)
|
||||
if (!user) user = { user: '' }
|
||||
const userData = await getUserData(user.user)
|
||||
reply.send({
|
||||
chat: userData.chat || [],
|
||||
mode: userData.mode || '',
|
||||
cast: userData.cast || {
|
||||
api: '', //API设定
|
||||
bing: '', //必应设定
|
||||
bing_resource: '', //必应扩展资料
|
||||
slack: '', //Slack设定
|
||||
}
|
||||
})
|
||||
return reply
|
||||
})
|
||||
// 删除用户
|
||||
fastify.post('/deleteUser', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || user === 'unknown') {
|
||||
reply.send({ state: false, error: '无效token' })
|
||||
return
|
||||
}
|
||||
const filepath = `resources/ChatGPTCache/user/${user.user}.json`
|
||||
fs.unlinkSync(filepath)
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
})
|
||||
// 修改密码
|
||||
fastify.post('/changePassword', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || user === 'unknown') {
|
||||
reply.send({ state: false, error: '无效的用户信息' })
|
||||
return
|
||||
}
|
||||
const userData = await getUserData(user.user)
|
||||
const body = request.body || {}
|
||||
if (!body.newPasswd) {
|
||||
reply.send({ state: false, error: '无效参数' })
|
||||
return
|
||||
}
|
||||
if (body.passwd && body.passwd != userData.passwd) {
|
||||
reply.send({ state: false, error: '原始密码错误' })
|
||||
return
|
||||
}
|
||||
if (user.autho === 'admin') {
|
||||
await redis.set('CHATGPT:ADMIN_PASSWD', body.newPasswd)
|
||||
} else if (user.autho === 'user') {
|
||||
const dir = 'resources/ChatGPTCache/user'
|
||||
const filename = `${user.user}.json`
|
||||
const filepath = path.join(dir, filename)
|
||||
fs.mkdirSync(dir, { recursive: true })
|
||||
if (fs.existsSync(filepath)) {
|
||||
fs.readFile(filepath, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
return
|
||||
}
|
||||
const config = JSON.parse(data)
|
||||
config.passwd = body.newPasswd
|
||||
fs.writeFile(filepath, JSON.stringify(config), 'utf8', (err) => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
reply.send({ state: false, error: '错误的用户数据' })
|
||||
return
|
||||
}
|
||||
}
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
function getBots () {
|
||||
if (Bot.uin === 88888) {
|
||||
// 找适配器
|
||||
let adapters = Bot.adapter
|
||||
return adapters?.map(uin => Bot[uin])
|
||||
} else if (Bot.adapter && Bot.adapter.length > 0) {
|
||||
let bots = [Bot]
|
||||
Bot.adapter.forEach(uin => {
|
||||
bots.push(Bot[uin])
|
||||
})
|
||||
return bots
|
||||
}
|
||||
}
|
||||
|
||||
export default User
|
||||
async function User (fastify, options) {
|
||||
// 登录
|
||||
fastify.post('/login', async (request, reply) => {
|
||||
const body = request.body || {}
|
||||
let guobaLoginService
|
||||
let guobaAPI = ''
|
||||
try {
|
||||
let { LoginService } = await import('../../../Guoba-Plugin/server/service/both/LoginService.js')
|
||||
let { getAllWebAddress } = await import('../../../Guoba-Plugin/utils/common.js')
|
||||
guobaLoginService = new LoginService()
|
||||
guobaAPI = await getAllWebAddress()
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
guobaLoginService = {
|
||||
signToken: () => { return null }
|
||||
}
|
||||
}
|
||||
if (body.qq && body.passwd) {
|
||||
const token = randomString(32)
|
||||
if (body.qq == getUin() && await redis.get('CHATGPT:ADMIN_PASSWD') == body.passwd) {
|
||||
const guobaToken = await guobaLoginService.signToken(body.qq)
|
||||
AddUser({ user: body.qq, token, autho: 'admin' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'admin', token, guobaToken, guoba: guobaAPI })
|
||||
} else {
|
||||
const user = await getUserData(body.qq)
|
||||
if (user.passwd != '' && user.passwd === body.passwd) {
|
||||
AddUser({ user: body.qq, token, autho: 'user' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'user', token })
|
||||
} else {
|
||||
reply.send({ login: false, err: `用户名密码错误,如果忘记密码请私聊机器人输入 ${body.qq == getUin() ? '#修改管理密码' : '#修改用户密码'} 进行修改` })
|
||||
}
|
||||
}
|
||||
} else if (body.otp) {
|
||||
const token = randomString(32)
|
||||
const opt = await redis.get('CHATGPT:SERVER_QUICK')
|
||||
if (opt && body.otp == opt) {
|
||||
const guobaToken = await guobaLoginService.signToken(getUin())
|
||||
AddUser({ user: getUin(), token, autho: 'admin' })
|
||||
reply.setCookie('token', token, { path: '/' })
|
||||
reply.send({ login: true, autho: 'admin', token, user: getUin(), guobaToken, guoba: guobaAPI })
|
||||
} else {
|
||||
reply.send({ login: false, err: '快捷登录代码错误,请检查后重试' })
|
||||
}
|
||||
} else {
|
||||
reply.send({ login: false, err: '未输入用户名或密码' })
|
||||
}
|
||||
return reply
|
||||
})
|
||||
// 快速登录
|
||||
fastify.post('/quick', async (request, reply) => {
|
||||
const otp = randomString(6)
|
||||
await redis.set(
|
||||
'CHATGPT:SERVER_QUICK',
|
||||
otp,
|
||||
{ EX: 60000 }
|
||||
)
|
||||
const master = (await getMasterQQ())[0]
|
||||
let bots = getBots()
|
||||
for (let bot of bots) {
|
||||
bot.pickUser(master).sendMsg(`收到工具箱快捷登录请求,1分钟内有效:${otp}`)
|
||||
}
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
})
|
||||
// 检查用户是否存在
|
||||
fastify.post('/verify', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || token === 'unknown') {
|
||||
reply.send({
|
||||
verify: false
|
||||
})
|
||||
return
|
||||
}
|
||||
reply.send({
|
||||
verify: true,
|
||||
user: user.user,
|
||||
autho: user.autho,
|
||||
version: 10016
|
||||
})
|
||||
return reply
|
||||
})
|
||||
// 获取用户数据
|
||||
fastify.post('/userData', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
let user = UserInfo(token)
|
||||
if (!user) user = { user: '' }
|
||||
const userData = await getUserData(user.user)
|
||||
reply.send({
|
||||
chat: userData.chat || [],
|
||||
mode: userData.mode || '',
|
||||
cast: userData.cast || {
|
||||
api: '', // API设定
|
||||
bing: '', // 必应设定
|
||||
bing_resource: '', // 必应扩展资料
|
||||
slack: '' // Slack设定
|
||||
}
|
||||
})
|
||||
return reply
|
||||
})
|
||||
// 删除用户
|
||||
fastify.post('/deleteUser', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || user === 'unknown') {
|
||||
reply.send({ state: false, error: '无效token' })
|
||||
return
|
||||
}
|
||||
const filepath = `resources/ChatGPTCache/user/${user.user}.json`
|
||||
fs.unlinkSync(filepath)
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
})
|
||||
// 修改密码
|
||||
fastify.post('/changePassword', async (request, reply) => {
|
||||
const token = request.cookies.token || request.body?.token || 'unknown'
|
||||
const user = UserInfo(token)
|
||||
if (!user || user === 'unknown') {
|
||||
reply.send({ state: false, error: '无效的用户信息' })
|
||||
return
|
||||
}
|
||||
const userData = await getUserData(user.user)
|
||||
const body = request.body || {}
|
||||
if (!body.newPasswd) {
|
||||
reply.send({ state: false, error: '无效参数' })
|
||||
return
|
||||
}
|
||||
if (body.passwd && body.passwd != userData.passwd) {
|
||||
reply.send({ state: false, error: '原始密码错误' })
|
||||
return
|
||||
}
|
||||
if (user.autho === 'admin') {
|
||||
await redis.set('CHATGPT:ADMIN_PASSWD', body.newPasswd)
|
||||
} else if (user.autho === 'user') {
|
||||
const dir = 'resources/ChatGPTCache/user'
|
||||
const filename = `${user.user}.json`
|
||||
const filepath = path.join(dir, filename)
|
||||
fs.mkdirSync(dir, { recursive: true })
|
||||
if (fs.existsSync(filepath)) {
|
||||
fs.readFile(filepath, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
return
|
||||
}
|
||||
const config = JSON.parse(data)
|
||||
config.passwd = body.newPasswd
|
||||
fs.writeFile(filepath, JSON.stringify(config), 'utf8', (err) => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
reply.send({ state: false, error: '错误的用户数据' })
|
||||
return
|
||||
}
|
||||
}
|
||||
reply.send({ state: true })
|
||||
return reply
|
||||
})
|
||||
}
|
||||
|
||||
export default User
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue