mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
merge from local
This commit is contained in:
parent
5733503bc0
commit
359a1c9676
@ -1,14 +1,15 @@
|
|||||||
export default {
|
export default {
|
||||||
name: "authorizedServerTokens",
|
name: "ServerKeys",
|
||||||
collection: "authorizedServerTokens",
|
collection: "server_keys",
|
||||||
schema: {
|
schema: {
|
||||||
client_id: {
|
access_id: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
token: {
|
secret_token: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
|
select: false,
|
||||||
},
|
},
|
||||||
access: {
|
access: {
|
||||||
type: Array,
|
type: Array,
|
||||||
@ -20,7 +21,10 @@ export default {
|
|||||||
description: {
|
description: {
|
||||||
type: String,
|
type: String,
|
||||||
},
|
},
|
||||||
createdAt: {
|
owner_user_id: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
created_at: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: Date.now,
|
default: Date.now,
|
||||||
},
|
},
|
@ -380,6 +380,9 @@ export default class Gateway {
|
|||||||
async initialize() {
|
async initialize() {
|
||||||
onExit(this.onGatewayExit)
|
onExit(this.onGatewayExit)
|
||||||
|
|
||||||
|
process.stdout.setMaxListeners(50)
|
||||||
|
process.stderr.setMaxListeners(50)
|
||||||
|
|
||||||
this.services = await scanServices()
|
this.services = await scanServices()
|
||||||
this.proxy = new Proxy()
|
this.proxy = new Proxy()
|
||||||
this.ipcRouter = new IPCRouter()
|
this.ipcRouter = new IPCRouter()
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { authorizedServerTokens } from "../../db_models"
|
import { ServerKeys } from "../../db_models"
|
||||||
import SecureEntry from "../../classes/SecureEntry"
|
|
||||||
import AuthToken from "../../classes/AuthToken"
|
import AuthToken from "../../classes/AuthToken"
|
||||||
|
|
||||||
export default async (req, res) => {
|
export default async (req, res) => {
|
||||||
@ -42,20 +41,21 @@ export default async (req, res) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
case "Server": {
|
case "Server": {
|
||||||
const [client_id, token] = tokenAuthHeader[1].split(":")
|
const [access_id, secret_token] = tokenAuthHeader[1].split(":")
|
||||||
|
|
||||||
if (client_id === "undefined" || token === "undefined") {
|
if (access_id === "undefined" || secret_token === "undefined") {
|
||||||
return reject({
|
return reject({
|
||||||
error: "Invalid server token"
|
error: "Invalid server token"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const secureEntries = new SecureEntry(authorizedServerTokens)
|
const serverTokenEntry = await ServerKeys.findOne({
|
||||||
|
access_id,
|
||||||
const serverTokenEntry = await secureEntries.get(client_id, undefined, {
|
|
||||||
keyName: "client_id",
|
|
||||||
valueName: "token",
|
|
||||||
})
|
})
|
||||||
|
.select("+secret_token")
|
||||||
|
.catch((err) => {
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
|
||||||
if (!serverTokenEntry) {
|
if (!serverTokenEntry) {
|
||||||
return reject({
|
return reject({
|
||||||
@ -63,16 +63,22 @@ export default async (req, res) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serverTokenEntry !== token) {
|
if (serverTokenEntry.secret_token !== secret_token) {
|
||||||
return reject({
|
return reject({
|
||||||
error: "Missmatching server token"
|
error: "Missmatching secret_token"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
req.user = {
|
req.auth = {
|
||||||
__server: true,
|
server: true,
|
||||||
_id: client_id,
|
token: tokenAuthHeader,
|
||||||
roles: ["server"],
|
decoded: null,
|
||||||
|
session: {
|
||||||
|
__server_key: true,
|
||||||
|
user_id: serverTokenEntry.owner_user_id,
|
||||||
|
created_at: serverTokenEntry.created_at,
|
||||||
|
},
|
||||||
|
user: async () => await User.findOne({ _id: serverTokenEntry.owner_user_id }),
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
import { ServerKeys } from "@db_models"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
middlewares: ["withAuthentication"],
|
||||||
|
fn: async (req, res) => {
|
||||||
|
const { access_id } = req.params
|
||||||
|
const { user_id } = req.auth.session
|
||||||
|
|
||||||
|
const serverKey = await ServerKeys.findOne({
|
||||||
|
access_id: access_id,
|
||||||
|
owner_user_id: user_id
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!serverKey) {
|
||||||
|
throw new OperationError(404, "Server key not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
await ServerKeys.findOneAndDelete({
|
||||||
|
access_id: access_id,
|
||||||
|
owner_user_id: user_id,
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
deleted: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
import { ServerKeys } from "@db_models"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
middlewares: ["withAuthentication"],
|
||||||
|
fn: async (req, res) => {
|
||||||
|
const { access_id } = req.params
|
||||||
|
const { user_id } = req.auth.session
|
||||||
|
|
||||||
|
let serverKey = await ServerKeys.findOne({
|
||||||
|
access_id: access_id,
|
||||||
|
owner_user_id: user_id
|
||||||
|
})
|
||||||
|
.select("+secret_token")
|
||||||
|
|
||||||
|
if (!serverKey) {
|
||||||
|
throw new OperationError(404, "Server key not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
serverKey.secret_token = nanoid(36)
|
||||||
|
|
||||||
|
await serverKey.save()
|
||||||
|
|
||||||
|
return serverKey
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
import { ServerKeys } from "@db_models"
|
||||||
|
import crypto from "crypto"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
middlewares: ["withAuthentication"],
|
||||||
|
fn: async (req, res) => {
|
||||||
|
const user_id = req.auth.session.user_id
|
||||||
|
|
||||||
|
const access_id = crypto.randomUUID()
|
||||||
|
const secret = nanoid(36)
|
||||||
|
|
||||||
|
const serverKey = new ServerKeys({
|
||||||
|
name: req.body.name,
|
||||||
|
access_id: access_id,
|
||||||
|
secret_token: secret,
|
||||||
|
access: ["readWrite"],
|
||||||
|
owner_user_id: user_id,
|
||||||
|
created_at: new Date().getTime(),
|
||||||
|
})
|
||||||
|
|
||||||
|
await serverKey.save()
|
||||||
|
|
||||||
|
return serverKey
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,12 @@
|
|||||||
|
import { ServerKeys } from "@db_models"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
middlewares: ["withAuthentication"],
|
middlewares: ["withAuthentication"],
|
||||||
fn: async (req, res) => {
|
fn: async (req, res) => {
|
||||||
|
const user_id = req.auth.session.user_id
|
||||||
|
|
||||||
|
return await ServerKeys.find({
|
||||||
|
owner_user_id: user_id
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -55,6 +55,7 @@ export default async (payload = {}) => {
|
|||||||
global.websocket.io.of("/").emit(`post.like.update`, eventData)
|
global.websocket.io.of("/").emit(`post.like.update`, eventData)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
post_id: post_id,
|
||||||
liked: to,
|
liked: to,
|
||||||
count: count
|
count: count
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Post, PostSave } from "@db_models"
|
import { Post, PostSave } from "@db_models"
|
||||||
|
|
||||||
export default async (payload = {}) => {
|
export default async (payload = {}) => {
|
||||||
let { post_id, user_id } = payload
|
let { post_id, user_id, to } = payload
|
||||||
|
|
||||||
if (!post_id || !user_id) {
|
if (!post_id || !user_id) {
|
||||||
throw new OperationError(400, "Missing post_id or user_id")
|
throw new OperationError(400, "Missing post_id or user_id")
|
||||||
@ -16,26 +16,36 @@ export default async (payload = {}) => {
|
|||||||
throw new OperationError(404, "Post not found")
|
throw new OperationError(404, "Post not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
let post = await PostSave.findOne({ post_id, user_id })
|
let saveObj = await PostSave.findOne({ post_id, user_id })
|
||||||
|
|
||||||
if (post) {
|
if (typeof to === "undefined") {
|
||||||
await PostSave.findByIdAndDelete(post._id).catch((err) => {
|
if (saveObj) {
|
||||||
throw new OperationError(500, `An error has occurred: ${err.message}`)
|
to = false
|
||||||
})
|
} else {
|
||||||
|
to = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
post = null
|
if (to) {
|
||||||
} else {
|
saveObj = new PostSave({
|
||||||
post = new PostSave({
|
|
||||||
post_id,
|
post_id,
|
||||||
user_id,
|
user_id,
|
||||||
})
|
})
|
||||||
|
|
||||||
await post.save().catch((err) => {
|
await saveObj.save()
|
||||||
throw new OperationError(500, `An error has occurred: ${err.message}`)
|
} else {
|
||||||
})
|
await PostSave.findByIdAndDelete(saveObj._id)
|
||||||
|
|
||||||
|
saveObj = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const count = await PostSave.countDocuments({
|
||||||
|
post_id,
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
saved: !!post,
|
post_id: post_id,
|
||||||
|
saved: !!saveObj,
|
||||||
|
count: count,
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,7 +5,8 @@ export default {
|
|||||||
fn: async (req, res) => {
|
fn: async (req, res) => {
|
||||||
const result = await Posts.toggleLike({
|
const result = await Posts.toggleLike({
|
||||||
post_id: req.params.post_id,
|
post_id: req.params.post_id,
|
||||||
user_id: req.auth.session.user_id
|
user_id: req.auth.session.user_id,
|
||||||
|
to: req.body?.to,
|
||||||
})
|
})
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -5,7 +5,8 @@ export default {
|
|||||||
fn: async (req, res) => {
|
fn: async (req, res) => {
|
||||||
const result = await Posts.toggleSave({
|
const result = await Posts.toggleSave({
|
||||||
post_id: req.params.post_id,
|
post_id: req.params.post_id,
|
||||||
user_id: req.auth.session.user_id
|
user_id: req.auth.session.user_id,
|
||||||
|
to: req.body?.to,
|
||||||
})
|
})
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
Loading…
x
Reference in New Issue
Block a user