/** * */ public function __invoke($req, $res, $next) { $route = $req->getAttributes()['route']; $args = $route->getArguments(); // $trusted = false; /* * Per verificare che la risorsa richiesta afferisca all'utenza corrente * è indispensabile conoscere l'_id_utenza corrente, * argomento creato a seguito della chiamata al middleware VerifyToken */ if (!isset($args['_id_utenza'])) { return $res->withStatus(403)->write(JsonHelper::fail('Impossibile verificare i permessi.')); } /* * Se si interroga per id_utenza, verifico che l'utenza corrente sia * la medesima di quella interrogata */ if (isset($args['id_utenza']) && $args['id_utenza'] == $args['_id_utenza']) { $trusted = true; } else { if (isset($args['numero_contatore']) && in_array($args['numero_contatore'], Store::getNumeroContatoriByIdUtenza($args['_id_utenza']))) { $trusted = true; } } // Se sono il proprietario posso accedere alla risorsa if ($trusted) { $route->setArgument('_proprietario', true); return $next($req, $res); } /* * Se non sono il proprietario della risorsa richiesta, posso far parte * di una tipologia di utenza in grado comunque di avere accesso alle * informazioni interrogate. */ if (in_array($args['_tipologia'], $this->allowed)) { $trusted = true; } if (!$trusted) { return $res->withStatus(401)->write(JsonHelper::fail('Non possiedi i permessi per completare l\'operazione.')); } $route->setArgument('_proprietario', false); return $next($req, $res); }
public function __invoke($req, $res, $next) { $token = Auth::getToken($req); /* * Il token può essere false in una delle seguenti circostanze * 1-nessun header di autenticazione inviato con la richiesta * 2-il token non è valido */ if (!$token) { return $res->withStatus(401)->write(JsonHelper::fail('Impossibile autenticare il token.')); } /* * Verifico che il token sia del tipo atteso */ $payloadAtteso = ['id_utenza', 'tipologia']; foreach ($payloadAtteso as $k) { if (!isset($token->{$k})) { return $res->withStatus(401)->write(JsonHelper::fail('Il token ha un payload non conforme alle aspettative.')); } } /* * Se il token è corretto, verifico che il payload id_utenza * faccia riferimento ad un utente realmente esistente */ $result = Store::getUtenzaById($token->id_utenza); if (!$result) { return $res->withStatus(404)->write(JsonHelper::fail('Utente inesistente.')); } /* * Imposto gli argomenti dell'utenza corrente */ $route = $req->getAttributes()['route']; $route->setArgument('_id_utenza', (string) $result['id']); $route->setArgument('_tipologia', $result['tipologia']); return $next($req, $res); }
* /api/v1/sensori/838701426/ambientale/2 (umidità) * /api/v1/sensori/838701426/ambientale/3 (anidrite carbonica) * /api/v1/sensori/838701426/energia_elettrica (kWh) * /api/v1/sensori/838701426/energia_elettrica/2 (energia elettrica reattiva) */ $app->get('/sensori/{numero_contatore}/{metrica}[/{canale}]', function ($req, $res, $args) { $queryParams = $req->getQueryParams(); $numeroContatore = $args['numero_contatore']; $metrica = $args['metrica']; $canale = isset($args['canale']) ? $args['canale'] : 1; $result = Store::getSensoreDataByNumeroContatore($numeroContatore, $metrica, $canale, $queryParams); if (!$result) { return $res->withStatus(404)->write(JsonHelper::fail('Impossibile recuperare le informazioni dal sensore.')); } return $res->write(JsonHelper::success($result)); })->add(new SetACL())->add(new VerifyToken()); /** * */ $app->get('/meteo', function ($req, $res) { $queryParams = $req->getQueryParams(); $incsQuery = isset($queryParams['include']) ? $queryParams['include'] : ''; $result = Store::getMeteo($incsQuery); if (!$result) { return $res->withStatus(404)->write(JsonHelper::fail('Impossibile recuperare le informazioni meteo.')); } return $res->write(JsonHelper::success($result)); }); }); }); $app->run();