#!/usr/bin/perl
#
# This software may be used and distributed according to the terms
# of the GNU Public License, incorporated herein by reference
#
# MyNapster WebClient copyright 2000
# info@mynapster.com
#
# You are welcome to modify and distribute this code
use CGI qw(:standard);
use CGI::Cookie;
use lib "/home/mynapste/www/cgi-bin";
use napster;
use strict;
$SIG{'HUP'} = \&puke;
$SIG{'INT'} = \&puke;
$SIG{'KILL'} = \&puke;
$SIG{'PIPE'} = \&puke;
$SIG{'ALRM'} = \&puke;
alarm 40;
if (param())
{
my $cookie_nick = cookie('nick');
my $cookie_pass = cookie('pass');
my ($nick, $pass);
if (!$cookie_nick && !$cookie_pass)
{
my $mynapster = Napster->new("", "");
my @chars = ('a' .. 'z', 'A' .. 'Z', 0 .. 9);
$nick = join "", map $chars[rand @chars], 1 .. 10;
$pass = join "", map $chars[rand @chars], 1 .. 7;
my ($type, $msg) = $mynapster->register_new_user($nick, $pass, $nick . '@hotmail.com');
if ($type != 3)
{
print header;
print_form();
print p, h1("Could not create a new user, reason $type, message : $msg"),p;
print end_html;
die;
}
else
{
$cookie_nick = cookie(-NAME => 'nick', -VALUE => $nick, -EXPIRES => '+2y');
$cookie_pass = cookie(-NAME => 'pass', -VALUE => $pass, -EXPIRES => '+2y');
};
}
else
{
$nick = $cookie_nick;
$pass = $cookie_pass;
};
my $mynapster = Napster->new($nick, $pass);
my $nap_server = param('Server');
my @all_servers = param('servers');
foreach my $serv (@all_servers)
{
if ($serv =~ /$nap_server/)
{
$_ = $serv;
};
};
my ($ip, $port);
s/^(\S*)\s//;
$ip = $1;
s/^(\S*)\s//;
$port = $1;
my ($nap_ip, $nap_port) = $mynapster->connect($ip, $port);
if ($nap_ip != -1)
{
print header(-COOKIE => [$cookie_nick, $cookie_pass]);
print_form();
my %songs = $mynapster->search(FILENAME => param('name'), MAX_RESULTS => param('max_res'));
if (!defined(%songs))
{
print h3({-style=>'Color: green;'},"No matching songs found"), p;
};
foreach my $song (keys %songs)
{
$_ = (split(/\\/, $song))[-1];
s/"//g;
my ($md5, $size, $bitrate, $freq, $length, $nick, $ip, $link_type) = split ' ', $songs{$song};
my $ref = "/cgi-bin/get_song.cgi/?song=" . CGI::escape($song) . "&nick=" . CGI::escape($nick) .
"&nap_ip=" . $nap_ip . "&nap_port=" . $nap_port . "&size=" . $size;
my $mysize = sprintf '%.2f', $size/1000000;
print a( {-href=>$ref}, $_), ' ', $mysize, " MB";
for (my $i = 1; $i < $link_type; $i++)
{
print '';
};
print p;
}
print end_html;
$mynapster->disconnect;
}
else
{
print header;
print_form();
print p, h1("Could not connect to napster, contact a webmaster"),p;
}
}
else
{
print header;
print_form();
sub puke {
die;
}
sub print_form
{
## my @servers = napster::get_servers_list;
## my @hidden_servers = @servers;
## foreach (@servers)
## {
## s/(\S*)$//;
## $_ = $1;
## };
## my $serv_ref = \@servers;
print start_html('My Napster'),
h3({-style=>'Color: green;'},"My Napster"),
start_form, "Song or Artist name : ", textfield('name'),
" Max Results : ", textfield('max_res'),
p;
print radio_group(-name=>'Server', -values=>['opennap.htoc.com','opennap.cx','wintermute.sparhawk.bc.ca',
'wolf.ircmafia.org', 'imperialfleet.com', 'mynapster.com', 'culvernap.yi.org',
'mp3hoy.net', 'opennap.darkcrystal.cx', 'bitchx.dimension6.com',
'thrashmetal.napster.com', 'salsa.napster.com', 'crossover.napster.com',
'blackmetal.napster.com', 'polskpunk.napster.com', 'negerpunk.napster.com',
'hardcore.napster.com', 'clubhouse.napster.com', 'eurohouse.napster.com',
'alternative.napster.com', 'freestyle.napster.com', 'britpop.napster.com', 'samba.napster.com',
'tango.napster.com', 'porngroove.napster.com', 'primus.napster.com', 'trance.napster.com',
'opera.napster.com', 'acoustic.napster.com', 'easylistening.napster.com', 'symphonicrock.napster.com',
'psychedelicrock.napster.com', 'bluegrass.napster.com', 'celtic.napster.com',
'fastfusion.napster.com', 'swing.napster.com', 'hardrock.napster.com', 'rockandroll.napster.com',
'acidjazz.napster.com', 'acidpunk.napster.com', 'showtunes.napster.com', 'rave.napster.com',
'newage.napster.com', 'jungle.napster.com', 'gangstarap.napster.com', 'hiphop.napster.com',
'eurodance.napster.com', 'techno.napster.com', 'rock.napster.com', 'pop.napster.com',
'oldies.napster.com', 'funk.napster.com', 'disco.napster.com', 'bigband.napster.com',
'tribal.napster.com'],
-default=>'eurohouse.napster.com');
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '';
print '
', p,p,submit, end_form, hr, p; };