# $File: //depot/libOurNet/BBS/lib/OurNet/BBS/Utils.pm $ $Author: autrijus $
# $Revision: #3 $ $Change: 3814 $ $DateTime: 2003/01/25 00:45:49 $
package OurNet::BBS::Utils;
use strict;
no warnings 'deprecated';
use Date::Parse;
use Date::Format;
use Sys::Hostname;
use Digest::MD5 'md5_base64';
our $hostname = &Sys::Hostname::hostname();
sub deltree {
require File::Find;
my $dir = shift or return;
File::Find::finddepth(sub {
if (-d $File::Find::name) {
rmdir $File::Find::name;
}
else {
unlink $File::Find::name;
}
}, $dir) if -d $dir;
rmdir $dir;
}
sub locate {
my ($file, $path) = @_;
unless ($path) {
$path = (caller)[0];
$path =~ s|::\w+$||;
}
$path =~ s|::|/|g;
unless (-e $file) {
foreach my $inc (@INC) {
last if -e ($file = join('/', $inc, $_[0]));
last if -e ($file = join('/', $inc, $path, $_[0]));
}
}
return -e $file ? $file : undef;
}
# hash message id from Date, From, Board and Subject
sub set_msgid {
my ($header, $host) = @_;
my $timestamp = $header->{Date};
# $host ||= $hostname ||= 'localhost';
if (($timestamp ||= '') =~ /\D/) {
# conversion from ctime format
$timestamp = str2time($timestamp);
}
$timestamp = time2str('%Y%m%d%H%M%S', $timestamp)
unless length($timestamp ||= ('0' x 14)) == 14;
use bytes;
no warnings 'uninitialized';
my $hash = md5_base64("@{$header}{qw/From Subject Board/}");
# shouldn't be elixus.org
$_[0]->{'Message-ID'} = "<$timestamp.$hash\@bbs.elixus.org>";
}
# arg: timestamp author board title host
sub get_msgid {
my ($timestamp, $author, $board, $title, $host) = @_;
$host ||= $hostname;
if (($timestamp ||= '') !~ /^\d+$/) {
# conversion from ctime format
$timestamp = str2time($timestamp);
}
$timestamp = time2str('%Y%m%d%H%M%S', $timestamp)
unless length($timestamp ||= ('0' x 14)) == 14;
no warnings 'uninitialized';
return "<$timestamp.".md5_base64("$author $title $board")."\@$host>";
}
1;
syntax highlighted by Code2HTML, v. 0.9.1