#!/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;
							 | 
						|
								}
							 |