#!/usr/bin/env perl

use strict;
use warnings;
use YAML::XS;
use File::Temp;
use Digest::MD5;

local $/ = undef;

my %param = %{ YAML::XS::Load( <> ) };

my $conf = $param{argv};

my $path = delete $conf->{path};
my ( $fh, $temp ) = File::Temp::tempfile();
my $unlink = sub { unlink shift; exit 1 };

exit 1 unless defined $conf->{md5}
        && $path && $fh && length $param{data};

exit 1 if $conf->{chown} && ! ( my @pw = getpwnam $conf->{chown} );

print $fh $param{data};
seek $fh, 0, 0;
my $md5 = Digest::MD5->new()->addfile( $fh )->hexdigest;
close $fh;

&$unlink( $temp ) if $md5 ne $conf->{md5};
&$unlink( $temp ) if system "mv $temp $path";
&$unlink( $path ) if $conf->{chmod}
     && ! chmod oct $conf->{chmod}, $path;
&$unlink( $path ) if @pw && ! chown @pw[2,3], $path;

print "ok\n";
exit 0;
