summaryrefslogtreecommitdiff
path: root/lib/Ultramarine/Model/Users.pm6
blob: ad52ab41fae4cab09b5dd1acb137485d8cb9a755 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use v6.d.PREVIEW;
use Digest::MD5;
use experimental :pack;
 
class Ultramarine::Model::Users {
    has %!accounts;
 
    submethod BUILD(:%!accounts{}
    
    multi method authenticate(:$user!,:$password! is copy{
        $password ~~ s[^enc\:(.+)$] = pack('H*',$/[0]).decode('UTF-8');
        
        return (%!accounts{$user} && %!accounts{$user} eq $password);
    }
 
    multi method authenticate(:$user!,:$token!,:$salt!{
        return unless my $password = %!accounts{$user};
 
        my $expected_token = Digest::MD5.md5_hex(
            $password ~ $salt
        );
 
        return $token eq $expected_token;
    }
}