X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FFile%2FKDBX%2FEntry.pm;h=0119b67363431fe407dfd828c58934330ce26edd;hb=3a28d16f9cfdf4fa7db4b513f143374ddc7598b1;hp=be44ae79ac96b419de1529a0d6779d27f8712356;hpb=b334578b1eb03deabcdcc02f324e7d2323c7965e;p=chaz%2Fp5-File-KDBX diff --git a/lib/File/KDBX/Entry.pm b/lib/File/KDBX/Entry.pm index be44ae7..0119b67 100644 --- a/lib/File/KDBX/Entry.pm +++ b/lib/File/KDBX/Entry.pm @@ -11,11 +11,11 @@ use File::KDBX::Constants qw(:history :icon); use File::KDBX::Error; use File::KDBX::Util qw(:assert :class :coercion :erase :function :uri generate_uuid load_optional); use Hash::Util::FieldHash; -use List::Util qw(first sum0); +use List::Util qw(any first sum0); use Ref::Util qw(is_coderef is_hashref is_plain_hashref); use Scalar::Util qw(blessed looks_like_number); use Storable qw(dclone); -use Time::Piece; +use Time::Piece 1.33; use boolean; use namespace::clean; @@ -60,7 +60,7 @@ An array of window title / keystroke sequence associations. keystroke_sequence => '{USERNAME}{TAB}{PASSWORD}{ENTER}', } -Keystroke sequences can have , most commonly C<{USERNAME}> and C<{PASSWORD}>. +Keystroke sequences can have L, most commonly C<{USERNAME}> and C<{PASSWORD}>. =attr quality_check @@ -298,7 +298,7 @@ sub string_value { =method expand_string_value - $string = $entry->expand_string_value; + $string = $entry->expand_string_value($string_key); Same as L but will substitute placeholders and resolve field references. Any placeholders that do not expand to values are left as-is. @@ -308,6 +308,26 @@ See L. Some placeholders (notably field references) require the entry be connected to a database and will throw an error if it is not. +=method expand_notes + +Shortcut equivalent to C<< ->expand_string_value('Notes') >>. + +=method expand_password + +Shortcut equivalent to C<< ->expand_string_value('Password') >>. + +=method expand_title + +Shortcut equivalent to C<< ->expand_string_value('Title') >>. + +=method expand_url + +Shortcut equivalent to C<< ->expand_string_value('URL') >>. + +=method expand_username + +Shortcut equivalent to C<< ->expand_string_value('UserName') >>. + =cut sub _expand_placeholder { @@ -360,26 +380,6 @@ sub expand_string_value { return $self->_expand_string($str); } -=attr expand_notes - -Shortcut equivalent to C<< ->expand_string_value('Notes') >>. - -=attr expand_password - -Shortcut equivalent to C<< ->expand_string_value('Password') >>. - -=attr expand_title - -Shortcut equivalent to C<< ->expand_string_value('Title') >>. - -=attr expand_url - -Shortcut equivalent to C<< ->expand_string_value('URL') >>. - -=attr expand_username - -Shortcut equivalent to C<< ->expand_string_value('UserName') >>. - =method other_strings $other = $entry->other_strings; @@ -553,7 +553,7 @@ sub hmac_otp { $params{secret} = encode_b32r($params{secret}) if !$params{base32}; $params{base32} = 1; - my $otp = eval {Pass::OTP::otp(%params, @_) }; + my $otp = eval { Pass::OTP::otp(%params, @_) }; if (my $err = $@) { throw 'Unable to generate HOTP', error => $err; } @@ -587,7 +587,7 @@ sub time_otp { $params{secret} = encode_b32r($params{secret}) if !$params{base32}; $params{base32} = 1; - my $otp = eval {Pass::OTP::otp(%params, @_) }; + my $otp = eval { Pass::OTP::otp(%params, @_) }; if (my $err = $@) { throw 'Unable to generate TOTP', error => $err; } @@ -654,8 +654,8 @@ sub _hotp_params { my %params = ( type => 'hotp', - issuer => $self->title || 'KDBX', - account => $self->username || 'none', + issuer => $self->expand_title || 'KDBX', + account => $self->expand_username || 'none', digits => 6, counter => $self->string_value('HmacOtp-Counter') // 0, $self->_otp_secret_params('Hmac'), @@ -680,8 +680,8 @@ sub _totp_params { ); my %params = ( type => 'totp', - issuer => $self->title || 'KDBX', - account => $self->username || 'none', + issuer => $self->expand_title || 'KDBX', + account => $self->expand_username || 'none', digits => $self->string_value('TimeOtp-Length') // 6, algorithm => $algorithms{$self->string_value('TimeOtp-Algorithm') || ''} || 'sha1', period => $self->string_value('TimeOtp-Period') // 30,