#!/usr/bin/perl

use strict;
use FindBin;
use File::Touch qw (touch);
use lib "$FindBin::Bin";
use Mcds::McdsCalypso;
use Authen::Htpasswd;
use Crypt::GeneratePassword qw(word chars);

my $tmp = $ENV{'AUTOPKGTEST_TMP'} // File::Temp->newdir();
File::Path::make_path($tmp);
my $htpasswd = "$tmp/htpasswd";
my $mcdsrc = "$tmp/mcdsrc";
touch $htpasswd;
$htpasswd = Cwd::abs_path($htpasswd);

my $m = Mcds::McdsCalypso->new({
  'dir' => $tmp,
  'calypso' => {
    'acl' => {
      'type' => 'htpasswd',
      'filename' => "$htpasswd",
      'encryption' => "sha1",
    },
  },
});
my $user = Crypt::GeneratePassword::word(3, 10);
my $password = Crypt::GeneratePassword::chars(8, 12);
my $passwd = Authen::Htpasswd->new($htpasswd, {encrypt_hash => 'sha1'});
$passwd->add_user($user, $password);
my $url = $m->go(["debian/tests/data/contacts.vcf"]);
my $results = shift;
my $reference = undef;
if (!defined $results) {
  $results="$tmp/results";
  $reference="debian/tests/data/reference-simple";
}

my $mcds_config = { '_' => {
  'url' => $url,
  'netrc' => 'yes',
}};
Config::INI::Writer->write_file($mcds_config, $mcdsrc);

# Don't overwrite user's .netrc:
$ENV{'HOME'}="$tmp";

open (my $NETRC, '>', "$ENV{'HOME'}/.netrc");
printf $NETRC <<"EOF";
machine localhost
login $user
password $password

EOF
close $NETRC;
chmod 0600, "$ENV{'HOME'}/.netrc";
!system("mcds -c $mcdsrc King | tee $results") or die "fail";
!system("mcds -c $mcdsrc Kin2 | tee -a $results") or die "fail";

$m->stop_server();

if (defined $reference) {
  !system("diff -u $reference $results >&2") or die "results did not match reference";
}


