#!/usr/bin/perl -wT
=head1 NAME

fix_headers_case

=head1 DESCRIPTION

SOGo adds lower case headers, which some mail servers do not like.
This plugin just rewrite them to have the first letter uppercase

=head1 AUTHOR

Daniel Berteaud <daniel@firewall-services.com>

=head1 LICENSE

GNU GPL (GNU General Public License)


=cut


sub register {
  my ($self, $qp, %arg) = @_;
  $self->register_hook("data_post", "fix_headers_case");
}


sub fix_headers_case {
  my ($self, $transaction) = @_;
  my $mailer = $self->get_header($transaction,'User-Agent') or return DECLINED;
  $mailer =~ m/^SOGoMail/ or return DECLINED;
  $self->log(LOGINFO, "SOGo mailer detected, going to fix headers case");
  foreach my $header (qw/From To Cc Subject Message-ID Content-Type Date Content-Length Content-Transfer-Encoding/){
    my $value = $self->get_header($transaction,$header) or next;
    $self->set_header($transaction, $header, $value);
  }
  return DECLINED;
}

sub get_header {
  my ($self, $transaction, $header) = @_;
  my $ret  = $transaction->header->get($header) or return;
  return $ret;
}

sub set_header {
    my ($self, $transaction, $header, $value) = @_;
    my $ret = $transaction->header->delete($header) or return;
    $ret = $transaction->header->add($header, $value) or return;
    return $ret;
}
