Newer
Older
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
/**
* Copyright (C) 2019 Leipzig University Library
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* @author Sebastian Kehr <kehr@ub.uni-leipzig.de>
* @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2
*/
namespace fid\Service;
use Psr\Container\ContainerInterface;
use Psr\Http\Client\ClientInterface as HttpClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\UriFactoryInterface;
use Symfony\Component\Serializer\SerializerInterface;
use VuFind\Config\PluginManager;
use VuFind\Cookie\CookieManager;
use Zend\Config\Config;
use Zend\Session\Container as Session;
use Zend\Session\SessionManager;
class ClientFactory
{
protected const CONFIG_KEY = 'fid';
protected const ERROR_CONFIG_FILE = 'Invalid configuration file "%s.ini".';
/**
* @param ContainerInterface $container
*
* @return Client
* @throws ClientException
*/
public function __invoke(ContainerInterface $container): Client
{
$config = $container->get(PluginManager::class)
->get(self::CONFIG_KEY)->Client;
if (!$config instanceof Config || !$config->baseUrl) {
$message = sprintf(self::ERROR_CONFIG_FILE, self::CONFIG_KEY);
throw new ClientException($message);
}
/** @var SessionManager $sessionManager */
$sessionManager = $container->get(SessionManager::class);
$session = new Session(Client::class, $sessionManager);
/** @var CookieManager $cookies */
$cookies = $container->get(CookieManager::class);
/** @var SerializerInterface $serializer */
$serializer = $container->get(SerializerInterface::class);
/** @var HttpClientInterface $httpClient */
$httpClient = $container->get(HttpClientInterface::class);
/** @var UriFactoryInterface $uriFactory */
$uriFactory = $container->get(UriFactoryInterface::class);
/** @var StreamFactoryInterface $streamFactory */
$streamFactory = $container->get(StreamFactoryInterface::class);
/** @var RequestFactoryInterface $requestFactory */
$requestFactory = $container->get(RequestFactoryInterface::class);
return new Client($config->toArray(), $session, $cookies, $serializer,
$httpClient, $uriFactory, $streamFactory, $requestFactory);
}
}