1<?php
2
3namespace Sabre\HTTP\Auth;
4
5/**
6 * HTTP Basic authentication utility.
7 *
8 * This class helps you setup basic auth. The process is fairly simple:
9 *
10 * 1. Instantiate the class.
11 * 2. Call getCredentials (this will return null or a user/pass pair)
12 * 3. If you didn't get valid credentials, call 'requireLogin'
13 *
14 * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
15 * @author Evert Pot (http://evertpot.com/)
16 * @license http://sabre.io/license/ Modified BSD License
17 */
18class Basic extends AbstractAuth {
19
20    /**
21     * This method returns a numeric array with a username and password as the
22     * only elements.
23     *
24     * If no credentials were found, this method returns null.
25     *
26     * @return null|array
27     */
28    function getCredentials() {
29
30        $auth = $this->request->getHeader('Authorization');
31
32        if (!$auth) {
33            return null;
34        }
35
36        if (strtolower(substr($auth, 0, 6)) !== 'basic ') {
37            return null;
38        }
39
40        $credentials = explode(':', base64_decode(substr($auth, 6)), 2);
41
42        if (2 !== count($credentials)) {
43            return null;
44        }
45
46        return $credentials;
47
48    }
49
50    /**
51     * This method sends the needed HTTP header and statuscode (401) to force
52     * the user to login.
53     *
54     * @return void
55     */
56    function requireLogin() {
57
58        $this->response->addHeader('WWW-Authenticate', 'Basic realm="' . $this->realm . '", charset="UTF-8"');
59        $this->response->setStatus(401);
60
61    }
62
63}
64