Catalyst-Plugin-EncryptID

 view release on metacpan or  search on metacpan

lib/Catalyst/Plugin/EncryptID.pm  view on Meta::CPAN

	package TestApp;

	use strict;
	use warnings;

	use Catalyst qw/EncryptID/;

	TestApp->config(
		name    => 'TestApp',
		EncryptID => {
			secret => 'abc123xyz',
			padding_character => '!'
		}
	);

	1;

In Controller

	package TestApp::Controller::Root;
	use base 'Catalyst::Controller';

	__PACKAGE__->config->{namespace} = '';

	sub index : Private {
	    my ( $self, $c ) = @_;
	    $c->res->body('root index');
	}

	sub encrypt : Global Args(1) {
	    my ( $self, $c, $id ) = @_;
	    my $encripted_hash = $c->encrypt_data($id);
	    ...
	}

	sub decrypt : Global Args(1) {
	    my ( $self, $c, $hashid ) = @_;
	    my $decrypted_string = $c->decrypt_data($hashid);
	    ...
	}

	sub validhash : Global Args(1) {
	    my ( $self, $c, $hashid ) = @_;
	    my $status = $c->is_valid_encrypt_hash($hashid);
	    ...
	}

	1;

=head1 EXPORT

A list of functions that can be exported.  You can delete this section
if you don't export anything, such as for a purely object-oriented module.

=head1 SUBROUTINES/METHODS

=head2 encrypt_data

C<encrypt_data(ID [,PREFIX])> - Encrypt the given ID, returns the encoded hash value.
			     If "PREFIX" is given, it will be added to the ID before encoding.
			     It can be used when decoding to verify the decoded value is valid.

=cut

sub encrypt_data {
	my( $c, $text, $prefix ) = @_;

	warn "Missing Clear text ID parameter" unless defined $text;
	return unless defined $text;

	## Prefix is optional, can be undef
	$text = $prefix . $text if defined $prefix;

	my $min_length = 8;
	my $ciphertext_hash = '';

	#encode an empty string
	$text = _padding_character($c) x $min_length if length($text) < 1;

	while ( length($text) > 0 ) {
		my $sub_text = substr($text,0,$min_length,'');
		if ( length($sub_text) < 8 ) {
			my $left = $min_length - length($sub_text);
			$sub_text = ( _padding_character($c) x ($left % $min_length) ). $sub_text;
		};

		my $ciphertext = _cipher($c)->encrypt($sub_text);
		$ciphertext_hash .= unpack('H16', $ciphertext ) ;
	}

	return $ciphertext_hash;
}

=head2 decrypt_data

C<decrypt_data(ID)> - Decrypt the given ID, returns the original (text) ID value.

=cut

sub decrypt_data {
	my( $c, $encrypted_hash ) = @_;

	return unless is_valid_encrypt_hash( $c, $encrypted_hash );

	my $padding_character = _padding_character($c);
	my $ciphertext = '';

	while ( length($encrypted_hash) > 0 ) {
		my $sub_text   = substr($encrypted_hash,0,16,'');
		my $cipherhash = pack('H16', $sub_text );
		my $text = _cipher($c)->decrypt($cipherhash);

		$text =~ s/^$padding_character+//;
		$ciphertext .= $text;
	};
	return $ciphertext
}

=head2 is_valid_encrypt_hash

C<is_valid_encrypt_hash(HASH)> - Return true if given encrypt has is valid



( run in 0.759 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )