Issues (1)

src/BasicAuth.php (1 issue)

1
<?php
2
3
namespace PFlorek\BasicAuth;
4
5
use Psr\Http\Message\MessageInterface;
6
use Psr\Http\Message\RequestInterface;
7
use Psr\Http\Message\ResponseInterface;
8
9
class BasicAuth
10
{
11
    /**
12
     * Obtain username and password
13
     *
14
     * @param RequestInterface $request
15
     * @return CredentialsInterface|null
16
     */
17
    public function obtainCredentials($request)
18
    {
19
        $header = $request->getHeader('Authorization');
20
21
        if (!$header) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $header of type string[] is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
22
            return null;
23
        }
24
25
        $header = array_shift($header);
26
27
        $matches = [];
28
        if (!preg_match('/Basic (.*)$/', $header, $matches)) {
29
            return null;
30
        }
31
32
        list($username, $password) = \PFlorek\BasicAuth\retrieve_username_and_password($matches[1]);
33
34
        return new Credentials($username, $password);
35
    }
36
37
    /**
38
     * Add WWW-Authenticate header field to receive authorization.
39
     *
40
     * @param RequestInterface $request
41
     * @param CredentialsInterface $credentials
42
     * @return ResponseInterface|MessageInterface
43
     */
44
    public function addCredentials($request, $credentials)
45
    {
46
        $basicCredentials = \PFlorek\BasicAuth\create_basic_credentials($credentials->getUsername(), $credentials->getPassword());
47
48
        return $request->withHeader('WWW-Authenticate', "Basic {$basicCredentials}");
49
    }
50
51
    /**
52
     * Add 401 (Unauthorized) status code and WWW-Authenticate header field to reply with a challenge.
53
     *
54
     * @param ResponseInterface $response
55
     * @param string $realm
56
     * @return ResponseInterface|MessageInterface
57
     */
58
    public function addChallenge($response, $realm) {
59
        return $response
60
            ->withStatus(401)
61
            ->withHeader('WWW-Authenticate', "Basic realm=\"{$realm}\"");
62
    }
63
}