From d11f777888ff7dc5ddc326baf6d2b26f287c8023 Mon Sep 17 00:00:00 2001 From: oddsock Date: Mon, 3 May 2004 15:00:18 +0000 Subject: [PATCH] much better documentation of listener authentication svn path=/icecast/trunk/icecast/; revision=6617 --- conf/icecast.xml.in | 5 ++++ doc/icecast2.hhc | 4 +++ doc/icecast2_listenerauth.html | 53 +++++++++++++++++++++++++++++++++ doc/index.html | 1 + doc/listener_auth1.jpg | Bin 0 -> 32628 bytes doc/listener_auth2.jpg | Bin 0 -> 30108 bytes doc/listener_auth3.jpg | Bin 0 -> 23185 bytes 7 files changed, 63 insertions(+) create mode 100755 doc/icecast2_listenerauth.html create mode 100644 doc/listener_auth1.jpg create mode 100644 doc/listener_auth2.jpg create mode 100644 doc/listener_auth3.jpg diff --git a/conf/icecast.xml.in b/conf/icecast.xml.in index 481c7ff2..2575542c 100644 --- a/conf/icecast.xml.in +++ b/conf/icecast.xml.in @@ -110,6 +110,11 @@ + + diff --git a/doc/icecast2.hhc b/doc/icecast2.hhc index 5c97e220..3f9618d3 100644 --- a/doc/icecast2.hhc +++ b/doc/icecast2.hhc @@ -41,6 +41,10 @@ +
  • + + +
  • diff --git a/doc/icecast2_listenerauth.html b/doc/icecast2_listenerauth.html new file mode 100755 index 00000000..25280622 --- /dev/null +++ b/doc/icecast2_listenerauth.html @@ -0,0 +1,53 @@ + +
    + +

    Icecast 2 Listener Authentication

    +
    +
    +
    +
    +

    Listener Authentication

    +

    Listener authentication is a feature of icecast which allows you to secure certain mountpoint so that in order to listen, a listener must provide a username and password. With this feature a simple pay-for-play operation can be setup. This section will show you the basics of setting up and maintaining this component.

    + +
    +
    +
    +

    HTPASSWD Listener Authentication

    +

    Config File Entries

    +

    In order to use listener authentication, you MUST configure a mount specific option. This means that you have to provide a <mount> section in the main icecast config file. The following is an example :

    +
    +    <mount>
    +        <mount-name>/example-complex.ogg</mount-name>
    +        <authentication type="htpasswd">
    +                <option name="filename" value="myauth"/>
    +        </authentication>
    +    </mount>
    +
    +

    To support listener authentication you MUST provide at a minimum <mount-name> and <authentication>. The mount-name is the name of the mountpoint that you will use to connect your source client with and authentication configures what type of icecast2 authenticator to use. Currently, only a single type "htpasswd" is implemented. New authenticators will be added later. Each authenticator has a variable number of options that are required and these are specified as shown in the example. The htpasswd authenticator requires only a single parameter, filename, which specifies the name of the file to use to store users and passwords. Note that this file need not exist (and probably will not exist when you first set it up). Icecast has built-in support for managing users and passwords via the web admin interface. More on this later in this section.

    + +

    Icecast supports a mixture of streams that require listener authentication and those that do not. Only mounts that are named in the config file can be configured for listener authentication.

    +
    +
    +
    +

    Configuring Users and Passwords

    +

    Once the appropriate entries are made to the config file, connect your source client (using the mountpoint you named in the config file). To configure users and passwords for this stream you must use the web-based admin interface. Navigate to http://server:ip/admin/stats.xsl to begin. If you have configured everything properly, you should see a screen like the following :

    + +

    You will see a red key in front of all mountpoint configured for listener authentication. Also note that this page will only show CONNECTED mountpoints.

    +

    To manage users and passwords for this mountpoint, click on the red key or follow the "Manage Authentication" link. The following screen will be shown :

    + +

    This screen will show all the users configured for this mountpoint. Adding users is as simple as entering a username and password in the fields and clicking "Add New User". Note that usernames MUST be unique and there are NO restrictions on passwords. You can delete users by clicking the appropriate delete link next to each user.

    +
    +
    +
    +

    Finishing it all off

    +

    Ok, so you've created your users, and you have everything setup properly, how do your users login ? Well, we've provided a simple login form that you can use for this purpose. This page (http://server:port/auth.xsl) will bring up a form that users can use to enter their username and password.

    + +

    This page will serve a m3u with the username and password and in most cases should open the correct media player and begin playing your stream

    +
    +
    +
    +

    A note about players and authentication

    +

    We do not have an exaustive list of players that support listener authentication. We use standard HTTP basic authentication, and in general, many media players support this if they support anything at all. Winamp and Foobar2000 support HTTP basic authentication on windows, and XMMS supports it on unix platforms.

    +
    + + diff --git a/doc/index.html b/doc/index.html index 45077d57..dd8a571d 100755 --- a/doc/index.html +++ b/doc/index.html @@ -11,6 +11,7 @@
  • Server Statistics
  • Relaying
  • Listing in a YP directory +
  • Listener Authentication
  • Win32 specific documentation
  • Glossary
  • FAQ diff --git a/doc/listener_auth1.jpg b/doc/listener_auth1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39e15fe35e1b89b28b1777c4c277f2bf0945bdeb GIT binary patch literal 32628 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 IQ2YNk0gxQ^FaQ7m literal 0 HcmV?d00001 diff --git a/doc/listener_auth3.jpg b/doc/listener_auth3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a2cc1b4f688e4d168eeb1c381b5337574549e95 GIT binary patch literal 23185 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 UD^N1wpID#xOC{sUVb1OO4_@q)NdN!< literal 0 HcmV?d00001