Primer commit de los tres flujos: Raspipeso, Servidor y Gestor de semaforos
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* Template Socket.IO Connection Middleware for uibuilder.
|
||||
* UPDATED: 2022-04-01
|
||||
*
|
||||
* NOTES & WARNINGS:
|
||||
* 1) This function is only called ONCE - when a new client connects. So any authentication/security processing is limited
|
||||
* because you cannot use this to, for example, timeout/extend a session without further server processing of incoming messages.
|
||||
* However, see the sioUse.js and sioMsgOut.js middlewares for per-msg handling.
|
||||
* 2) Failing to either return or call `next()` will mean that your clients will never connect.
|
||||
* 3) An error in this function will probably cause Node-RED to fail to start at all.
|
||||
* 4) You have to restart Node-RED if you change this file.
|
||||
* 5) To use for authentication/authorisation with Express and sio connection middleware, create a common node.js module.
|
||||
*
|
||||
* Allows custom processing for authentication, session management, connection validation, logging, rate limiting, etc.
|
||||
*
|
||||
* see also: uibRoot/.config/sioUse.js & sioMsgOut.js
|
||||
* https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html#websocket-implementation-hints
|
||||
*
|
||||
* @param {*} socket Socket.IO socket object
|
||||
* @param {function} next The callback to hand off to the next middleware
|
||||
*/
|
||||
function sioMw(socket, next) {
|
||||
// Some SIO related info that might be useful in security checks
|
||||
console.log('== [sioMiddleware.js] ====================')
|
||||
console.log('New client connected to Namespace')
|
||||
console.log('--socket.request.connection.remoteAddress--', socket.request.connection.remoteAddress)
|
||||
console.log('--socket id--', socket.id)
|
||||
// Added by uibuilder when Namespace is created by uibuilder node instance - Note also that socket.nsp.log can be used to output to the Node-RED log
|
||||
console.log('--socket namespace metadata (server)--', {
|
||||
name: socket.nsp.name,
|
||||
url: socket.nsp.url,
|
||||
nodeId: socket.nsp.nodeId,
|
||||
useSecurity: socket.nsp.useSecurity,
|
||||
})
|
||||
//console.log('--socket handshake--', socket.handshake)
|
||||
//console.log('--socket properties--', Object.keys(socket))
|
||||
// Show the client id (set by uibuilder ExpressJS middleware)
|
||||
console.log('--client id handshake.auth--', socket.handshake.auth.clientId)
|
||||
console.log('--client id in custom header (polling only)--', socket.handshake.headers['x-clientid'])
|
||||
console.log('==========================================\n ')
|
||||
|
||||
// Simplistic auth example
|
||||
let auth = true
|
||||
if (auth !== true) {
|
||||
socket.nsp.log.error(`[uibuilder:sioMiddleware.js] - Authentication error, client disconnected - ID: ${socket.id}`)
|
||||
return next (new Error(`[uibuilder:sioMiddleware.js] - Authentication error, client disconnected - ID: ${socket.id}` ))
|
||||
}
|
||||
|
||||
return next()
|
||||
|
||||
} // Remember to end with a `next()` statement or nothing will work.
|
||||
|
||||
module.exports = sioMw
|
||||
Reference in New Issue
Block a user