package Apache::MimeDBI;
# file Apache/MimeDBI.pm

use strict;
use Apache::Constants qw(:common);
use Tie::DBI ();
use File::Basename qw(basename);

use constant DEFAULT_DSN    => 'mysql:test_www';
use constant DEFAULT_LOGIN  => ':';
use constant DEFAULT_TABLE  => 'doc_types';
use constant DEFAULT_FIELDS => 'filename:mime_type:encoding';

sub handler {
    my $r = shift;
    
    # get filename
    my $file = basename $r->filename;
    
    # get configuration information
    my $dsn        = $r->dir_config('MIMEDatabase') || DEFAULT_DSN;
    my $table      = $r->dir_config('MIMETable')    || DEFAULT_TABLE;
    my($filefield, $mimefield, $encodingfield) = 
	split ':', $r->dir_config('MIMEFields') || DEFAULT_FIELDS;
    my($user, $pass) = split ':', $r->dir_config('MIMELogin') || DEFAULT_LOGIN;
    
    # pull information out of the database
    tie my %DB, 'Tie::DBI', {
	'db' => $dsn, 'table' => $table, 'key' => $filefield,
	'user' => $user, 'password' => $pass,
    };
    my $record;
    return DECLINED unless tied %DB and $record = $DB{$file};
    
    # set the content type and encoding
    $r->content_type($record->{$mimefield});
    $r->content_encoding($record->{$encodingfield}) 
	if $record->{$encodingfield};
    
    return OK;
}

1;
__END__
