Class-User-DBI
view release on metacpan or search on metacpan
lib/Class/User/DBI.pm view on Meta::CPAN
sub load_profile {
my $self = shift;
my $sth = $self->_db_run( $USER_QUERY{SQL_load_profile}, $self->userid );
my $hr = $sth->fetchrow_hashref;
if ( $self->get_role ) {
my $rp = $self->role_privileges;
$hr->{privileges} = [ $rp->fetch_privileges ];
}
my $ud = $self->user_domains;
$hr->{domains} = [ $ud->fetch_domains ];
return $hr;
}
sub add_ips {
my ( $self, @ips ) = @_;
return if !$self->exists_user;
# We don't want to insert IP's already in the DB.
my @ips_in_db = $self->get_valid_ips;
my %uniques;
@uniques{@ips_in_db} = ();
my @ips_to_insert = grep { !exists $uniques{$_} } @ips;
return 0 if !@ips_to_insert;
# Prepare the userid,ip bundles for our insert query.
my @execution_param_bundles =
map { [ $self->userid, unpack( 'N', inet_aton($_) ) ] } @ips_to_insert;
my $sth =
$self->_db_run( $USER_QUERY{SQL_add_ips}, @execution_param_bundles );
return scalar @ips_to_insert; # Return a count of IP's inserted.
}
sub delete_ips {
my ( $self, @ips ) = @_;
return if !$self->exists_user;
my @ips_in_db = $self->get_valid_ips;
my %found;
@found{@ips_in_db} = ();
my @ips_for_deletion = grep { exists $found{$_} } @ips;
my @execution_param_bundles =
map { [ $self->userid, unpack( 'N', inet_aton($_) ) ] } @ips_for_deletion;
my $sth =
$self->_db_run( $USER_QUERY{SQL_delete_ips}, @execution_param_bundles );
return scalar @ips_for_deletion; # Return a count of IP's deleted.
}
# Fetches all IP's that are whitelisted for the user.
sub get_valid_ips {
my $self = shift;
my $sth = $self->_db_run( $USER_QUERY{SQL_get_valid_ips}, $self->userid );
my @rv;
while ( defined( my $row = $sth->fetchrow_arrayref ) ) {
if ( defined $row->[0] ) {
push @rv, inet_ntoa( pack 'N', $row->[0] );
}
}
return @rv;
}
sub update_password {
my ( $self, $newpass, $oldpass ) = @_;
return if !$self->exists_user;
# If an old passphrase is supplied, only update if it validates.
if ( defined $oldpass ) {
my $credentials = $self->get_credentials;
my $auth = Authen::Passphrase::SaltedSHA512->new(
salt_hex => $credentials->{salt_hex},
hash_hex => $credentials->{pass_hex}
);
# Return undef if password doesn't authenticate for the user.
return unless $auth->match($oldpass); ## no critic (postfix)
}
my $passgen =
Authen::Passphrase::SaltedSHA512->new( passphrase => $newpass );
my $salt_hex = $passgen->salt_hex;
my $hash_hex = $passgen->hash_hex;
$self->_db_conn->txn(
fixup => sub {
my $sth = $_->prepare( $USER_QUERY{SQL_update_password} );
$sth->execute( $salt_hex, $hash_hex, $self->userid );
}
);
return $self->userid;
}
sub set_email {
my ( $self, $new_email ) = @_;
croak 'Can\'t set a user email for a user ID that doesn\'t exist.'
if !$self->exists_user;
my $sth =
$self->_db_run( $USER_QUERY{SQL_set_email}, $new_email, $self->userid );
return $new_email;
}
sub set_username {
my ( $self, $new_username ) = @_;
croak 'Can\'t set a user name for a user ID that doesn\'t exist.'
if !$self->exists_user;
my $sth = $self->_db_run( $USER_QUERY{SQL_set_username},
$new_username, $self->userid );
return 1;
}
sub set_ip_required {
my ( $self, $required ) = @_;
croak 'Can\'t set an IP requirement for a user ID that doesn\'t exist.'
if ! $self->exists_user;
$required = defined $required ? $required : 0;
$required = $required ? 1 : 0;
my $sth = $self->_db_run( $USER_QUERY{SQL_set_ip_required},
$required, $self->userid );
return 1;
}
sub get_ip_required {
my $self = shift;
( run in 0.891 second using v1.01-cache-2.11-cpan-e1769b4cff6 )