Mojolicious-Plugin-ContextAuth

 view release on metacpan or  search on metacpan

lib/Mojolicious/Plugin/ContextAuth/DB/User.pm  view on Meta::CPAN


    my $error;
    try {
        $self->dbh->db->insert( corbac_users => \%params);
    } 
    catch {
        $self->error( 'Invalid parameter' );
        $error = $_;
    };

    return if $error;

    my $user = $self->load( $params{user_id} );
    return $user;
}

sub delete ($self, $id = $self->user_id) {
    $self->error('');
    
    if ( !$id ) {
        $self->error( "Need user id" );
        return;
    }

    if ( ref $id ) {
        $self->error( "Invalid user id" );
        return;
    }
    
    my $error;
    my $result;

    try {
        my $tx = $self->dbh->db->begin;

        $self->dbh->db->delete(
            corbac_user_sessions => { user_id => $id },
        );

        $self->dbh->db->delete(
            corbac_user_context_roles => { user_id => $id }
        );

        $result = $self->dbh->db->delete(
            corbac_users => {
                user_id => $id,
            }
        );

        $tx->commit;
    }
    catch {
        $self->error( "Cannot delete user: " . $_ );
        $error = 1;
    };

    return if $error;
    return $result->rows;
}

sub update ($self, @params) {
    $self->error('');
    
    my $id = @params % 2 ? shift @params : $self->user_id;
    my %to_update = @params;

    if ( length $to_update{username} > 255 || length $to_update{username} < 3 ) {
        $self->error( 'Invalid parameter' );
        return;
    }

    delete $to_update{user_id};

    _crypt( \%to_update ) if exists $to_update{user_password};

    my $result;
    my $error;
    try {
        $result = $self->dbh->db->update(
            corbac_users => \%to_update,
            { user_id => $id }
        );
    }
    catch {
        $self->error( 'Invalid parameter' );
        $error = $_;
    };

    return if $error;

    if ( !$result->rows ) {
        $self->error( 'No user updated' );
        return;
    }

    return $self->load( $id );
}

sub _crypt ( $params ) {
    my $cost     = 12;
    my $settings = '$2a' . sprintf '$%02i', $cost;

    $params->{user_password} = Crypt::Eksblowfish::Bcrypt::bcrypt(
        $params->{user_password},
        $settings . '$' . Crypt::Eksblowfish::Bcrypt::en_base64(Crypt::URandom::urandom(16)),
    );
}

sub add_session ( $self, $session_id ) {
    $self->error('');
    
    $self->dbh->db->insert( corbac_user_sessions => {
        user_id         => $self->user_id,
        session_id      => $session_id, 
        session_started => time,
    });

    return 1;
}

sub search ($self, %params) {



( run in 0.630 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )