mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 02:54:15 +00:00
improve ws handling & ws authentification
This commit is contained in:
parent
966bbdf419
commit
af52c21a34
@ -3,6 +3,49 @@ import config from "config"
|
|||||||
import { Bridge } from "linebridge/dist/client"
|
import { Bridge } from "linebridge/dist/client"
|
||||||
import { Session } from "models"
|
import { Session } from "models"
|
||||||
|
|
||||||
|
function generateWSFunctionHandler(socket, type = "listen") {
|
||||||
|
if (!socket) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return (to, fn) => {
|
||||||
|
if (typeof to === "undefined") {
|
||||||
|
console.error("handleWSListener: to must be defined")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (typeof fn !== "function") {
|
||||||
|
console.error("handleWSListener: fn must be function")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
let ns = "main"
|
||||||
|
let event = null
|
||||||
|
|
||||||
|
if (typeof to === "string") {
|
||||||
|
event = to
|
||||||
|
} else if (typeof to === "object") {
|
||||||
|
ns = to.ns
|
||||||
|
event = to.event
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case "listen": {
|
||||||
|
return socket.sockets[ns].on(event, async (...context) => {
|
||||||
|
return await fn(...context)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
case "unlisten": {
|
||||||
|
return socket.sockets[ns].removeListener(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export default class ApiCore extends Core {
|
export default class ApiCore extends Core {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props)
|
super(props)
|
||||||
@ -190,6 +233,7 @@ export default class ApiCore extends Core {
|
|||||||
|
|
||||||
mainWSSocket.on("connect", () => {
|
mainWSSocket.on("connect", () => {
|
||||||
this.ctx.eventBus.emit(`api.ws.main.connect`)
|
this.ctx.eventBus.emit(`api.ws.main.connect`)
|
||||||
|
this.autenticateWS(mainWSSocket)
|
||||||
})
|
})
|
||||||
|
|
||||||
mainWSSocket.on("disconnect", (...context) => {
|
mainWSSocket.on("disconnect", (...context) => {
|
||||||
@ -201,62 +245,20 @@ export default class ApiCore extends Core {
|
|||||||
})
|
})
|
||||||
|
|
||||||
// generate functions
|
// generate functions
|
||||||
bridge.listenEvent = this.generateMainWSEventListener(bridge.wsInterface)
|
bridge.listenEvent = generateWSFunctionHandler(bridge.wsInterface, "listen")
|
||||||
bridge.unlistenEvent = this.generateMainWSEventUnlistener(bridge.wsInterface)
|
bridge.unlistenEvent = generateWSFunctionHandler(bridge.wsInterface, "unlisten")
|
||||||
|
|
||||||
// return bridge
|
// return bridge
|
||||||
return bridge
|
return bridge
|
||||||
}
|
}
|
||||||
|
|
||||||
generateMainWSEventListener(obj) {
|
autenticateWS = async (socket) => {
|
||||||
return (to, fn) => {
|
const token = await Session.token
|
||||||
if (typeof to === "undefined") {
|
|
||||||
console.error("handleWSListener: to must be defined")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (typeof fn !== "function") {
|
|
||||||
console.error("handleWSListener: fn must be function")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
let ns = "main"
|
if (token) {
|
||||||
let event = null
|
socket.emit("authenticate", {
|
||||||
|
token,
|
||||||
if (typeof to === "string") {
|
|
||||||
event = to
|
|
||||||
} else if (typeof to === "object") {
|
|
||||||
ns = to.ns
|
|
||||||
event = to.event
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj.sockets[ns].on(event, async (...context) => {
|
|
||||||
return await fn(...context)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generateMainWSEventUnlistener(obj) {
|
|
||||||
return (to, fn) => {
|
|
||||||
if (typeof to === "undefined") {
|
|
||||||
console.error("handleWSListener: to must be defined")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if (typeof fn !== "function") {
|
|
||||||
console.error("handleWSListener: fn must be function")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
let ns = "main"
|
|
||||||
let event = null
|
|
||||||
|
|
||||||
if (typeof to === "string") {
|
|
||||||
event = to
|
|
||||||
} else if (typeof to === "object") {
|
|
||||||
ns = to.ns
|
|
||||||
event = to.event
|
|
||||||
}
|
|
||||||
|
|
||||||
return obj.sockets[ns].removeListener(event, fn)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user