Correzioni per funzionamento API

This commit is contained in:
Dasc3er 2021-02-19 16:17:22 +01:00 committed by Thomas Zilio
parent e6e508b96f
commit 83a0652f71
14 changed files with 60 additions and 45 deletions

View File

@ -17,9 +17,6 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
// Rimozione header X-Powered-By
header_remove('X-Powered-By');
// Impostazioni di configurazione PHP // Impostazioni di configurazione PHP
date_default_timezone_set('Europe/Rome'); date_default_timezone_set('Europe/Rome');
@ -71,7 +68,7 @@ use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\StreamHandler; use Monolog\Handler\StreamHandler;
$handlers = []; $handlers = [];
if (!API\Response::isAPIRequest()) { if (!$api_request) {
// File di log di base (logs/error.log, logs/setup.log) // File di log di base (logs/error.log, logs/setup.log)
$handlers[] = new StreamHandler(base_dir().'/logs/error.log', Monolog\Logger::ERROR); $handlers[] = new StreamHandler(base_dir().'/logs/error.log', Monolog\Logger::ERROR);
$handlers[] = new StreamHandler(base_dir().'/logs/setup.log', Monolog\Logger::EMERGENCY); $handlers[] = new StreamHandler(base_dir().'/logs/setup.log', Monolog\Logger::EMERGENCY);
@ -153,7 +150,7 @@ $revision = Update::getRevision();
/* ACCESSO E INSTALLAZIONE */ /* ACCESSO E INSTALLAZIONE */
// Controllo sulla presenza dei permessi di accesso basilari // Controllo sulla presenza dei permessi di accesso basilari
$continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (auth()->check() || API\Response::isAPIRequest()); $continue = $dbo->isInstalled() && !Update::isUpdateAvailable() && (auth()->check() || $api_request);
if (!empty($skip_permissions)) { if (!empty($skip_permissions)) {
Permissions::skip(); Permissions::skip();
@ -170,7 +167,7 @@ if (!$continue && getURLPath() != slashes(base_url().'/index.php') && !Permissio
/* INIZIALIZZAZIONE GENERALE */ /* INIZIALIZZAZIONE GENERALE */
// Operazione aggiuntive (richieste non API) // Operazione aggiuntive (richieste non API)
if (!API\Response::isAPIRequest()) { if (!$api_request) {
// Impostazioni di Content-Type e Charset Header // Impostazioni di Content-Type e Charset Header
header('Content-Type: text/html; charset=UTF-8'); header('Content-Type: text/html; charset=UTF-8');

View File

@ -435,7 +435,7 @@ if (auth()->check()) {
<i class="fa fa-info"></i> <i class="fa fa-info"></i>
</a></li> </a></li>
<li class="nav-button"><a href="'.base_url().'/index.php?op=logout" onclick="sessionStorage.clear()" class="bg-red tip" title="'.tr('Esci').'"> <li class="nav-button"><a href="'.route('logout').'" onclick="sessionStorage.clear()" class="bg-red tip" title="'.tr('Esci').'">
<i class="fa fa-power-off"></i> <i class="fa fa-power-off"></i>
</a></li> </a></li>
</ul> </ul>

View File

@ -42,8 +42,7 @@ switch ($op) {
//flash()->error(auth()->getStatus()[$status]['message']); //flash()->error(auth()->getStatus()[$status]['message']);
redirect_legacy(base_url().'/index.php'); redirect('/');
throw new \App\Exceptions\LegacyExitException();
} }
break; break;
@ -51,8 +50,7 @@ switch ($op) {
case 'logout': case 'logout':
auth()->logout(); auth()->logout();
redirect_legacy(base_url().'/index.php'); redirect(route('login'));
throw new \App\Exceptions\LegacyExitException();
break; break;
} }

View File

@ -38,7 +38,7 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface,
$today = date('Y-m-d'); $today = date('Y-m-d');
$period_end = date('Y-m-d', strtotime($today.' +7 days')); $period_end = date('Y-m-d', strtotime($today.' +7 days'));
$period_start = date('Y-m-d', strtotime($today.' -2 months')); $period_start = date('Y-m-d', strtotime($today.' -2 months'));
$user = auth()->user(); $user = $this->getUser();
// AND `in_statiintervento`.`is_completato`=0 // AND `in_statiintervento`.`is_completato`=0
$query = "SELECT `in_interventi`.`id`, $query = "SELECT `in_interventi`.`id`,

View File

@ -29,7 +29,9 @@ if (post('op') == 'self_update') {
} }
$user = auth()->user(); $user = auth()->user();
$token = auth()->getToken();
$tokens = $user->getApiTokens();
$token = $tokens[0]['token'];
$rs = $dbo->fetchArray('SELECT * FROM an_anagrafiche WHERE idanagrafica = '.prepare($user['idanagrafica'])); $rs = $dbo->fetchArray('SELECT * FROM an_anagrafiche WHERE idanagrafica = '.prepare($user['idanagrafica']));
$anagrafica = []; $anagrafica = [];

View File

@ -32,9 +32,11 @@ class Login extends Resource implements CreateInterface
$database = database(); $database = database();
// Controllo sulle credenziali // Controllo sulle credenziali
if (auth()->attempt($request['username'], $request['password'])) { if (auth()->once(['username' => $request['username'], 'password' => $request['password']])) {
$user = $this->getUser(); $user = $this->getUser();
$token = auth()->getToken();
$tokens = $user->getApiTokens();
$token = $tokens[0]['token'];
// Informazioni da restituire tramite l'API // Informazioni da restituire tramite l'API
$response['user'] = $database->fetchOne('SELECT `an_anagrafiche`.`idanagrafica` AS idanagrafica, `ragione_sociale`, `codice`, `piva`, `codice_fiscale`, `indirizzo`, `citta`, `provincia`, (SELECT `nome` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione, `telefono`, `fax`, `cellulare`, `an_anagrafiche`.`email` FROM `zz_users` LEFT JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica` WHERE `id` = :id', [ $response['user'] = $database->fetchOne('SELECT `an_anagrafiche`.`idanagrafica` AS idanagrafica, `ragione_sociale`, `codice`, `piva`, `codice_fiscale`, `indirizzo`, `citta`, `provincia`, (SELECT `nome` FROM `an_nazioni` WHERE `an_nazioni`.`id` = `an_anagrafiche`.`id_nazione`) AS nazione, `telefono`, `fax`, `cellulare`, `an_anagrafiche`.`email` FROM `zz_users` LEFT JOIN `an_anagrafiche` ON `an_anagrafiche`.`idanagrafica` = `zz_users`.`idanagrafica` WHERE `id` = :id', [

View File

@ -56,7 +56,7 @@ class Interventi extends AppResource
$remove_start = $remove_end->copy()->subMonths(2); $remove_start = $remove_end->copy()->subMonths(2);
// Informazioni sull'utente // Informazioni sull'utente
$id_tecnico = auth()->user()->id_anagrafica; $id_tecnico = $this->getUser()->id_anagrafica;
$query = 'SELECT in_interventi.id FROM in_interventi WHERE $query = 'SELECT in_interventi.id FROM in_interventi WHERE
deleted_at IS NOT NULL deleted_at IS NOT NULL
@ -97,7 +97,7 @@ class Interventi extends AppResource
$end = $date['end']; $end = $date['end'];
// Informazioni sull'utente // Informazioni sull'utente
$id_tecnico = auth()->user()->id_anagrafica; $id_tecnico = $this->getUser()->id_anagrafica;
$query = 'SELECT $query = 'SELECT
in_interventi.id, in_interventi.id,

View File

@ -32,9 +32,11 @@ class Login extends Resource implements CreateInterface
$database = database(); $database = database();
// Controllo sulle credenziali // Controllo sulle credenziali
if (auth()->attempt($request['username'], $request['password'])) { if (auth()->once(['username' => $request['username'], 'password' => $request['password']])) {
$user = $this->getUser(); $user = $this->getUser();
$token = auth()->getToken();
$tokens = $user->getApiTokens();
$token = $tokens[0]['token'];
// Informazioni sull'utente, strettamente collegato ad una anagrafica di tipo Tecnico // Informazioni sull'utente, strettamente collegato ad una anagrafica di tipo Tecnico
$utente = $database->fetchOne("SELECT $utente = $database->fetchOne("SELECT

View File

@ -41,7 +41,7 @@ class RigheInterventi extends AppResource
$end = $today->copy()->addMonth(1); $end = $today->copy()->addMonth(1);
// Informazioni sull'utente // Informazioni sull'utente
$user = auth()->user(); $user = $this->getUser();
$id_tecnico = $user->id_anagrafica; $id_tecnico = $user->id_anagrafica;
// Elenco di interventi di interesse // Elenco di interventi di interesse
@ -75,7 +75,7 @@ class RigheInterventi extends AppResource
$end = $today->copy()->addMonth(1); $end = $today->copy()->addMonth(1);
// Informazioni sull'utente // Informazioni sull'utente
$user = auth()->user(); $user = $this->getUser();
$id_tecnico = $user->id_anagrafica; $id_tecnico = $user->id_anagrafica;
// Elenco di interventi di interesse // Elenco di interventi di interesse

View File

@ -37,7 +37,7 @@ class SessioniInterventi extends AppResource
$end = $today->copy()->addMonth(1); $end = $today->copy()->addMonth(1);
// Informazioni sull'utente // Informazioni sull'utente
$user = auth()->user(); $user = $this->getUser();
$id_tecnico = $user->id_anagrafica; $id_tecnico = $user->id_anagrafica;
// Elenco di interventi di interesse // Elenco di interventi di interesse
@ -76,7 +76,7 @@ class SessioniInterventi extends AppResource
$end = $today->copy()->addMonth(1); $end = $today->copy()->addMonth(1);
// Informazioni sull'utente // Informazioni sull'utente
$user = auth()->user(); $user = $this->getUser();
$id_tecnico = $user->id_anagrafica; $id_tecnico = $user->id_anagrafica;
// Elenco di interventi di interesse // Elenco di interventi di interesse
@ -139,7 +139,7 @@ class SessioniInterventi extends AppResource
public function createRecord($data) public function createRecord($data)
{ {
// Informazioni sull'utente // Informazioni sull'utente
$user = auth()->user(); $user = $this->getUser();
$id_tecnico = $user->id_anagrafica; $id_tecnico = $user->id_anagrafica;
// Informazioni di base // Informazioni di base

View File

@ -43,6 +43,6 @@ class Resource
public function getUser() public function getUser()
{ {
return auth()->getUser(); return auth()->user();
} }
} }

View File

@ -22,9 +22,11 @@ namespace API;
use API\Exceptions\InternalError; use API\Exceptions\InternalError;
use API\Exceptions\ResourceNotFound; use API\Exceptions\ResourceNotFound;
use API\Exceptions\ServiceError; use API\Exceptions\ServiceError;
use App\Models\User;
use Auth; use Auth;
use Exception; use Exception;
use Filter; use Filter;
use Illuminate\Support\Facades\Request;
use Models\ApiResource as Resource; use Models\ApiResource as Resource;
/** /**
@ -96,6 +98,20 @@ class Response
$request = self::getRequest(); $request = self::getRequest();
$version = $request['version']; $version = $request['version'];
// Login sulla base del token
if (!empty($request['token'])) {
$token = $request['token'];
$user = database()->fetchArray('SELECT `id_utente` FROM `zz_tokens` WHERE `enabled` = 1 AND `token` = :token', [
':token' => $token,
]);
$id = !empty($user) ? $user[0]['id_utente'] : null;
if (!empty($id)) {
auth()->onceUsingId($id);
}
}
// Controllo sull'accesso // Controllo sull'accesso
if (!auth()->check() && $request['resource'] != 'login') { if (!auth()->check() && $request['resource'] != 'login') {
return self::response([ return self::response([
@ -224,31 +240,28 @@ class Response
*/ */
public static function getRequest($raw = false) public static function getRequest($raw = false)
{ {
$request = []; $request = Request::instance();
$content = $request->getContent();
if (self::isAPIRequest()) { if (empty($raw)) {
$request = file_get_contents('php://input'); $content = $request->all();
$content = Filter::sanitize($content);
if (empty($raw)) { // Fallback per input standard vuoto (richiesta da browser o upload file)
$request = (array) json_decode($request, true); if (empty($content)) { // $_SERVER['REQUEST_METHOD'] == 'GET'
$request = Filter::sanitize($request); $content = $request->query();
}
// Fallback per input standard vuoto (richiesta da browser o upload file) if (empty($content['token'])) {
if (empty($request)) { // $_SERVER['REQUEST_METHOD'] == 'GET' $content['token'] = '';
$request = Filter::getGET(); }
}
if (empty($request['token'])) { if (empty($content['version'])) {
$request['token'] = ''; $content['version'] = 'v1';
}
if (empty($request['version'])) {
$request['version'] = 'v1';
}
} }
} }
return $request; return $content;
} }
/** /**

View File

@ -68,6 +68,7 @@ class Module extends Model
{ {
if (!isset($this->variables[$id_record])) { if (!isset($this->variables[$id_record])) {
$dbo = $database = database(); $dbo = $database = database();
$variables = [];
// Lettura delle variabili nei singoli moduli // Lettura delle variabili nei singoli moduli
$path = $this->filepath('variables.php'); $path = $this->filepath('variables.php');

View File

@ -545,8 +545,8 @@ class Prints
// Inclusione dei fogli di stile CSS // Inclusione dei fogli di stile CSS
$styles = [ $styles = [
App::filepath('templates/base|custom|', 'bootstrap.css'), AppLegacy::filepath('templates/base|custom|', 'bootstrap.css'),
App::filepath('templates/base|custom|', 'style.css'), AppLegacy::filepath('templates/base|custom|', 'style.css'),
]; ];
foreach ($styles as $value) { foreach ($styles as $value) {