deepstream.io-pipeline v1.0.1
deepstream.io-pipeline
A PermissionHandler pipeline for deepstream.io
Table of contents
Install
npm i -S deepstream.io-pipelineBasic info
deepstream.io-pipeline provides a PermissionHandler pipeline for deepstream.io, allowing you to add multiple strategies that are isolated from eachother but will run in a non-blocking sequence. The sequence will run in the same order you added each strategy with the addPipelineStep method. So if you added a strategy called JWTStrategy first, that strategy will be "tested" first on each login attempt.
The API is compatible with deepstreams' PermissionHandler API, and to add the pipeline to your current codebase is as trivial as copy-pasting.
If none of the steps in the pipeline calls the callback in isValidUser without errors, the error from the last step in the pipeline is returned to the user. This basically means that the user autenticating either has incorrect credentials or tries to authenticate with data that is unknown to your strategies/steps.
Usage (ES2015)
import DeepstreamServer from 'deepstream.io'
import Pipeline from 'deepstream.io-pipeline'
class JWTStrategy {
isValidUser (connectionDetails, authData, callback) {
if (authData.token === 'sometoken') {
let user = this.getUserFromDBSomehow()
callback(null, user)
} else {
callback('invalid token')
}
}
// All users authenticated via the JWTStrategy will use
// this canPerformAction method, isolated from the other
// strategies you may have added to the pipeline.
canPerformAction (username, message, callback) {
callback(null, true)
}
// Same as above comment
onClientDisconnect (username) {}
}
const permissionHandler = new Pipeline()
permissionHandler
.addPipelineStep({
isValidUser (connectionDetails, authData, callback) {
if (!authData.username) callback(null, 'guest')
},
canPerformAction (guest, message, callback) {
callback(null, true)
}
})
.addPipelineStep(new JWTStrategy())
.addPipelineStep(...)
const server = new DeepstreamServer()
server.set('PermissionHandler', permissionHandler) // Set the pipeline as the PermissionHandlerUsage (ES5)
var DeepstreamServer = require('deepstream.io')
var Pipeline = require('deepstream.io-pipeline').default
function JWTStrategy() {}
JWTStrategy.prototype.isValidUser = function (connectionDetails, authData, callback) {
if (authData.token === 'sometoken') {
let user = this.getUserFromDBSomehow()
callback(null, user)
} else {
callback('invalid token')
}
}
// All users authenticated via the JWTStrategy will use
// this canPerformAction method, isolated from the other
// strategies you may have added to the pipeline.
JWTStrategy.prototype.canPerformAction = function (username, message, callback) {
callback(null, true)
}
// Same as above comment
JWTStrategy.prototype.onClientDisconnect = function (username) {}
var permissionHandler = new Pipeline()
permissionHandler
.addPipelineStep({
isValidUser: function (connectionDetails, authData, callback) {
if (!authData.username) callback(null, 'guest')
},
canPerformAction: function (guest, message, callback) {
callback(null, true)
}
})
.addPipelineStep(new JWTStrategy())
.addPipelineStep(...)
var server = new DeepstreamServer()
server.set('PermissionHandler', permissionHandler) // Set the pipeline as the PermissionHandlerAPI
addPipelineStep(step)
- Arguments:
- step -
ObjectorArrayof objects withisValidUser(etc)-methods available.
- step -
License
MIT © Rabalder Media