summaryrefslogtreecommitdiff
path: root/lib/Ultramarine/Middleware/Authentication.pm6
blob: d71f75c84f3a99ddc0ddff86d0fe02d2d9ff10ef (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
26
27
28
29
30
use v6.d.PREVIEW;
use Cro::HTTP::Middleware;
 
# mixin for requests, carrying authentication info 
role Ultramarine::Request::Authed {
    has Str $.user;
}
 
class Ultramarine::Middleware::Authentication
 does Cro::HTTP::Middleware::Request {
    has $.users;
    method process(Supply:D $request-stream{
        supply whenever $request-stream -> $request {
            # here we would have some proper authentication logic 
            my $user = $request.query-value('u')[0];
            my $valid;
            if (my $password = $request.query-value('p')[0]) {
                $valid = $.users.authenticate(:$user,:$password);
            }
            elsif (my $token = $request.query-value('t')[0]
                   and my $salt = $request.query-value('s')[0]) {
                $valid = $.users.authenticate(:$user,:$token,:$salt);
            }
            $request does Ultramarine::Request::Authed(:user($user))
                if $valid;
 
            emit $request;
        }
    }
}