package DeWeave::EDO;
use Moose;
use namespace::autoclean;
use MooseX::Types::Moose qw(Int Str Num Bool);
use JSON::Any;
use Try::Tiny;
use DeWeave::Exception::Deleted;
extends 'DeWeave::WBO';
has ciphertext => (
traits => ['WBOInternal'],
isa => Str,
required => 1,
is => 'ro',
);
has IV => (
traits => ['WBOInternal'],
isa => Str,
required => 1,
is => 'ro',
);
has hmac => (
traits => ['WBOInternal'],
isa => Str,
required => 1,
is => 'ro',
);
has deleted => (
isa => Bool,
required => 0,
is => 'ro',
);
around BUILDARGS => sub {
my $orig = shift;
my $class = shift;
my $args = $class->$orig(@_);
return $args unless defined $args->{__crypt};
return $args unless exists $args->{ciphertext};
my $decrypted_payload = $args->{__crypt}->decrypt($args);
if (defined $decrypted_payload) {
my $j = JSON::Any->new;
my $extra_args = $j->decode($decrypted_payload);
@$args{keys %$extra_args} =
values %$extra_args;
}
delete @$args{grep {!defined $args->{$_}} keys %$args};
$class->_debug_data('buildargs: ',$args);
if ($args->{deleted}) {
delete $args->{__crypt};
die DeWeave::Exception::Deleted->new({args=>$args});
}
return $args;
};
1;