The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::Google::SafeBrowsing4::Storage - Base class for storing the Google Safe Browsing v4 database

SYNOPSIS

        package Net::Google::SafeBrowsing4::Storage::File;

        use base qw(Net::Google::SafeBrowsing4::Storage);

DESCRIPTION

This is the base class for implementing a storage mechanism for the Google Safe Browsing v4 database. See Net::Google::SafeBrowsing4::Storage::File for an example of implementation.

This module cannot be used on its own as it does not actually store anything. All public methods should redefined.

CONSTRUCTOR

new()

        Create a Net::Google::SafeBrowsing4::Storage object

        my $storage => Net::Google::SafeBrowsing4::Storage->new(
                # Constructor parameters vary based on the implementation
                ...
        );

PUBLIC FUNCTIONS

save()

Add chunk information to the local database

  $storage->save(add => [...], remove => [...], state => '...', list => { threatType => ..., threatEntryType => ..., platformType => ... });

Return the new list of local hashes.

Arguments

override

Optional. override the local list of hashes. 0 by default (do not override)

add

Optional. List of hashes to add.

remove

Optional. List of hash indexes to remove.

state

Optional. New list state.

list

Required. Google Safe Browsing list.

reset()

Remove all local data.

        $storage->reset(list => { threatType => ..., threatEntryType => ..., platformType => ... });

Arguments

list

Required. Google Safe Browsing list.

No return value

next_update()

Ge the timestamp when the local database update is allowed.

        my $next = $storage->next_update();

No arguments

get_state()

Return the current state of the list.

        my $state = $storage->get_state(list => { threatType => ..., threatEntryType => ..., platformType => ... });

Arguments

list

Required. Google Safe Browsing list.

get_prefixes()

Return the list of prefxies that match a full hash for a given list.

        my @prefixes = $storage->get_prefixes(hashes => [...], list => { threatType => ..., threatEntryType => ..., platformType => ... });

Arguments

list

Required. Google Safe Browsing list.

hashes

Required. List of full hashes.

updated()

Save information about a successful database update

        $storage->updated('time' => time(), next => time() + 1800);

Arguments

time

Required. Time of the update.

next

Required. Time of the next update allowed.

No return value

get_full_hashes()

Return a list of full hashes

        $storage->get_full_hashes(hash => AAAAAAAA..., lists => [{ threatType => '...', threatEntryType => '...', platformType => '...' }]);

Arguments

hash

Required. 32-bit hash

lists

Required. Google Safe Browsing lists

Return value

    Array of full hashes:

        ({ hash => HEX, type => 0 }, { hash => HEX, type => 1 }, { hash => HEX, type => 0 })

update_error()

Save information about a failed database update

        $storage->update_error('time' => time(), wait => 60, errors => 1);

Arguments

time

Required. Time of the update.

wait

Required. Number of seconds to wait before doing the next update.

errors

Required. Number of errors.

No return value

last_update()

Return information about the last database update

        my $info = $storage->last_update();

No arguments

Return value

    Hash reference

            {
                    time    => time(),
                    errors  => 0
            }

add_full_hashes()

Add full hashes to the local database

        $storage->add_full_hashes(timestamp => time(), full_hashes => [{hash => HEX, list => { }, cache => "300s"}]);

Arguments

timestamp

Required. Time when the full hash was retrieved.

full_hashes

Required. Array of full hashes. Each element is an hash reference in the following format:

        {
                hash            => HEX,
                list            => { }',
                cache => "300s"
        }

No return value

full_hash_error()

Save information about failed attempt to retrieve a full hash

        $storage->full_hash_error(timestamp => time(), prefix => HEX);

Arguments

timestamp

Required. Time when the Google returned an error.

prefix

Required. Host prefix.

No return value

full_hash_ok()

Save information about a successful attempt to retrieve a full hash

        $storage->full_hash_ok(timestamp => time(), prefix => HEX);

Arguments

timestamp

Required. Time when the Google returned an error.

prefix

Required. Host prefix.

No return value

get_full_hash_error()

Get information about an unsuccessful attempt to retrieve a full hash

        my $info = $storage->get_full_hash_error(prefix => HEX);

Arguments

prefix

Required. Host prefix.

Return value

    undef if there was no error

    Hash reference in the following format if there was an error:

            {
                    timestamp       => time(),
                    errors          => 3
            }

get_lists()

Gets all threat list names from Google Safe Browsing stored.

        my $lists = $storage->get_lists();

Returns an array reference of all the lists:

        [
                {
                        'threatEntryType' => 'URL',
                        'threatType' => 'MALWARE',
                        'platformType' => 'ANY_PLATFORM'
                },
                {
                        'threatEntryType' => 'URL',
                        'threatType' => 'MALWARE',
                        'platformType' => 'WINDOWS'
                },
                ...
        ]

        or C<undef> on error.

save_lists()

Store the threat list names from Google Safe Browsing.

        my $lists = $storage->save_lists(
                        [
                        {
                                'threatEntryType' => 'URL',
                                'threatType' => 'MALWARE',
                                'platformType' => 'ANY_PLATFORM'
                        },
                        {
                                'threatEntryType' => 'URL',
                                'threatType' => 'MALWARE',
                                'platformType' => 'WINDOWS'
                        },
                        ...
                ]
        );

        or C<undef> on error.

SEE ALSO

See Net::Google::SafeBrowsing4 for handling Google Safe Browsing v4.

See Net::Google::SafeBrowsing4::Storage::File for an example of storing and managing the Google Safe Browsing database.

Google Safe Browsing v4 API: https://developers.google.com/safe-browsing/v4/

AUTHOR

Julien Sobrier, <julien@sobrier.net>

COPYRIGHT AND LICENSE

Copyright (C) 2016 by Julien Sobrier

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 179:

'=item' outside of any '=over'