Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 25 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
AuthorizationAggregator | |
0.00% |
0 / 25 |
|
0.00% |
0 / 6 |
210 | |
0.00% |
0 / 1 |
getAuthorizationProvider | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
verifyStartAuthorization | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
6 | |||
verifyResumeAuthorization | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
getProviders | |
0.00% |
0 / 8 |
|
0.00% |
0 / 1 |
30 | |||
addProvider | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
unregister | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
12 |
1 | <?php |
2 | |
3 | /** |
4 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License |
6 | * as published by the Free Software Foundation; under version 2 |
7 | * of the License (non-upgradable). |
8 | * |
9 | * This program is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write to the Free Software |
16 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | * |
18 | * Copyright (c) 2016 (original work) Open Assessment Technologies SA; |
19 | * |
20 | */ |
21 | |
22 | namespace oat\taoDelivery\model\authorization\strategy; |
23 | |
24 | use oat\oatbox\event\EventManager; |
25 | use oat\oatbox\service\ConfigurableService; |
26 | use oat\taoDelivery\model\authorization\AuthorizationProvider; |
27 | use oat\taoDelivery\model\authorization\AuthorizationService; |
28 | use oat\oatbox\user\User; |
29 | use oat\taoDelivery\model\execution\DeliveryExecutionInterface; |
30 | use oat\taoDelivery\models\classes\execution\event\DeliveryExecutionVerified; |
31 | use Zend\ServiceManager\ServiceLocatorAwareInterface; |
32 | |
33 | /** |
34 | * An Authorization Aggregator, that requires all internal |
35 | * authorization providers to allow access |
36 | */ |
37 | class AuthorizationAggregator extends ConfigurableService implements AuthorizationService, AuthorizationProvider |
38 | { |
39 | public const OPTION_PROVIDERS = 'providers'; |
40 | |
41 | private $providers; |
42 | |
43 | /** |
44 | * Returns the base authorization provider. |
45 | * |
46 | * @return AuthorizationProvider |
47 | */ |
48 | public function getAuthorizationProvider() |
49 | { |
50 | return $this; |
51 | } |
52 | |
53 | /** |
54 | * Verify that a given delivery is allowed to be started |
55 | * |
56 | * @param string $deliveryId |
57 | * @throws \common_exception_Unauthorized |
58 | */ |
59 | public function verifyStartAuthorization($deliveryId, User $user) |
60 | { |
61 | foreach ($this->getProviders() as $provider) { |
62 | $provider->verifyStartAuthorization($deliveryId, $user); |
63 | } |
64 | } |
65 | |
66 | /** |
67 | * Verify that a given delivery execution is allowed to be executed |
68 | * |
69 | * @param DeliveryExecutionInterface $deliveryExecution |
70 | * @param User $user |
71 | */ |
72 | public function verifyResumeAuthorization(DeliveryExecutionInterface $deliveryExecution, User $user) |
73 | { |
74 | foreach ($this->getProviders() as $provider) { |
75 | $provider->verifyResumeAuthorization($deliveryExecution, $user); |
76 | } |
77 | $this |
78 | ->getServiceManager() |
79 | ->get(EventManager::SERVICE_ID) |
80 | ->trigger(new DeliveryExecutionVerified($deliveryExecution)); |
81 | } |
82 | |
83 | /** |
84 | * Returns a list of providers that need to be verified |
85 | * |
86 | * @return AuthorizationProvider[] |
87 | */ |
88 | protected function getProviders() |
89 | { |
90 | if (is_null($this->providers)) { |
91 | $this->providers = []; |
92 | if ($this->hasOption(self::OPTION_PROVIDERS)) { |
93 | foreach ($this->getOption(self::OPTION_PROVIDERS) as $provider) { |
94 | if ($provider instanceof ServiceLocatorAwareInterface) { |
95 | $provider->setServiceLocator($this->getServiceLocator()); |
96 | } |
97 | $this->providers[] = $provider; |
98 | } |
99 | } |
100 | } |
101 | return $this->providers; |
102 | } |
103 | |
104 | /** |
105 | * Add an additional authorization provider that needs |
106 | * to be satisfied as well |
107 | * |
108 | * @param AuthorizationProvider $provider |
109 | */ |
110 | public function addProvider(AuthorizationProvider $provider) |
111 | { |
112 | $providers = $this->getOption(self::OPTION_PROVIDERS); |
113 | $providers[] = $provider; |
114 | $this->setOption(self::OPTION_PROVIDERS, $providers); |
115 | } |
116 | |
117 | /** |
118 | * Remove an existing authorization provider, identified by |
119 | * exact class |
120 | * |
121 | * @param $providerClass |
122 | * @internal param AuthorizationProvider $provider |
123 | */ |
124 | public function unregister($providerClass) |
125 | { |
126 | $providers = $this->getOption(self::OPTION_PROVIDERS); |
127 | foreach ($providers as $key => $provider) { |
128 | if (get_class($provider) == $providerClass) { |
129 | unset($providers[$key]); |
130 | } |
131 | } |
132 | $this->setOption(self::OPTION_PROVIDERS, $providers); |
133 | } |
134 | } |