#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use 5.10.0;
|
|
|
|
# we'll use this to filter out people who haven't logged in.
|
|
# pretty silly!
|
|
my %whitelist;
|
|
my (@lastlog) = split /\n/, `lastlog | grep -v Never | awk '{ print \$1; }'`;
|
|
foreach my $user (@lastlog) {
|
|
$whitelist{$user} = 1;
|
|
}
|
|
|
|
my $hostname = `hostname`;
|
|
chomp $hostname;
|
|
|
|
opendir(my $dh, '/home/')
|
|
or die "could not open /home/: $!";
|
|
|
|
my %dirs;
|
|
my %titles;
|
|
while (my $dir = readdir $dh) {
|
|
next if $dir =~ /^[.]/;
|
|
next unless $whitelist{$dir};
|
|
|
|
my $index_html_path = "/home/$dir/public_html/index.html";
|
|
|
|
if (-e $index_html_path) {
|
|
$dirs{$dir} = (stat $index_html_path)[9]; # mtime
|
|
$titles{$dir} = get_title_from_file($index_html_path);
|
|
}
|
|
}
|
|
close $dh;
|
|
|
|
sub sort_by_time {
|
|
$dirs{$b} <=> $dirs{$a};
|
|
}
|
|
|
|
my $list = "<table>\n";
|
|
foreach my $key (sort sort_by_time (keys(%dirs))) {
|
|
$list .= ' <tr>'
|
|
. '<td><a href="//' . $hostname . '/~' . $key . '/">~' . $key . '</a></td>'
|
|
. '<td>' . $titles{$key} . '</td>'
|
|
. '<td class=tiny>' . $dirs{$key} . '</td>'
|
|
. "</tr>\n";
|
|
}
|
|
|
|
$list .= "</table>";
|
|
|
|
say $list;
|
|
|
|
sub get_title_from_file {
|
|
my ($filespec) = @_;
|
|
my $html = slurp($filespec);
|
|
|
|
if ($html =~ m{<title>(.*?)</title>}is) {
|
|
return $1;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
sub slurp {
|
|
my ($file) = @_;
|
|
my $everything;
|
|
|
|
open my $fh, '<', $file
|
|
or die "Couldn't open $file: $!\n";
|
|
|
|
# line separator:
|
|
local $/ = undef;
|
|
$everything = <$fh>;
|
|
|
|
close $fh
|
|
or die "Couldn't close $file: $!";
|
|
|
|
return $everything;
|
|
}
|