|
7 | 7 | use \SimpleSAML\Auth\ProcessingFilter; |
8 | 8 | use SimpleSAML\Module\perun\Adapter; |
9 | 9 | use SimpleSAML\Logger; |
| 10 | +use SimpleSAML\Module\perun\EntitlementUtils; |
10 | 11 |
|
11 | 12 | /** |
12 | 13 | * Class PerunEntitlement |
@@ -77,16 +78,25 @@ public function process(&$request) |
77 | 78 |
|
78 | 79 | if (isset($request['perun']['groups'])) { |
79 | 80 | $eduPersonEntitlement = $this->getEduPersonEntitlement($request); |
80 | | - $capabilities = $this->getCapabilities($request); |
| 81 | + $capabilities = EntitlementUtils::getCapabilities( |
| 82 | + $request, |
| 83 | + $this->adapter, |
| 84 | + $this->entitlementPrefix, |
| 85 | + $this->entitlementAuthority |
| 86 | + ); |
81 | 87 | } else { |
82 | 88 | Logger::debug( |
83 | | - 'perun:PerunEntitlement: There are no user groups assign to facility.' . |
84 | | - '=> Skipping getEduPersonEntitlement and getResourceCapabilities' |
| 89 | + 'perun:PerunEntitlement: There are no user groups assigned to facility.' . |
| 90 | + '=> Skipping getEduPersonEntitlement and getCapabilities' |
85 | 91 | ); |
86 | 92 | } |
87 | 93 |
|
88 | 94 | if ($this->releaseForwardedEntitlement) { |
89 | | - $forwardedEduPersonEntitlement = $this->getForwardedEduPersonEntitlement($request); |
| 95 | + $forwardedEduPersonEntitlement = EntitlementUtils::getForwardedEduPersonEntitlement( |
| 96 | + $request, |
| 97 | + $this->adapter, |
| 98 | + $this->forwardedEduPersonEntitlement |
| 99 | + ); |
90 | 100 | } |
91 | 101 |
|
92 | 102 | $request['Attributes'][$this->eduPersonEntitlement] = array_unique(array_merge( |
@@ -126,76 +136,11 @@ private function getEduPersonEntitlement(&$request) |
126 | 136 | return $eduPersonEntitlement; |
127 | 137 | } |
128 | 138 |
|
129 | | - private function getForwardedEduPersonEntitlement(&$request) |
130 | | - { |
131 | | - $forwardedEduPersonEntitlement = []; |
132 | | - |
133 | | - if (!isset($request['perun']['user'])) { |
134 | | - Logger::debug( |
135 | | - 'perun:PerunEntitlement: Object Perun User is not specified.' . |
136 | | - '=> Skipping getting forwardedEntitlement.' |
137 | | - ); |
138 | | - return $forwardedEduPersonEntitlement; |
139 | | - } |
140 | | - |
141 | | - $user = $request['perun']['user']; |
142 | | - |
143 | | - try { |
144 | | - $forwardedEduPersonEntitlementMap = $this->adapter->getUserAttributesValues( |
145 | | - $user, |
146 | | - [$this->forwardedEduPersonEntitlement] |
147 | | - ); |
148 | | - } catch (Exception $exception) { |
149 | | - Logger::error( |
150 | | - 'perun:PerunEntitlement: Exception ' . $exception->getMessage() . |
151 | | - ' was thrown in method \'getForwardedEduPersonEntitlement\'.' |
152 | | - ); |
153 | | - } |
154 | | - |
155 | | - if (!empty($forwardedEduPersonEntitlementMap)) { |
156 | | - $forwardedEduPersonEntitlement = array_values($forwardedEduPersonEntitlementMap)[0]; |
157 | | - } |
158 | | - |
159 | | - return $forwardedEduPersonEntitlement; |
160 | | - } |
161 | | - |
162 | | - private function getCapabilities(&$request) |
163 | | - { |
164 | | - $resourceCapabilities = []; |
165 | | - $facilityCapabilities = []; |
166 | | - $capabilitiesResult = []; |
167 | | - |
168 | | - $spEntityId = $this->getSpEntityId($request); |
169 | | - try { |
170 | | - $resourceCapabilities = $this->adapter->getResourceCapabilities($spEntityId, $request['perun']['groups']); |
171 | | - $facilityCapabilities = $this->adapter->getFacilityCapabilities($spEntityId); |
172 | | - } catch (Exception $exception) { |
173 | | - Logger::error( |
174 | | - 'perun:PerunEntitlement: Exception ' . $exception->getMessage() . |
175 | | - ' was thrown in method \'getCapabilities\'.' |
176 | | - ); |
177 | | - } |
178 | | - |
179 | | - $capabilities = array_unique(array_merge($resourceCapabilities, $facilityCapabilities)); |
180 | | - |
181 | | - foreach ($capabilities as $capability) { |
182 | | - $wrappedCapability = $this->capabilitiesWrapper($capability); |
183 | | - array_push($capabilitiesResult, $wrappedCapability); |
184 | | - } |
185 | | - |
186 | | - return $capabilitiesResult; |
187 | | - } |
188 | | - |
189 | 139 | private function groupNameWrapper($groupName) |
190 | 140 | { |
191 | | - return $this->entitlementPrefix . 'group:' . implode(':', $this->encodeName($groupName)) . |
192 | | - '#' . $this->entitlementAuthority; |
193 | | - } |
194 | | - |
195 | | - private function capabilitiesWrapper($capabilities) |
196 | | - { |
197 | | - return $this->entitlementPrefix . implode(':', $this->encodeName($capabilities)) . |
198 | | - '#' . $this->entitlementAuthority; |
| 141 | + return $this->entitlementPrefix . 'group:' . |
| 142 | + implode(':', EntitlementUtils::encodeEntitlement($groupName)) . |
| 143 | + '#' . $this->entitlementAuthority; |
199 | 144 | } |
200 | 145 |
|
201 | 146 | /** |
@@ -228,38 +173,4 @@ protected function mapGroupName($request, $groupName) |
228 | 173 | return $this->entitlementPrefix . 'group:' . $groupName; |
229 | 174 | } |
230 | 175 | } |
231 | | - |
232 | | - private function encodeName($name) |
233 | | - { |
234 | | - $charsToSkip = [ |
235 | | - '!' => '%21', |
236 | | - '$' => '%24', |
237 | | - '\'' => '%27', |
238 | | - '(' => '%28', |
239 | | - ')' => '%29', |
240 | | - '*' => '%2A', |
241 | | - ',' => '%2C', |
242 | | - ';' => '%3B', |
243 | | - '&' => '%26', |
244 | | - '=' => '%3D', |
245 | | - '@' => '%40', |
246 | | - ':' => '%3A', |
247 | | - '+' => '%2B' |
248 | | - ]; |
249 | | - |
250 | | - $name = array_map('rawurlencode', explode(':', $name)); |
251 | | - $name = str_replace(array_values($charsToSkip), array_keys($charsToSkip), $name); |
252 | | - |
253 | | - return $name; |
254 | | - } |
255 | | - |
256 | | - private function getSpEntityId(&$request) |
257 | | - { |
258 | | - if (isset($request['SPMetadata']['entityid'])) { |
259 | | - return $request['SPMetadata']['entityid']; |
260 | | - } else { |
261 | | - throw new Exception('perun:PerunEntitlement: Cannot find entityID of remote SP. ' . |
262 | | - 'hint: Do you have this filter in IdP context?'); |
263 | | - } |
264 | | - } |
265 | 176 | } |
0 commit comments