App-Dochazka-REST

 view release on metacpan or  search on metacpan

lib/App/Dochazka/REST/Util.pm  view on Meta::CPAN


use 5.012;
use strict;
use warnings;

use App::CELL qw( $log );
use Authen::Passphrase::SaltedDigest;
use Pod::Simple::HTML;



=head1 NAME

App::Dochazka::REST::Util - miscellaneous utilities




=head1 SYNOPSIS

Miscellaneous utilities

    use App::Dochazka::REST::Util;

    ...




=head1 EXPORTS

This module provides the following exports:

=over 

=item L<hash_the_password> (function)

=item L<pod_to_html> (function)

=item L<pre_update_comparison> (function)

=back

=cut

use Exporter qw( import );
our @EXPORT_OK = qw( 
    hash_the_password
    pod_to_html 
    pre_update_comparison
);




=head1 FUNCTIONS


=head2 hash_the_password

Takes a request entity (hashref) - looks for a 'password' property.  If it
is present, adds a random salt to the request entity and hashes the
password with it.  If there is no password property, the function does
nothing.

=cut

sub hash_the_password {
    my $entity = shift;
    if ( $entity->{'password'} ) {
        my $ppr = Authen::Passphrase::SaltedDigest->new(
            algorithm => "SHA-512", salt_random => 20,
            passphrase => $entity->{'password'}
        );
        delete $entity->{'password'};
        $entity->{'passhash'} = $ppr->hash_hex;
        $entity->{'salt'} = $ppr->salt_hex;
    }
}


=head2 pod_to_html

Each L<App::Dochazka::REST> resource definition includes a 'documentation'
property containing a POD string. Our 'docu/html' resource converts this
POD string into HTML with a little help from this routine.

=cut

sub pod_to_html {
    my ( $pod_str ) = @_;
    $log->debug( "pod_to_html before: $pod_str" );
    my $p = Pod::Simple::HTML->new;
    $p->output_string(\my $html_str);
    $p->parse_string_document($pod_str);

    # now $html contains a full-blown HTML file, of which only one part is of
    # interest to us. That part starts with the line <!-- start doc --> 
    # and ends with <!-- end doc -->

    $html_str =~ s/.*<!-- start doc -->//s;
    $html_str =~ s/<!-- end doc -->.*//s;

    $log->debug( "pod_to_html after: $html_str" );
    return $html_str;
}


=head2 pre_update_comparison

Given an original object and a hashref of possible changed properties,
compare the properties in the hashref with the corresponding properties 
in the original object. If any properties really are changed, update
the object. Return the number of properties so changed.

=cut

sub pre_update_comparison {
    my ( $obj, $over ) = @_;
    my $c = 0;
    foreach my $prop (keys %$over) {



( run in 0.488 second using v1.01-cache-2.11-cpan-e1769b4cff6 )