mirror of
https://github.com/LingChair/LingChair-V0.git
synced 2025-12-07 17:45:49 +08:00
feat: 多标签页聊天(实验性)
This commit is contained in:
@@ -29,7 +29,7 @@ let apis = {
|
||||
// 账号文件结构: {uid: 10000, name: "GenShin", nick: "Impact", passwd: "SHA-256 + MD5"}
|
||||
// 注意: 密码在客户端也应该经过哈希处理(SHA256 + MD5)
|
||||
// @APi
|
||||
signUp: (name, passwd) => {
|
||||
signUp(name, passwd) {
|
||||
if (passwd == null || name == null)
|
||||
return { msg: "必须输入 账号和密码", code: -1 }
|
||||
|
||||
@@ -56,7 +56,7 @@ let apis = {
|
||||
// 登录账号: 账号, 密码 返回刷新令牌 失败返回 null 和原因
|
||||
// 注意: 密码在客户端应该经过哈希处理(SHA256 + MD5)
|
||||
// @API
|
||||
signIn: (name, passwd) => {
|
||||
signIn(name, passwd) {
|
||||
if (passwd == null || name == null)
|
||||
return { msg: "必须输入 账号和密码", code: -1 }
|
||||
|
||||
@@ -73,7 +73,7 @@ let apis = {
|
||||
// 注意: 密码在客户端也应该经过哈希处理(SHA256 + MD5)
|
||||
// 刷新令牌算法: 哈希(用户ID + 当前年 + 当前月 + 密码 + 盐)
|
||||
// 有效期: 一个月
|
||||
getRefreshToken: (name, passwd) => {
|
||||
getRefreshToken(name, passwd) {
|
||||
let d = new Date()
|
||||
let raw = name + d.getFullYear() + d.getMonth() + passwd + "LINGCHAIR-TEST-DEMO"
|
||||
return hash.sha256(raw) + hash.md5(raw)
|
||||
@@ -83,7 +83,7 @@ let apis = {
|
||||
// 注意: 密码在客户端也应该经过哈希处理(SHA256 + MD5)
|
||||
// 刷新令牌算法: 哈希(用户ID + 当前年 + 当前月 + 密码 + 盐)
|
||||
// 有效期: 一天
|
||||
getAccessTokenNonApi: (name, rt) => {
|
||||
getAccessTokenNonApi(name, rt) {
|
||||
if (!apis.checkRefreshToken(name, rt))
|
||||
return null
|
||||
let date = new Date().toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric' })
|
||||
@@ -94,25 +94,25 @@ let apis = {
|
||||
// 在密码被设置前已经被哈希过,不需要重复
|
||||
// 算法: (SHA256 + MD5)
|
||||
// 警告: 这是经过二次哈希的
|
||||
getPassWordHashed: (name) => {
|
||||
getPassWordHashed(name) {
|
||||
return hash.sha256(apis.getPassWordHashedRaw(name)) + hash.md5(apis.getPassWordHashedRaw(name))
|
||||
},
|
||||
|
||||
// 请勿与上面的混淆
|
||||
// 上面的是经过第二次哈希的
|
||||
getPassWordHashedRaw: (name) => {
|
||||
getPassWordHashedRaw(name) {
|
||||
return io.open(getUserPath(name) + "/user.json").readJson().passwd
|
||||
},
|
||||
|
||||
// 检测刷新令牌是否正确: 账号, 刷新令牌 返回布尔值
|
||||
// 密码在服务端经过哈希保存 不需要重复输入密码
|
||||
checkRefreshToken: (name, rt) => {
|
||||
checkRefreshToken(name, rt) {
|
||||
return apis.getRefreshToken(name, apis.getPassWordHashed(name)) === rt
|
||||
},
|
||||
|
||||
// 检测访问令牌是否正确: 账号, 访问令牌 返回布尔值
|
||||
// 密码在服务端经过哈希保存 不需要重复输入密码
|
||||
checkAccessToken: (name, at) => {
|
||||
checkAccessToken(name, at) {
|
||||
return apis.getAccessTokenNonApi(name, apis.getRefreshToken(name, apis.getPassWordHashed(name /* 就是你这个傻逼害得我找两年BUG */))) === at
|
||||
},
|
||||
|
||||
@@ -124,7 +124,7 @@ let apis = {
|
||||
// 有效期: 一天
|
||||
// 算法: SHA256(name) + MD5(rt + 盐)
|
||||
// @Api
|
||||
getAccessToken: (name, rt) => {
|
||||
getAccessToken(name, rt) {
|
||||
if (!apis.checkRefreshToken(name, rt))
|
||||
return { msg: "刷新令牌不正确!", code: -1 }
|
||||
|
||||
@@ -133,7 +133,7 @@ let apis = {
|
||||
|
||||
// 设置头像: 账号, 访问令牌, 头像数据 返回结果
|
||||
// @API
|
||||
setHeadImage: (name, at, head) => {
|
||||
setHeadImage(name, at, head) {
|
||||
if (!apis.checkAccessToken(name, at))
|
||||
return { msg: "访问令牌不正确!", code: -1 }
|
||||
|
||||
@@ -144,7 +144,7 @@ let apis = {
|
||||
|
||||
// 修改昵称
|
||||
// @APi
|
||||
setNick: (name, at, nick) => {
|
||||
setNick(name, at, nick) {
|
||||
if (!apis.checkAccessToken(name, at))
|
||||
return { msg: "访问令牌不正确!", code: -1 }
|
||||
|
||||
@@ -160,8 +160,8 @@ let apis = {
|
||||
return { msg: "成功", code: 0 }
|
||||
},
|
||||
|
||||
// 取联系人列表(好友): 账号, 访问令牌 返回好友列表
|
||||
getFriendsNonApi: (name, at) => {
|
||||
// 取联系人列表(好友): 账号 返回好友列表
|
||||
getFriendsNonApi(name) {
|
||||
let file = getUserPath(name) + "/friends.json"
|
||||
if (!io.exists(file))
|
||||
io.open(file, "w").writeJson({list: [name]}).close()
|
||||
@@ -169,8 +169,19 @@ let apis = {
|
||||
return io.open(file, "r").readJson().list
|
||||
},
|
||||
|
||||
// 加好友: 账号, 欲添加对象
|
||||
addFriendNonApi(name, target) {
|
||||
let file = getUserPath(name) + "/friends.json"
|
||||
if (!io.exists(file))
|
||||
io.open(file, "w").writeJson({list: [name]}).close()
|
||||
|
||||
let friends = io.open(file, "r").readJson()
|
||||
friends.list.push(target)
|
||||
io.open(file, "r").writeJson(friends).close()
|
||||
},
|
||||
|
||||
// 取用户昵称: 账号 返回昵称
|
||||
getNickNonApi: (name) => {
|
||||
getNickNonApi(name) {
|
||||
let file = getUserPath(name) + "/user.json"
|
||||
|
||||
return io.open(file, "r").readJson().nick
|
||||
@@ -178,18 +189,29 @@ let apis = {
|
||||
|
||||
// 取昵称: 账号 返回昵称
|
||||
// @API
|
||||
getNick: (name, at) => {
|
||||
getNick(name, at) {
|
||||
return { msg: "成功", code: 0, nick: apis.getNickNonApi(name)}
|
||||
},
|
||||
|
||||
// 取联系人列表(好友): 账号, 访问令牌 返回好友列表
|
||||
// @API
|
||||
getFriends: (name, at) => {
|
||||
getFriends(name, at) {
|
||||
if (!apis.checkAccessToken(name, at))
|
||||
return { msg: "访问令牌不正确!", code: -1 }
|
||||
|
||||
return { msg: "成功", code: 0, friends: apis.getFriendsNonApi(name, at)}
|
||||
},
|
||||
|
||||
// 加到好友列表: 账号, 欲加的好友, 访问令牌
|
||||
// @API
|
||||
addFriend(name, target, at) {
|
||||
if (!apis.checkAccessToken(name, at))
|
||||
return { msg: "访问令牌不正确!", code: -1 }
|
||||
|
||||
apis.addFriendNonApi(name, target, at)
|
||||
|
||||
return { msg: "成功", code: 0 }
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = apis
|
||||
|
||||
@@ -149,18 +149,17 @@ let api = {
|
||||
},
|
||||
|
||||
// 添加好友
|
||||
// {name: 账号, accessToken: 访问令牌} 返回 {friends: []}
|
||||
// WIP
|
||||
// {name: 账号, accessToken: 访问令牌}
|
||||
"user.addFriend": (a, cb) => {
|
||||
if (checkEmpty([a.name, a.accessToken]))
|
||||
if (checkEmpty([a.name, a.target, a.accessToken]))
|
||||
return cb({ msg: "参数缺失", code: -1 })
|
||||
|
||||
let { msg, code, friends } = users.getFriends(a.name, a.accessToken)
|
||||
let { msg, code } = users.addFriend(a.name, a.target, a.accessToken)
|
||||
|
||||
if (code !== 0)
|
||||
return cb({ msg: msg, code: code })
|
||||
|
||||
cb({ msg: msg, code: 0, data: { friends: friends } })
|
||||
cb({ msg: msg, code: 0 })
|
||||
},
|
||||
|
||||
"user.getNick": (a, cb) => {
|
||||
|
||||
Reference in New Issue
Block a user