Template-Plugin-Digest-MD5-0.05/0000755000175000017500000000000012450472351015502 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/Changes0000644000175000017500000000101012450472274016771 0ustar barbiebarbieRevision history for Template-Plugin-Digest-MD5 =============================================== 0.05 2014-12-30 - fixed license fields in META.json to be lists. 0.04 2014-06-24 - new maintainer: BARBIE. - repackaged distribution. - updated META.yml, added META.json. - added LICENSE file. - added minimum perl version (5.006). - reworked Makefile.PL for clarity. - extended test suite. 0.03 2006-04-26 - Last release to CPAN by Andrew. Template-Plugin-Digest-MD5-0.05/README0000644000175000017500000000302112347044312016353 0ustar barbiebarbieTemplate-Plugin-Digest-MD5 ========================== The Digest.MD5 Template Toolkit plugin provides access to the MD5 algorithm via the Digest::MD5 module. It is used like a plugin but installs filters and vmethods into the current context. INSTALLATION To install this module type the following: perl Makefile.PL make make test make install DEPENDENCIES This module requires these modules: Template Template::Plugin Template::Stash Digest::MD5 For testing the module requires these modules: IO::File Test::More For optional testing the module would like these modules: Test::CPAN::Meta Test::CPAN::Meta::JSON Test::Pod Test::Pod::Coverage DEDICATION This distribution was originally created by Andrew Ford. Sadly in early 2014, Andrew was diagnosed with Pancreatic Cancer and passed away peacfully at home on 25th April 2014. One of his wishes was for his OpenSource work to continue. At his funeral, many of his colleagues and friends, spoke of how he felt like a person of the world, and how he embrace the idea of OpenSource being for the benefit of the world. Anyone wishing to donate in memory of Andrew, please consider the following charities: * Dignity in Dying - http://www.dignityindying.org.uk/ * Marie Curie Cancer Care - http://www.mariecurie.org.uk/ COPYRIGHT AND LICENSE Copyright (C) 2006-2014 Andrew Ford Copyright (C) 2014 Barbie for Miss Barbell Productions. This distribution is free software; you can redistribute it and/or modify it under the Artistic Licence v2. Template-Plugin-Digest-MD5-0.05/t/0000755000175000017500000000000012450472351015745 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/t/00use.t0000644000175000017500000000015512347037317017073 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More tests => 1; BEGIN { use_ok 'Template::Plugin::Digest::MD5' } Template-Plugin-Digest-MD5-0.05/t/96metatest.t0000644000175000017500000000200012350106356020125 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More; # Skip if doing a regular install plan skip_all => "Author tests not required for installation" unless ( $ENV{AUTOMATED_TESTING} ); eval "use Test::CPAN::Meta::JSON"; plan skip_all => "Test::CPAN::Meta::JSON required for testing META.json files" if $@; plan 'no_plan'; my $meta = meta_spec_ok(undef,undef,@_); use Template::Plugin::Digest::MD5; my $version = $Template::Plugin::Digest::MD5::VERSION; is($meta->{version},$version, 'META.json distribution version matches'); if($meta->{provides}) { for my $mod (keys %{$meta->{provides}}) { is($meta->{provides}{$mod}{version},$version, "META.json entry [$mod] version matches distribution version"); eval "require $mod"; my $VERSION = '$' . $mod . '::VERSION'; my $v = eval "$VERSION"; is($meta->{provides}{$mod}{version},$v, "META.json entry [$mod] version matches module version"); isnt($meta->{provides}{$mod}{version},0); } } Template-Plugin-Digest-MD5-0.05/t/95changedate.t0000644000175000017500000000237312350106356020376 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More; use IO::File; # Skip if doing a regular install plan skip_all => "Author tests not required for installation" unless ( $ENV{AUTOMATED_TESTING} ); my $fh = IO::File->new('Changes','r') or plan skip_all => "Cannot open Changes file"; plan 'no_plan'; use Template::Plugin::Digest::MD5; my $version = $Template::Plugin::Digest::MD5::VERSION; my $latest = 0; while(<$fh>) { next unless(m!^\d!); $latest = 1 if(m!^$version!); # 2012-08-26T01:02 or 2012-08-26T01:02:03 or 2012-08-26T01:02:03.04 or 2012-08-26T01:02+01:00 like($_, qr! \d[\d._]+\s+ # version ( \d{4}-\d{2}-\d{2} # 2012-08-26 - YYYY-MM-DD ( T\d{2}:\d{2} # T01:02 - Thh:mm ( :\d{2} # :02 - :ss ( \.\d+ # .2 - .ss (microseconds) )? )? ( (Z|[-+]\d+:\d+) # +01:00 - timezone )? )? ) !x,'... version has a date'); } is($latest,1,'... latest version not listed'); Template-Plugin-Digest-MD5-0.05/t/91podcover.t0000644000175000017500000000054612350106356020130 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More; # Skip if doing a regular install plan skip_all => "Author tests not required for installation" unless ( $ENV{AUTOMATED_TESTING} ); eval "use Test::Pod::Coverage 0.08"; plan skip_all => "Test::Pod::Coverage 0.08 required for testing POD coverage" if $@; all_pod_coverage_ok({ also_private => ['new'] }); Template-Plugin-Digest-MD5-0.05/t/01filter.t0000644000175000017500000001602112347037454017566 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use blib; use Template::Test; test_expect(\*DATA); __END__ # testing md5_hex filter with a block --test-- [% USE Digest.MD5; FILTER md5_hex -%] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed sed metus et lectus commodo porta. Integer tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam pretium enim at lorem. Aenean sit amet justo at odio dictum suscipit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam lectus. In mattis hendrerit leo. Phasellus nec dolor. Quisque mi neque, porttitor a, bibendum ac, ullamcorper a, dolor. Mauris a augue cursus nulla rutrum aliquet. Nam lectus. Morbi nec massa sit amet urna volutpat imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras fringilla turpis sed orci. Aliquam pulvinar magna ac turpis. Duis viverra, tortor pulvinar consequat accumsan, leo elit ultrices neque, non vestibulum sem nisl in ipsum. Fusce pharetra luctus mi. Donec ornare enim nec nisl. Etiam ullamcorper bibendum elit. Nunc malesuada lorem in elit. Maecenas mi ipsum, semper quis, tristique nec, tempor vitae, ligula. In non urna. Vestibulum mollis varius nibh. Fusce sodales. Fusce feugiat libero. Nunc nec tortor. Integer sapien. Integer convallis nonummy enim. Curabitur est. Etiam tincidunt, velit id dapibus lobortis, arcu lectus aliquam turpis, id fringilla odio odio nec libero. Donec faucibus, dolor vel dapibus eleifend, neque nulla tristique risus, eleifend molestie justo metus sed est. Nunc vel dolor quis urna malesuada consectetuer. Mauris a risus in tortor laoreet blandit. Donec pharetra, nibh nec mollis tristique, lorem turpis viverra elit, in sollicitudin augue orci eget turpis. In nisi nisi, malesuada vel, ornare sed, fringilla sit amet, urna. Duis facilisis. Integer vitae neque. Aenean eu mauris id est ullamcorper tristique. Duis velit enim, condimentum ut, bibendum facilisis, bibendum eu, nibh. Pellentesque sed enim ac lectus tincidunt mollis. Etiam at nulla. Aliquam in nibh in lorem malesuada molestie. Nullam nunc risus, convallis eu, tristique eu, luctus ac, enim. [% END; -%] --expect-- ffbeab168ff7145cacf768641988e3e1 # text | md5_hex --test-- [% USE Digest.MD5 -%] [% 'xyzzy' | md5_hex %] [% text = 'xyzzy'; text.md5_hex %] --expect-- 1271ed5ef305aadabc605b1609e24c52 1271ed5ef305aadabc605b1609e24c52 # FILTER md5_base64; ... --test-- [% USE Digest.MD5; FILTER md5_base64 -%] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed sed metus et lectus commodo porta. Integer tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam pretium enim at lorem. Aenean sit amet justo at odio dictum suscipit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam lectus. In mattis hendrerit leo. Phasellus nec dolor. Quisque mi neque, porttitor a, bibendum ac, ullamcorper a, dolor. Mauris a augue cursus nulla rutrum aliquet. Nam lectus. Morbi nec massa sit amet urna volutpat imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras fringilla turpis sed orci. Aliquam pulvinar magna ac turpis. Duis viverra, tortor pulvinar consequat accumsan, leo elit ultrices neque, non vestibulum sem nisl in ipsum. Fusce pharetra luctus mi. Donec ornare enim nec nisl. Etiam ullamcorper bibendum elit. Nunc malesuada lorem in elit. Maecenas mi ipsum, semper quis, tristique nec, tempor vitae, ligula. In non urna. Vestibulum mollis varius nibh. Fusce sodales. Fusce feugiat libero. Nunc nec tortor. Integer sapien. Integer convallis nonummy enim. Curabitur est. Etiam tincidunt, velit id dapibus lobortis, arcu lectus aliquam turpis, id fringilla odio odio nec libero. Donec faucibus, dolor vel dapibus eleifend, neque nulla tristique risus, eleifend molestie justo metus sed est. Nunc vel dolor quis urna malesuada consectetuer. Mauris a risus in tortor laoreet blandit. Donec pharetra, nibh nec mollis tristique, lorem turpis viverra elit, in sollicitudin augue orci eget turpis. In nisi nisi, malesuada vel, ornare sed, fringilla sit amet, urna. Duis facilisis. Integer vitae neque. Aenean eu mauris id est ullamcorper tristique. Duis velit enim, condimentum ut, bibendum facilisis, bibendum eu, nibh. Pellentesque sed enim ac lectus tincidunt mollis. Etiam at nulla. Aliquam in nibh in lorem malesuada molestie. Nullam nunc risus, convallis eu, tristique eu, luctus ac, enim. [% END; -%] --expect-- /76rFo/3FFys92hkGYjj4Q # text | md5_base64 --test-- [% USE Digest.MD5 -%] [% 'xyzzy' | md5_base64 %] [% text = 'xyzzy'; text.md5_base64 %] --expect-- EnHtXvMFqtq8YFsWCeJMUg EnHtXvMFqtq8YFsWCeJMUg # Test the md5 filter --test-- [% USE Digest.MD5; USE Dumper; FILTER md5_hex; FILTER md5 -%] Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed sed metus et lectus commodo porta. Integer tortor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam pretium enim at lorem. Aenean sit amet justo at odio dictum suscipit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam lectus. In mattis hendrerit leo. Phasellus nec dolor. Quisque mi neque, porttitor a, bibendum ac, ullamcorper a, dolor. Mauris a augue cursus nulla rutrum aliquet. Nam lectus. Morbi nec massa sit amet urna volutpat imperdiet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras fringilla turpis sed orci. Aliquam pulvinar magna ac turpis. Duis viverra, tortor pulvinar consequat accumsan, leo elit ultrices neque, non vestibulum sem nisl in ipsum. Fusce pharetra luctus mi. Donec ornare enim nec nisl. Etiam ullamcorper bibendum elit. Nunc malesuada lorem in elit. Maecenas mi ipsum, semper quis, tristique nec, tempor vitae, ligula. In non urna. Vestibulum mollis varius nibh. Fusce sodales. Fusce feugiat libero. Nunc nec tortor. Integer sapien. Integer convallis nonummy enim. Curabitur est. Etiam tincidunt, velit id dapibus lobortis, arcu lectus aliquam turpis, id fringilla odio odio nec libero. Donec faucibus, dolor vel dapibus eleifend, neque nulla tristique risus, eleifend molestie justo metus sed est. Nunc vel dolor quis urna malesuada consectetuer. Mauris a risus in tortor laoreet blandit. Donec pharetra, nibh nec mollis tristique, lorem turpis viverra elit, in sollicitudin augue orci eget turpis. In nisi nisi, malesuada vel, ornare sed, fringilla sit amet, urna. Duis facilisis. Integer vitae neque. Aenean eu mauris id est ullamcorper tristique. Duis velit enim, condimentum ut, bibendum facilisis, bibendum eu, nibh. Pellentesque sed enim ac lectus tincidunt mollis. Etiam at nulla. Aliquam in nibh in lorem malesuada molestie. Nullam nunc risus, convallis eu, tristique eu, luctus ac, enim. [% END; END; -%] --expect-- 6b7ada4918eb7e7ae14e916ceafc7dfc # Test the md5 filter as a vmethod --test-- [% USE Digest.MD5 -%] [% checksum1 = 'xyzzy' | md5; checksum1.md5_hex %] [% text1 = 'xyzzy'; text1.md5 | md5_hex %] [% text2 = 'xyzzy'; text2.md5.md5_hex %] --expect-- 2555ff4001fd16a72f605e952c0c164d 2555ff4001fd16a72f605e952c0c164d 2555ff4001fd16a72f605e952c0c164d Template-Plugin-Digest-MD5-0.05/t/94metatest.t0000644000175000017500000000175212450466655020154 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More; # Skip if doing a regular install plan skip_all => "Author tests not required for installation" unless ( $ENV{AUTOMATED_TESTING} ); eval "use Test::CPAN::Meta"; plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@; plan 'no_plan'; my $meta = meta_spec_ok(undef,undef,@_); use Template::Plugin::Digest::MD5; my $version = $Template::Plugin::Digest::MD5::VERSION; is($meta->{version},$version, 'META.yml distribution version matches'); if($meta->{provides}) { for my $mod (keys %{$meta->{provides}}) { is($meta->{provides}{$mod}{version},$version, "META.yml entry [$mod] version matches distribution version"); eval "require $mod"; my $VERSION = '$' . $mod . '::VERSION'; my $v = eval "$VERSION"; is($meta->{provides}{$mod}{version},$v, "META.yml entry [$mod] version matches module version"); isnt($meta->{provides}{$mod}{version},0); } } Template-Plugin-Digest-MD5-0.05/t/90podtest.t0000644000175000017500000000045312350106157017764 0ustar barbiebarbie#!/usr/bin/perl -w use strict; use Test::More; # Skip if doing a regular install plan skip_all => "Author tests not required for installation" unless ( $ENV{AUTOMATED_TESTING} ); eval "use Test::Pod 1.00"; plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; all_pod_files_ok(); Template-Plugin-Digest-MD5-0.05/lib/0000755000175000017500000000000012450472351016250 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/lib/Template/0000755000175000017500000000000012450472351020023 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/lib/Template/Plugin/0000755000175000017500000000000012450472351021261 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/lib/Template/Plugin/Digest/0000755000175000017500000000000012450472351022500 5ustar barbiebarbieTemplate-Plugin-Digest-MD5-0.05/lib/Template/Plugin/Digest/MD5.pm0000644000175000017500000001031112450472274023423 0ustar barbiebarbiepackage Template::Plugin::Digest::MD5; use strict; use warnings; use vars qw($VERSION); $VERSION = 0.05; use base qw(Template::Plugin); use Template::Plugin; use Template::Stash; use Digest::MD5 qw(md5 md5_hex md5_base64); $Template::Stash::SCALAR_OPS->{'md5'} = \&_md5; $Template::Stash::SCALAR_OPS->{'md5_hex'} = \&_md5_hex; $Template::Stash::SCALAR_OPS->{'md5_base64'} = \&_md5_base64; sub new { my ($class, $context, $options) = @_; # now define the filter and return the plugin $context->define_filter('md5', \&_md5); $context->define_filter('md5_hex', \&_md5_hex); $context->define_filter('md5_base64', \&_md5_base64); return bless {}, $class; } sub _md5 { my $options = ref $_[-1] eq 'HASH' ? pop : {}; return md5(join('', @_)); } sub _md5_hex { my $options = ref $_[-1] eq 'HASH' ? pop : {}; return md5_hex(join('', @_)); } sub _md5_base64 { my $options = ref $_[-1] eq 'HASH' ? pop : {}; return md5_base64(join('', @_)); } 1; __END__ =head1 NAME Template::Plugin::Digest::MD5 - TT2 interface to the MD5 Algorithm =head1 SYNOPSIS [% USE Digest.MD5 -%] [% checksum = content FILTER md5 -%] [% checksum = content FILTER md5_hex -%] [% checksum = content FILTER md5_base64 -%] [% checksum = content.md5 -%] [% checksum = content.md5_hex -%] [% checksum = content.md5_base64 -%] =head1 DESCRIPTION The I Template Toolkit plugin provides access to the MD5 algorithm via the C module. It is used like a plugin but installs filters and vmethods into the current context. When you invoke [% USE Digest.MD5 %] the following filters (and vmethods of the same name) are installed into the current context: =over 4 =item C Calculate the MD5 digest of the input, and return it in binary form. The returned string will be 16 bytes long. =item C Same as C, but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: '0'..'9' and 'a'..'f'. =item C Same as C, but will return the digest as a base64 encoded string. The length of the returned string will be 22 and it will only contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and '/'. Note that the base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded md5 digests you might want to append the redundant string "==" to the result. =back As the filters are also available as vmethods the following are all equivalent: FILTER md5_hex; content; END; content FILTER md5_hex; content.md5_base64; =head1 WARNING The L man page notes that the MD5 algorithm is not as strong as it used to be. It has since 2005 been easy to generate different messages that produce the same MD5 digest. It still seems hard to generate messages that produce a given digest, but it is probably wise to move to stronger algorithms for applications that depend on the digest to uniquely identify a message. =head1 SEE ALSO L, L