1<?php
2/**
3 * @see       https://github.com/zendframework/zend-diactoros for the canonical source repository
4 * @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com)
5 * @license   https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
6 */
7
8namespace Zend\Diactoros;
9
10use function is_callable;
11
12/**
13 * Marshal the $_SERVER array
14 *
15 * Pre-processes and returns the $_SERVER superglobal. In particularly, it
16 * attempts to detect the Authorization header, which is often not aggregated
17 * correctly under various SAPI/httpd combinations.
18 *
19 * @param array $server
20 * @param null|callable $apacheRequestHeaderCallback Callback that can be used to
21 *     retrieve Apache request headers. This defaults to
22 *     `apache_request_headers` under the Apache mod_php.
23 * @return array Either $server verbatim, or with an added HTTP_AUTHORIZATION header.
24 */
25function normalizeServer(array $server, callable $apacheRequestHeaderCallback = null)
26{
27    if (null === $apacheRequestHeaderCallback && is_callable('apache_request_headers')) {
28        $apacheRequestHeaderCallback = 'apache_request_headers';
29    }
30
31    // If the HTTP_AUTHORIZATION value is already set, or the callback is not
32    // callable, we return verbatim
33    if (isset($server['HTTP_AUTHORIZATION'])
34        || ! is_callable($apacheRequestHeaderCallback)
35    ) {
36        return $server;
37    }
38
39    $apacheRequestHeaders = $apacheRequestHeaderCallback();
40    if (isset($apacheRequestHeaders['Authorization'])) {
41        $server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['Authorization'];
42        return $server;
43    }
44
45    if (isset($apacheRequestHeaders['authorization'])) {
46        $server['HTTP_AUTHORIZATION'] = $apacheRequestHeaders['authorization'];
47        return $server;
48    }
49
50    return $server;
51}
52