Advertisement
Guest User

Untitled

a guest
Oct 30th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. # login that worked but fails now with error : Salt must be exactly 16 octets long at lib/PearlBee/Password.pm line 24.
  2. # this is inside Authentification.pm
  3. sub generate_hash {
  4. return -1 if @_ < 1 || @_ > 2;
  5.  
  6. my $password = shift;
  7. my $salt = decode_base64(shift);
  8. my $hashref = {};
  9. $salt = rand_bits(128) unless $salt;
  10.  
  11. my $bcrypt = Digest->new('Bcrypt');
  12. $bcrypt->cost(12);
  13. $bcrypt->salt($salt);
  14. $bcrypt->add($password);
  15.  
  16. $hashref->{hash} = $bcrypt->hexdigest;
  17. $hashref->{salt} = encode_base64($salt);
  18.  
  19. return $hashref;
  20. }
  21.  
  22. # in the route for the above validation :
  23. my $password_hash = generate_hash($password, $user->{salt}) if $user;
  24. warn $password_hash->{hash};
  25. #warn $user->validate($password->{});
  26.  
  27.  
  28. if ( $user && $user->password eq $password_hash->{hash} ) {
  29.  
  30. my $user_obj->{is_admin} = $user->is_admin;
  31. $user_obj->{role} = $user->role;
  32. $user_obj->{id} = $user->id;
  33. $user_obj->{username} = $user->username;
  34.  
  35. session user => $user_obj;
  36. session user_id => $user->id;
  37.  
  38. redirect('/dashboard');
  39. }
  40. else {
  41. template 'login', { warning => "Login failed for the provided username/password pair." }, { layout => 'admin' };
  42. }
  43. };
  44.  
  45. # new sub which fails
  46. # this is inside User.pm
  47. sub validate {
  48. my ($self, $password) = @_;
  49.  
  50. my $hashed = crypt( $password, $self->password );
  51.  
  52. return $self->password eq $hashed;
  53. }
  54.  
  55. #inside the route
  56. post '/login' => sub {
  57. my $password = params->{password};
  58. my $username = params->{username};
  59.  
  60. my $user = resultset("User")->search({
  61. username => $username,
  62. -or => [
  63. status => 'activated',
  64. status => 'deactivated'
  65. ]
  66. })->first;
  67.  
  68. if ( $user and $user->validate($password) ) {
  69.  
  70. my $user_obj->{is_admin} = $user->is_admin;
  71. $user_obj->{role} = $user->role;
  72. $user_obj->{id} = $user->id;
  73. $user_obj->{username} = $user->username;
  74.  
  75. session user => $user_obj;
  76. session user_id => $user->id;
  77.  
  78. redirect('/dashboard');
  79. }
  80. else {
  81. template 'login', { warning => "Login failed for the provided username/password pair." }, { layout => 'admin' };
  82. }
  83. };
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement