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

###########################################################################
# A user gets one system wide login, and a separate account for each app. #
###########################################################################

use strict;
use warnings;

use vars qw($VERSION);
$VERSION = '0.04';

use parent 'Yote::Obj';

use Yote;

sub _load {
    my $self = shift;
    $self->set_is_root( $self->get__is_root() );
}

sub is_root {
    my $self = shift;
    return $self->get__is_root();
} #is_root

sub is_master_root {
    my $self = shift;
    return $self->get__is_master_root();    
}

sub is_validated {
    my $self = shift;
    return $self->get__is_validated();
}

#
# Can either be reset by logged in account, or by a recovery link.
#
sub reset_password {
    my( $self, $args, $account ) = @_;

    my $oldpass        = $args->{op};
    my $newpass        = $args->{p};
    my $newpass_verify = $args->{p2};

    die "Unable to find account" unless $account;

    die "Passwords do not match" unless $newpass eq $newpass_verify;

    die "Old Password is incorrect" unless $self->get__password() eq Yote::encrypt_pass( $oldpass, $self->get_handle() );

    $self->set__password( Yote::encrypt_pass($newpass, $self->get_handle()) );
    return "Password Reset";

} #reset_password


sub upload_avatar {
    my( $self, $data ) = @_;
    $self->set_avatar( $data->{avatar} );
}

sub Avatar {
    my $self = shift;
    return $self->get_avatar();
}

1;

__END__

=head1 NAME

Yote::Login

=head1 DESCRIPTION

Each user gets a single login for the yote system. The Yote::Login objects are 
container objects that store state data for the users.

=head1 PUBLIC METHODS

=over 4

=item is_master_root

Returns true if the account is the original root account

=item is_root

Returns true if the account has root privileges.

=item is_validated

Returns true if the account has validated.

=item reset_password

Resets the password for this login taking a hash reference as an argument with the keys 'op' for old password, 
'p' for password and 'p2' for password verification. Returns 'Password Reset'.

=item upload_avatar

Create a Yote::FileHelper object representing the avatar image. 
The file control name is 'avatar' that uploads the avatar image.

=item Avatar

Returns a Yote::FileHelper object representing the avatar image.

=back

=head1 PUBLIC DATA FIELDS

=over 4

=item email

=item handle

=back

=head1 PRIVATE DATA FIELDS

=over 4

=item __created_ip

=item __is_master_root

=item __is_root

=item __time_created

=item _password

=back

=head1 AUTHOR

Eric Wolf
coyocanid@gmail.com
http://madyote.com

=head1 LICENSE AND COPYRIGHT

Copyright (C) 2011 Eric Wolf

This module is free software; it can be used under the same terms as perl
itself.

=cut