icecast-auth
v0.0.1
Published
Icecast command authenticator interface for nodejs.
Downloads
1
Maintainers
Readme
Quickstart
Package uses listener authentication mechanism to provide handy interface for collecting detailed connection data and performing following actions with listeners:
- Accept connection
- Accept & move listener to another mounpoint
- Decline connection
- Require credentials
- Redirect to given url
To start run npm install icecast-auth
command, configure icecast to enable listener authentication and create executable file with following content. It will log listener's information & accept connections:
#!/usr/bin/nodejs
var fs = require('fs');
var AuthHandler = require('icecast-auth');
var handler = new AuthHandler();
handler.on('connection', function(data) {
// Log data somewhere
fs.appendFileSync('/tmp/icecast-auth.log', JSON.stringify(data, null, ' '));
// Accept connection
handler.accept();
});
Events
connection
Is emitted when data parsing is finished (received empty line from icecast). Provides following parameters:
Parameter | Type | Description
-------------|--------|------------
mountpoint
| String | Requested mount name
user
| String | Basic HTTP auth provided username
pass
| String | Basic HTTP auth povided password
ip
| String | Listener's ip address
agent
| String | Listener's user agent
referer
| String | Url, where listener came from
Methods
accept
Accepts listener connection. Allows to specify mount, where user should be moved instead of requested one (icecast internal redirect will be used, HTTP redirect is not performed in this case).
Parameter | Type | Required | Description
----------|--------|----------|------------
mount
| String | No | Mount, where user should be moved
// Accept user to requested mount
handler.on('connection', function(data) {
handler.accept();
});
// Accept user to another mount
handler.on('connection', function(data) {
handler.accept('/other-mount');
});
requireCredentials
Requires listener to perform basic HTTP authentication (401 HTTP request).
// Only users with "user" login and "secret" password will be allowed to stream
handler.on('connection', function(data) {
if (data.user !== 'user' && password !== 'secret') {
handler.requireCredentials();
} else {
handler.accept();
}
});
redirect
Performs HTTP redirect to specified url.
Parameter | Type | Required | Description
----------|--------|----------|------------
url
| String | Yes | Url, where listener should be redirected
handler.on('connection', function(data) {
handler.redirect('http://example.com/');
});
decline
Declines listener with 403 HTTP code. Custom message can be specified.
Parameter | Type | Required | Description
----------|--------|----------|------------
message
| String | No | Message, that will be sent to user, defaults to Forbidden
handler.on('connection', function(data) {
handler.decline('You shall not pass!');
});
Icecast configuration
To enable icecast listener command-script authentication it is necessary to add following code in mount
section for required mounts in your icecast configuration file:
<authentication type="command">
<option name="listener_add" value="/path/to/your/script.js"/>
<option name="handlers" value="1"/>
</authentication>
It is also possible to add authentication handler using wildcards, but there is a trick: by default icecast executes authentication handler for all requests. To use authentication handler only for mountpoints use following snippet:
<mount>
<mount-name>/*.xml</mount-name>
</mount>
<mount>
<mount-name>/*.xsl</mount-name>
</mount>
<mount>
<mount-name>/*.html</mount-name>
</mount>
<mount>
<mount-name>/*.css</mount-name>
</mount>
<mount>
<mount-name>/*.jpg</mount-name>
</mount>
<mount>
<mount-name>/*.png</mount-name>
</mount>
<mount>
<mount-name>/*.ico</mount-name>
</mount>
<mount>
<mount-name>/*.m3u</mount-name>
</mount>
<mount>
<mount-name>/*</mount-name>
<authentication type="command">
<option name="listener_add" value="/path/to/your/script.js"/>
<option name="handlers" value="1"/>
</authentication>
</mount>