Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/linuxwolf/sazzle
The SASL library with *PIZZAZZ*!
https://github.com/linuxwolf/sazzle
Last synced: about 2 months ago
JSON representation
The SASL library with *PIZZAZZ*!
- Host: GitHub
- URL: https://github.com/linuxwolf/sazzle
- Owner: linuxwolf
- License: other
- Created: 2013-01-05T01:58:37.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2014-12-04T16:27:25.000Z (about 10 years ago)
- Last Synced: 2024-11-03T21:06:02.370Z (about 2 months ago)
- Language: JavaScript
- Size: 841 KB
- Stars: 3
- Watchers: 4
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SAZZLE - The SASL library with *PIZZAZZ*! #
**SAZZLE** is a pure JavaScript library for the Simple Authentication and Security Layer ([SASL](http://tools.ietf.org/html/rfc4422)). The goal is to provide a simple promised-based framework for processing SASL challenges and responses.
This library includes built-in support for [PLAIN](https://tools.ietf.org/html/rfc4616) and [SCRAM-SHA1](http://tools.ietf.org/html/rfc5802), while additional (or alternative) mechanisms can be added as needed.
This software is liecensed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
## Installation ##
To install the current stable release:
npm install sazzle
To install from sources:
git clone [email protected]:linuxwolf/sazzle.git
npm install ./sazzle## Usage ##
TL;DR -- ficticious client version:
var sazzle = require("sazzle");
// ... once the server's mechanism list is received
// create a SASL session based on the intersection of
// server-offered and client-enabled mechanisms ...
var ssesssion = sazzle.client.create(mechlist, {
username:"bilbo.baggins",
password:"Th3r3 & 84CK Aga!n"
});// call step() to get started ...
ssession.step().then(function(output) {
// NOTE: output is a Buffer
socket.send(output);
});
var onSASL = function(input) {
// call step() to keep going, until completed!
ssession.step(input).then(function(output) {
if (output) {
socket.send(outupt);
}
if (ssession.completed) {
// YAY! we're authenticated!
console.log("auth succeeded (username == %s; authzid == %s)",
ssession.properties.username,
ssession.properties.authzid);
socket.removeListener("data", onSASL);
// ... move on ...
}
}, function(err) {
// BOO! We've failed!
console.log("auth failed: %s", err.message);
// c'est la vie
});
};
socket.on("data", onSASL);TL;DR -- ficticious server version:
var sazzle = require("sazzle"),
q = require("q");/// ... once we've got something, tell the client the offered mechanisms
socket.send(new Buffer(sazzle.server.enabled.join(" ")));var ssession;
socket.once("data", function(input) {
// protocol-specific parse of input
// into mechanism name and initial data
ssession = sazzle.server.create(input.name, {
password: function(config, username) {
// lookup password, return in a promise (or directly)
return q.resolve(passwords[username]);
}
});// process client initial
ssession.step(input.data).then(function(output) {
socket.send(output);
function onSASL(output) {
ssession.step(input).then(function(output) {
if (output) {
socket.send(output);
}
if (ssession.completed) {
// YAY! we're authenticated!
console.log("auth succeeded (username == %s; authzid == %s)",
ssession.properties.username,
ssession.properties.authzid);
socket.removeListener("data", onSASL);
// ... move on ...
}
}, function(err) {
// BOO! We've failed!
console.log("auth failed: %s", err.message);
// c'est la vie
});
};
socket.on("data", onSASL);
});
});