deepstream.io-pipeline
v1.0.1
Published
[![NPM version][npm-image]][npm-url]
Downloads
2
Readme
deepstream.io-pipeline
A PermissionHandler pipeline for deepstream.io
Table of contents
Install
npm i -S deepstream.io-pipeline
Basic 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 PermissionHandler
Usage (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 PermissionHandler
API
addPipelineStep(step)
- Arguments:
- step -
Object
orArray
of objects withisValidUser
(etc)-methods available.
- step -
License
MIT © Rabalder Media