Пример #1
0
 /**
  *
  */
 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);
 }
Пример #2
0
 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);
 }
Пример #3
0
         *  /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();