You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/kioslave/finger/kio_finger.pl

176 lines
5.0 KiB

##!/usr/bin/perl
#
# Copyright Andreas Schlapbach, schlpbch@iam.unibe.ch, 2001
# http://iamexwiwww.unibe.ch/studenten/kfinger
#
# Touch at your own risk.
# Highlight mail addresses or url
$mails = '<A HREF="mailto:';
$urls = '<A HREF="';
$urlspace = '">';
$urlend = '</A>';
# Highlight various information, configurable via the CSS file,
$finger = '<CODE class="finger">';
$domainName = '<CODE class="domainName">';
$ipNumber = '<CODE class="ipNumber">';
$os = '<CODE class="os">';
$username = '<CODE class="username">';
$directory = '<CODE class="directory">';
$shell = '<CODE class="shell">';
$notLoggedIn = '<CODE class="Login">';
$loggedIn = '<CODE class="noLogin">';
$newMail = '<CODE class="newMail">';
$plan = '<CODE class="plan">';
$noNewMail = '<CODE class="noNewMail">';
$noPlan = '<CODE class="noPlan">';
$close = '</CODE>';
# Those names get skipped, so if there's a user with such a name, bad luck.
@keywords=('Welcome','Login','finger','No');
$keywordlist = join '|', @keywords;
$FINGERCMD = "$ARGV[0]"; # The complete path to the finger cmd
$CSSFILE = "$ARGV[1]"; # The complete path to the CSS file
$REFRESHRATE = "$ARGV[2]"; # The intervals in seconds until the page gets updated
$HOST = "$ARGV[3]"; # host name
$USER = "$ARGV[4]"; # user name
$HOST =~ s/&/&amp;/g;
$HOST =~ s/</&lt;/g;
$HOST =~ s/>/&gt;/g;
$USER =~ s/&/&amp;/g;
$USER =~ s/</&lt;/g;
$USER =~ s/>/&gt;/g;
# HTML Header
print <<HTMLHeader;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="refresh" content="$REFRESHRATE">
<TITLE>finger $USER\@$HOST</TITLE>
<LINK type="text/css" rel="stylesheet" href="file:$CSSFILE">
</HEAD>
<BODY>
<TABLE class="mainTable" cellspacing="0">
<TR>
<TH colspan="1">
<H1>finger $USER\@$HOST</H1>
</TH>
</TR>
<TR>
<TH>
<TABLE class="courierText" cellpadding="0" cellspacing="2">
HTMLHeader
# Run finger command and save it into a buffer
open(F, "-|") || exec $FINGERCMD, "$USER\@$HOST";
@lines = <F>;
close(F);
# Do highlighting using perl regular expressions on every line received.
# Order is important here.
foreach $output (@lines)
{
$output =~ s/((\w)+\@((\w)+(.))*(\w)+)/$mails$1$urlspace$1$urlend/gi; # Highlight email address
$output =~ s/((http|ftp)(:\/\/)(\S)+)/$urls$1$urlspace$1$urlend/gi; # Highlight urls
$output =~ s/((\d)+\.(\d)+\.(\d)+\.(\d)+)/$ipNumber$1$close/gi; # Highlight IP number
$output =~ s/((\w)+\.(\w)+\.(\w|-)+\s)/$domainName$1$close/gi; # Highlight domain name (\s is important)
$output =~ s/(finger:)/$finger$1$close/gim; # Highlight finger
$output =~ s/(Linux)/$os$1$close/gim; # Highlight Linux
if ($USER) # is $USER nil ?
{
$output =~ s/^Login:\s*(\w*)/Login: $mails$1\@$HOST$urlspace$1$urlend/gi;
$output =~ s/^Login Name:\s*(\w*)/Login Name:$mails$1\@$HOST$urlspace$1$urlend/gi;
$output =~ s/Name:(((\s*)(\w+))+\n)/Name:$username$1$close\n/gi; # Linux
$output =~ s/In real life:(((\s*)(\w+))+\n)/In real life:$username$1$close\n/gi; # Solaris
$output =~ s/^Directory:((\s*)(\/(\w)+)+)/Directory:$directory$1$close/gi; # Highlight Directory
$output =~ s/Shell:((\s*)(\/(\w)+)+)/Shell:$shell$1$close/gi; # Highlight Shell
$output =~ s/(not presently logged)/$notLoggedIn$1$close/gi;
$output =~ s/con (\w*)/con $loggedIn$1$close/gi;
$output =~ s/^(New mail)/$newMail$1$close/gi;
$output =~ s/^(No mail.)/$noNewMail$1$close/gim;
$output =~ s/^(Plan:)/$plan$1$close/gi;
$output =~ s/^(No plan.)/$noPlan$1$close/gim;
}
else
{
$output =~ s/^(\w+)/$mails$1\@$HOST$urlspace$1$urlend/m unless ($output =~ m/$keywordlist/m);
}
# line consists of white space only?
if ($output =~ m/\S/gi)
{
print " <TR><TD><PRE>$output</PRE></TD></TR>\n";
}
else
{
print " <TR><TD><PRE> </PRE></TD></TR>\n";
}
}
print " </TABLE>\n";
print " </TH>\n";
# Finger-Talk options
if ($USER) # is $USER nil ?
{
print <<UserQuery;
</TR>
<TR>
<TH class="commandText" colspan="2">
<A HREF='finger://$USER\@$HOST'>finger</A>
</TH>
</TR>
UserQuery
}
else
{
print <<HostQueryHead;
<TH>
<TABLE class="courierText" cellpadding="0" cellspacing="2">
HostQueryHead
@lines = split /^/m, $buffer;
foreach $output2 (@lines)
{
if ($output2 =~ m/^(\w+)/gi and not ($output2 =~ m/$keywordlist/m))
{
$USER = $&;
print " <TR><TD><PRE><A HREF='finger://$USER\@$HOST'>finger</A>\n</PRE></TD></TR>\n";
# - <A HREF='talk://$USER\@$HOST'>talk</A>\n</PRE></TD></TR>\n";
}
else
{
print " <TR><TD><PRE> </PRE></TD></TR>\n";
}
}
print <<HostQueryTail;
</TABLE>
</TH>
</TR>
HostQueryTail
}
# HTMLTail
print <<HTMLTail;
<TR>
<TH class="niceText">refresh rate: $REFRESHRATE seconds.</TH>
</TR>
</TABLE>
</BODY>
</HTML>
HTMLTail