CakeDC /
cakephp-api
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * Copyright 2016 - 2018, Cake Development Corporation (http://cakedc.com) |
||
| 4 | * |
||
| 5 | * Licensed under The MIT License |
||
| 6 | * Redistributions of files must retain the above copyright notice. |
||
| 7 | * |
||
| 8 | * @copyright Copyright 2016 - 2018, Cake Development Corporation (http://cakedc.com) |
||
| 9 | * @license MIT License (http://www.opensource.org/licenses/mit-license.php) |
||
| 10 | */ |
||
| 11 | |||
| 12 | /** |
||
| 13 | * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) |
||
| 14 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) |
||
| 15 | * |
||
| 16 | * Licensed under The MIT License |
||
| 17 | * For full copyright and license information, please see the LICENSE.txt |
||
| 18 | * Redistributions of files must retain the above copyright notice. |
||
| 19 | * |
||
| 20 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) |
||
| 21 | * @link http://cakephp.org CakePHP(tm) Project |
||
| 22 | * @since 0.10.0 |
||
| 23 | * @license http://www.opensource.org/licenses/mit-license.php MIT License |
||
| 24 | */ |
||
| 25 | |||
| 26 | namespace CakeDC\Api\Service\Auth; |
||
| 27 | |||
| 28 | use CakeDC\Api\Exception\UnauthenticatedException; |
||
| 29 | use CakeDC\Api\Service\Action\Action; |
||
| 30 | use CakeDC\Api\Service\Service; |
||
| 31 | use Cake\Core\InstanceConfigTrait; |
||
| 32 | use Cake\Event\Event; |
||
| 33 | use Cake\Event\EventDispatcherTrait; |
||
| 34 | use Cake\Http\Exception\ForbiddenException; |
||
| 35 | use Cake\Http\Response; |
||
| 36 | use Cake\Log\LogTrait; |
||
| 37 | |||
| 38 | /** |
||
| 39 | * Class Auth |
||
| 40 | * |
||
| 41 | * @package CakeDC\Api\Service\Auth |
||
| 42 | */ |
||
| 43 | class Auth |
||
| 44 | { |
||
| 45 | use AuthenticateTrait; |
||
| 46 | use AuthorizeTrait; |
||
| 47 | use EventDispatcherTrait; |
||
| 48 | use InstanceConfigTrait; |
||
| 49 | use LogTrait; |
||
| 50 | use StorageTrait; |
||
| 51 | |||
| 52 | /** |
||
| 53 | * Actions for which user validation is not required. |
||
| 54 | * |
||
| 55 | * @var array |
||
| 56 | */ |
||
| 57 | public $allowedActions = []; |
||
| 58 | |||
| 59 | /** |
||
| 60 | * Request object |
||
| 61 | * |
||
| 62 | * @var \Cake\Http\ServerRequest |
||
| 63 | */ |
||
| 64 | public $request; |
||
| 65 | |||
| 66 | /** |
||
| 67 | * Response object |
||
| 68 | * |
||
| 69 | * @var \Cake\Http\Response |
||
| 70 | */ |
||
| 71 | public $response; |
||
| 72 | |||
| 73 | /** |
||
| 74 | * Default config |
||
| 75 | * |
||
| 76 | * These are merged with user-provided config when the component is used. |
||
| 77 | * |
||
| 78 | * @var array |
||
| 79 | */ |
||
| 80 | protected $_defaultConfig = [ |
||
| 81 | 'storage' => 'Memory', |
||
| 82 | ]; |
||
| 83 | |||
| 84 | protected $_registry = null; |
||
| 85 | |||
| 86 | /** |
||
| 87 | * @var Service |
||
| 88 | */ |
||
| 89 | protected $_service; |
||
| 90 | |||
| 91 | /** |
||
| 92 | * @var Action |
||
| 93 | */ |
||
| 94 | protected $_action; |
||
| 95 | |||
| 96 | /** |
||
| 97 | * Constructor |
||
| 98 | * |
||
| 99 | * @param array $config Array of configuration settings. |
||
| 100 | */ |
||
| 101 | 123 | public function __construct(array $config = []) |
|
| 102 | { |
||
| 103 | 123 | if (array_key_exists('request', $config)) { |
|
| 104 | 123 | $this->request = $config['request']; |
|
| 105 | 123 | } |
|
| 106 | 123 | if (array_key_exists('response', $config)) { |
|
| 107 | 123 | $this->response = $config['response']; |
|
| 108 | 123 | } |
|
| 109 | 123 | $this->setConfig($config); |
|
| 110 | 123 | $this->initialize($config); |
|
| 111 | 123 | } |
|
| 112 | |||
| 113 | /** |
||
| 114 | * Initialize properties. |
||
| 115 | * |
||
| 116 | * @param array $config The config data. |
||
| 117 | * @return void |
||
| 118 | */ |
||
| 119 | 123 | public function initialize(array $config) |
|
| 120 | { |
||
| 121 | 123 | if (array_key_exists('service', $config)) { |
|
| 122 | 123 | $this->_service = $config['service']; |
|
| 123 | 123 | } |
|
| 124 | 123 | if (array_key_exists('action', $config)) { |
|
| 125 | 123 | $this->_action = $config['action']; |
|
| 126 | 123 | } |
|
| 127 | 123 | $this->setEventManager($this->_action->getEventManager()); |
|
| 128 | 123 | } |
|
| 129 | |||
| 130 | /** |
||
| 131 | * Sets defaults for configs. |
||
| 132 | * |
||
| 133 | * @return void |
||
| 134 | */ |
||
| 135 | 60 | protected function _setDefaults() |
|
| 136 | { |
||
| 137 | $defaults = [ |
||
| 138 | 60 | 'authenticate' => ['CakeDC/Api.Token'], |
|
| 139 | 60 | 'authError' => __d('CakeDC/Api', 'You are not authorized to access that location.') |
|
| 140 | 60 | ]; |
|
| 141 | |||
| 142 | 60 | $config = $this->getConfig(); |
|
| 143 | 60 | foreach ($config as $key => $value) { |
|
| 144 | 60 | if ($value !== null) { |
|
| 145 | 60 | unset($defaults[$key]); |
|
| 146 | 60 | } |
|
| 147 | 60 | } |
|
| 148 | 60 | $this->setConfig($defaults); |
|
| 149 | 60 | } |
|
| 150 | |||
| 151 | /** |
||
| 152 | * Takes a list of actions in the current controller for which authentication is not required, or |
||
| 153 | * no parameters to allow all actions. |
||
| 154 | * |
||
| 155 | * You can use allow with either an array or a simple string. |
||
| 156 | * |
||
| 157 | * ``` |
||
| 158 | * $this->Auth->allow('view'); |
||
| 159 | * $this->Auth->allow(['edit', 'add']); |
||
| 160 | * |
||
| 161 | * @param string|array $actions Controller action name or array of actions |
||
| 162 | * @return void |
||
| 163 | */ |
||
| 164 | 14 | public function allow($actions) |
|
| 165 | { |
||
| 166 | 14 | $this->allowedActions = array_merge($this->allowedActions, (array)$actions); |
|
| 167 | 14 | } |
|
| 168 | |||
| 169 | /** |
||
| 170 | * Removes items from the list of allowed/no authentication required actions. |
||
| 171 | * |
||
| 172 | * You can use deny with either an array or a simple string. |
||
| 173 | * |
||
| 174 | * ``` |
||
| 175 | * $this->Auth->deny('view'); |
||
| 176 | * $this->Auth->deny(['edit', 'add']); |
||
| 177 | * ``` |
||
| 178 | * or |
||
| 179 | * ``` |
||
| 180 | * $this->Auth->deny(); |
||
| 181 | * ``` |
||
| 182 | * to remove all items from the allowed list |
||
| 183 | * |
||
| 184 | * @param string|array|null $actions Controller action name or array of actions |
||
| 185 | * @return void |
||
| 186 | */ |
||
| 187 | public function deny($actions = null) |
||
| 188 | { |
||
| 189 | if ($actions === null) { |
||
| 190 | $this->allowedActions = []; |
||
| 191 | |||
| 192 | return; |
||
| 193 | } |
||
| 194 | foreach ((array)$actions as $action) { |
||
| 195 | $i = array_search($action, $this->allowedActions); |
||
| 196 | if (is_int($i)) { |
||
| 197 | unset($this->allowedActions[$i]); |
||
| 198 | } |
||
| 199 | } |
||
| 200 | $this->allowedActions = array_values($this->allowedActions); |
||
| 201 | } |
||
| 202 | |||
| 203 | /** |
||
| 204 | * Main execution method, handles initial authentication check and redirection |
||
| 205 | * of invalid users. |
||
| 206 | * |
||
| 207 | * The auth check is done when event name is same as the one configured in |
||
| 208 | * `checkAuthIn` config. |
||
| 209 | * |
||
| 210 | * @param \Cake\Event\Event $event Event instance. |
||
| 211 | * @return Response|null |
||
| 212 | */ |
||
| 213 | 60 | public function authCheck(Event $event) |
|
|
0 ignored issues
–
show
|
|||
| 214 | { |
||
| 215 | 60 | $action = $this->_action; |
|
| 216 | |||
| 217 | 60 | $this->_setDefaults(); |
|
| 218 | |||
| 219 | 60 | if ($this->_isAllowed($action)) { |
|
| 220 | 12 | return null; |
|
| 221 | } |
||
| 222 | |||
| 223 | 48 | if (!$this->_getUser()) { |
|
| 224 | 1 | throw new UnauthenticatedException(); |
|
| 225 | } |
||
| 226 | |||
| 227 | 47 | if (empty($this->_config['authorize']) || |
|
| 228 | 47 | $this->isAuthorized($this->user()) |
|
| 229 | 47 | ) { |
|
| 230 | 47 | return null; |
|
| 231 | } |
||
| 232 | |||
| 233 | throw new ForbiddenException($this->_config['authError']); |
||
| 234 | } |
||
| 235 | |||
| 236 | /** |
||
| 237 | * Checks whether current action is accessible without authentication. |
||
| 238 | * |
||
| 239 | * @param Action $action An Action instance. |
||
| 240 | * @return bool True if action is accessible without authentication else false |
||
| 241 | */ |
||
| 242 | 60 | protected function _isAllowed(Action $action) |
|
| 243 | { |
||
| 244 | 60 | $action = strtolower($action->getName()); |
|
| 245 | |||
| 246 | 60 | return in_array($action, array_map('strtolower', $this->allowedActions)) || |
|
| 247 | 60 | in_array('*', $this->allowedActions); |
|
| 248 | } |
||
| 249 | |||
| 250 | /** |
||
| 251 | * __get method this method will return an attribute of this class |
||
| 252 | * |
||
| 253 | * @param string $name Name |
||
| 254 | * @return mixed |
||
| 255 | */ |
||
| 256 | public function __get($name) |
||
| 257 | { |
||
| 258 | if (isset($this->{$name})) { |
||
| 259 | return $this->{$name}; |
||
| 260 | } |
||
| 261 | |||
| 262 | return null; |
||
| 263 | } |
||
| 264 | |||
| 265 | /** |
||
| 266 | * __set method this method will allow you set the value for an attribute of this class |
||
| 267 | * |
||
| 268 | * @param string $name name of the attribute |
||
| 269 | * @param string $value value of the attribute |
||
| 270 | * @return void |
||
| 271 | */ |
||
| 272 | public function __set($name, $value) |
||
| 273 | { |
||
| 274 | $this->{$name} = $value; |
||
| 275 | } |
||
| 276 | } |
||
| 277 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.