Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
Provider
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 6
182
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 setHttpClient
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 createResourceOwner
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getResourceOwnerData
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
20
 getOptionsFromJsonFile
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 getBasicOptionsFromJsonFile
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace BO\Slim\Middleware\OAuth\Keycloak;
4
5use Stevenmaguire\OAuth2\Client\Provider\Keycloak;
6use BO\Zmsclient\PSR7\Client;
7use League\OAuth2\Client\Token\AccessToken;
8use BO\Zmsentities\Useraccount;
9
10/**
11 * @SuppressWarnings(PHPMD)
12 */
13
14class Provider extends Keycloak
15{
16    const PROVIDERNAME = 'keycloak';
17
18    protected $oauthService;
19
20    public function __construct($client = null, ?\BO\Zmsclient\OAuthService $oauthService = null)
21    {
22        $this->oauthService = $oauthService ?: new \BO\Zmsclient\OAuthService(\App::$http, \App::CONFIG_SECURE_TOKEN);
23        $client = ((null === $client)) ? new Client() : $client;
24        $options = $this->getOptionsFromJsonFile();
25        return parent::__construct($options, ['httpClient' => $client]);
26    }
27
28    #[\Override]
29    public function setHttpClient($client)
30    {
31        $this->httpClient = $client;
32        return $this;
33    }
34
35    #[\Override]
36    protected function createResourceOwner(array $response, AccessToken $token): ResourceOwner
37    {
38        return new ResourceOwner($response);
39    }
40
41    public function getResourceOwnerData(AccessToken $token): Useraccount
42    {
43        $resourceOwner = $this->getResourceOwner($token);
44        $config = $this->oauthService->readConfig();
45        $ownerData['username'] = $resourceOwner->getName() . '@' . static::PROVIDERNAME;
46        if (1 == $config->getPreference('oidc', 'onlyVerifiedMail')) {
47            $email = $resourceOwner->getEmail();
48            if ($email && $resourceOwner->toArray()['email_verified'] ?? false) {
49                $ownerData['email'] = $email;
50            }
51        } else {
52            $ownerData['email'] = $resourceOwner->getEmail();
53        }
54        return new Useraccount($ownerData);
55    }
56
57    private function getOptionsFromJsonFile(): array
58    {
59        $config_data = file_get_contents(\App::APP_PATH . '/' . static::PROVIDERNAME . '.json');
60        if (gettype($config_data) === 'string') {
61            $config_data = json_decode($config_data, true);
62        }
63        $realmData = $this->getBasicOptionsFromJsonFile();
64        $realmData['clientSecret'] = $config_data['credentials']['secret'];
65        $realmData['authServerUrl'] = $config_data['auth-server-url'];
66        $realmData['verify'] = $config_data['ssl-verify'] ?? true;
67        return $realmData;
68    }
69
70    public function getBasicOptionsFromJsonFile(): array
71    {
72        $config_data = file_get_contents(\App::APP_PATH . '/' . static::PROVIDERNAME . '.json');
73        if (gettype($config_data) === 'string') {
74            $config_data = json_decode($config_data, true);
75        }
76        $realmData['realm'] = $config_data['realm'];
77        $realmData['clientId'] = $config_data['clientId'];
78        $realmData['clientName'] = $config_data['clientName'];
79        $realmData['redirectUri'] = $config_data['auth-redirect-url'];
80        $realmData['logoutUri'] = $config_data['logout-redirect-url'];
81        $realmData['version'] = $config_data['version'];
82        $realmData['accessRole'] = $config_data['access-role'];
83        return $realmData;
84    }
85}