Correzione log di accesso e informazioni utente
This commit is contained in:
parent
04ff4439ed
commit
1610f17255
|
@ -4,8 +4,8 @@ namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Exceptions\LegacyExitException;
|
use App\Exceptions\LegacyExitException;
|
||||||
use App\Exceptions\LegacyRedirectException;
|
use App\Exceptions\LegacyRedirectException;
|
||||||
use Illuminate\Http\Response;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
use Illuminate\Support\Facades\Redirect;
|
use Illuminate\Support\Facades\Redirect;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,9 @@ class UserController extends Controller
|
||||||
/** @var int Lunghezza minima della password */
|
/** @var int Lunghezza minima della password */
|
||||||
public static $min_length_password = 8;
|
public static $min_length_password = 8;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gestisce la pagina di informazioni dell'utente.
|
||||||
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
@ -29,6 +32,9 @@ class UserController extends Controller
|
||||||
return view('user.info', $args);
|
return view('user.info', $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gestisce la visualizzazione del modal per la modifica della password.
|
||||||
|
*/
|
||||||
public function password()
|
public function password()
|
||||||
{
|
{
|
||||||
$args['min_length_password'] = self::$min_length_password;
|
$args['min_length_password'] = self::$min_length_password;
|
||||||
|
@ -36,7 +42,10 @@ class UserController extends Controller
|
||||||
return view('user.password', $args);
|
return view('user.password', $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save(Request $request)
|
/**
|
||||||
|
* Gestisce il salvataggio della nuova password per l'utente.
|
||||||
|
*/
|
||||||
|
public function savePassword(Request $request)
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$password = $request->input('password');
|
$password = $request->input('password');
|
||||||
|
@ -49,6 +58,9 @@ class UserController extends Controller
|
||||||
return redirect(route('user-info'));
|
return redirect(route('user-info'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Gestisce la visualizzazione dei log di accesso dell'utente corrente al gestionale.
|
||||||
|
*/
|
||||||
public function logs()
|
public function logs()
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
@ -64,4 +76,28 @@ class UserController extends Controller
|
||||||
'logs' => $logs,
|
'logs' => $logs,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gestisce la visualizzazione del modal per la modifica della foto utente.
|
||||||
|
*/
|
||||||
|
public function photo()
|
||||||
|
{
|
||||||
|
return view('user.photo');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gestisce il salvataggio della nuova foto utente.
|
||||||
|
*/
|
||||||
|
public function savePhoto(Request $request)
|
||||||
|
{
|
||||||
|
$user = auth()->user();
|
||||||
|
$file = $request->file('photo');
|
||||||
|
|
||||||
|
$user->photo = $file;
|
||||||
|
$user->save();
|
||||||
|
|
||||||
|
flash()->info(tr('Foto utente aggiornata!'));
|
||||||
|
|
||||||
|
return redirect(route('user-info'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\RateLimiter;
|
use Illuminate\Support\Facades\RateLimiter;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
use Models\Log;
|
||||||
|
|
||||||
class LoginRequest extends FormRequest
|
class LoginRequest extends FormRequest
|
||||||
{
|
{
|
||||||
|
@ -48,9 +49,23 @@ class LoginRequest extends FormRequest
|
||||||
if (!Auth::attempt($this->only('username', 'password'), $this->filled('remember'))) {
|
if (!Auth::attempt($this->only('username', 'password'), $this->filled('remember'))) {
|
||||||
RateLimiter::hit($this->throttleKey());
|
RateLimiter::hit($this->throttleKey());
|
||||||
|
|
||||||
|
// Log di accesso
|
||||||
|
$this->registerLog('failed');
|
||||||
|
|
||||||
throw ValidationException::withMessages(['username' => tr('auth.failed')]);
|
throw ValidationException::withMessages(['username' => tr('auth.failed')]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Informazioni sull'utente
|
||||||
|
$user = auth()->user();
|
||||||
|
if (empty($user->enabled)) {
|
||||||
|
$status = 'disabled';
|
||||||
|
} elseif ($user->getFirstAvailableModule() === null) {
|
||||||
|
$status = 'unauthorized';
|
||||||
|
} else {
|
||||||
|
$status = 'success';
|
||||||
|
}
|
||||||
|
$this->registerLog($status);
|
||||||
|
|
||||||
RateLimiter::clear($this->throttleKey());
|
RateLimiter::clear($this->throttleKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,4 +98,22 @@ class LoginRequest extends FormRequest
|
||||||
{
|
{
|
||||||
return Str::lower($this->input('username')).'|'.$this->ip();
|
return Str::lower($this->input('username')).'|'.$this->ip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registra i log di accesso per il tentativo corrente.
|
||||||
|
*
|
||||||
|
* @param string $status
|
||||||
|
*/
|
||||||
|
protected function registerLog($status)
|
||||||
|
{
|
||||||
|
// Log di accesso
|
||||||
|
$log = new Log();
|
||||||
|
|
||||||
|
$log->username = $this->input('username');
|
||||||
|
$log->ip = $this->ip();
|
||||||
|
$log->id_utente = auth()->user()->id;
|
||||||
|
$log->setStatus($status);
|
||||||
|
|
||||||
|
$log->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ namespace App\Models;
|
||||||
use Common\SimpleModelTrait;
|
use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
|
use Illuminate\Http\UploadedFile;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Intervention\Image\ImageManagerStatic;
|
use Intervention\Image\ImageManagerStatic;
|
||||||
|
@ -153,9 +154,9 @@ class User extends Authenticatable
|
||||||
return base_url().'/'.$image->filepath;
|
return base_url().'/'.$image->filepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setPhotoAttribute($value)
|
public function setPhotoAttribute(UploadedFile $file)
|
||||||
{
|
{
|
||||||
$module = \module('Utenti e permessi');
|
$module = module('Utenti e permessi');
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'id_module' => $module->id,
|
'id_module' => $module->id,
|
||||||
|
@ -165,22 +166,19 @@ class User extends Authenticatable
|
||||||
// Foto precedenti
|
// Foto precedenti
|
||||||
$old_photo = Upload::where($data)->get();
|
$old_photo = Upload::where($data)->get();
|
||||||
|
|
||||||
// Informazioni sull'immagine
|
|
||||||
$filepath = is_array($value) ? $value['tmp_name'] : $value;
|
|
||||||
$info = Upload::getInfo(is_array($value) ? $value['name'] : $value);
|
|
||||||
$file = base_dir().'/files/temp_photo.'.$info['extension'];
|
|
||||||
|
|
||||||
// Ridimensionamento
|
// Ridimensionamento
|
||||||
$driver = extension_loaded('gd') ? 'gd' : 'imagick';
|
$driver = extension_loaded('gd') ? 'gd' : 'imagick';
|
||||||
ImageManagerStatic::configure(['driver' => $driver]);
|
ImageManagerStatic::configure(['driver' => $driver]);
|
||||||
|
|
||||||
$img = ImageManagerStatic::make($filepath)->resize(100, 100, function ($constraint) {
|
$temp_file = temp_file(secure_random_string().'.'.$file->getClientOriginalExtension(), $file->getContent());
|
||||||
|
$img = ImageManagerStatic::make($temp_file)
|
||||||
|
->resize(100, 100, function ($constraint) {
|
||||||
$constraint->aspectRatio();
|
$constraint->aspectRatio();
|
||||||
});
|
});
|
||||||
$img->save(slashes($file));
|
$img->save($temp_file);
|
||||||
|
|
||||||
// Aggiunta nuova foto
|
// Aggiunta nuova foto
|
||||||
$upload = Upload::build($file, $data);
|
$upload = Upload::build($temp_file, $data);
|
||||||
|
|
||||||
// Rimozione foto precedenti
|
// Rimozione foto precedenti
|
||||||
delete($file);
|
delete($file);
|
||||||
|
|
|
@ -152,5 +152,5 @@ return [
|
||||||
*
|
*
|
||||||
* "__" and "_n" and "_i" and "_s" are helpers functions @see \Xinax\LaravelGettext\Support\helpers.php
|
* "__" and "_n" and "_i" and "_s" are helpers functions @see \Xinax\LaravelGettext\Support\helpers.php
|
||||||
*/
|
*/
|
||||||
'keywords-list' => ['_', '__', '_i', '_s', 'gettext', '_n:1,2', 'ngettext:1,2', 'dgettext:2'],
|
'keywords-list' => ['_', '__', '_i', '_s', 'gettext', '_n:1,2', 'ngettext:1,2', 'dgettext:2', 'tr'],
|
||||||
];
|
];
|
||||||
|
|
2
legacy
2
legacy
|
@ -1 +1 @@
|
||||||
Subproject commit a4c7c2c560cc34d7d48b81158db3795650968c8b
|
Subproject commit 9310e63a3b0ec69cf43481bedcf0f1099e876bd1
|
|
@ -37,7 +37,7 @@
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<p>{{ tr("Il progetto è software libero perchè permette a tutti di conoscere come funziona avendo il codice sorgente del programma e fornisce così la possibilità di studiare come funziona, modificarlo, adattarlo alle proprie esigenze e, in ambito commerciale, non obbliga l'utilizzatore ad essere legato allo stesso fornitore di assistenza") }}.</p>
|
<p>{{ tr("Il progetto è software libero perchè permette a tutti di conoscere come funziona avendo il codice sorgente del programma e fornisce così la possibilità di studiare come funziona, modificarlo, adattarlo alle proprie esigenze e, in ambito commerciale, non obbliga l'utilizzatore ad essere legato allo stesso fornitore di assistenza") }}.</p>
|
||||||
|
|
||||||
<p>{{ tr("E' altrettanto importante sapere come funziona per conoscere come vengono trattati i VOSTRI dati, proteggendo così la vostra <b>privacy</b>") }}.</p>
|
<p>{!! tr("E' altrettanto importante sapere come funziona per conoscere come vengono trattati i VOSTRI dati, proteggendo così la vostra <b>privacy</b>") !!}.</p>
|
||||||
|
|
||||||
<p>{{ tr('OpenSTAManager è inoltre stato progettato utilizzando altro software libero, tra cui principalmente') }}:</p>
|
<p>{{ tr('OpenSTAManager è inoltre stato progettato utilizzando altro software libero, tra cui principalmente') }}:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-3 text-center">
|
<div class="col-xs-3 text-center">
|
||||||
<a href="http://www.openstamanager.com/forum/" target="_blank">
|
<a href="http://forum.openstamanager.com/" target="_blank">
|
||||||
<i class="fa fa-2x fa-edit"></i><br>
|
<i class="fa fa-2x fa-edit"></i><br>
|
||||||
{{ tr('Forum') }}
|
{{ tr('Forum') }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<p>{{ tr('OpenSTAManager è software libero ed è nato e cresciuto con il lavoro volontario di alcuni programmatori') }}.</p>
|
<p>{{ tr('OpenSTAManager è software libero ed è nato e cresciuto con il lavoro volontario di alcuni programmatori') }}.</p>
|
||||||
|
|
||||||
<p>{{ tr('La filosofia del software libero fa sì che il progetto sia <b>accessibile a tutti</b> e nel nostro caso specifico lo è, anche dal punto di vista della gratuità') }}.</p>
|
<p>{!! tr('La filosofia del software libero fa sì che il progetto sia <b>accessibile a tutti</b> e nel nostro caso specifico lo è, anche dal punto di vista della gratuità') !!}.</p>
|
||||||
|
|
||||||
<p>{{ tr('Offriamo supporto a pagamento professionale a chi fosse interessato, ma a chi non interessa il supporto a pagamento e sta comunque utilizzando il software chiediamo una donazione per il lavoro svolto finora e per la possibilità di continuare questo progetto con lo stesso spirito con cui è nato') }}. {!! tr('Le donazioni non ci rendono ricchi, ma sono un <b>grande simbolo di apprezzamento</b>') !!}.</p>
|
<p>{{ tr('Offriamo supporto a pagamento professionale a chi fosse interessato, ma a chi non interessa il supporto a pagamento e sta comunque utilizzando il software chiediamo una donazione per il lavoro svolto finora e per la possibilità di continuare questo progetto con lo stesso spirito con cui è nato') }}. {!! tr('Le donazioni non ci rendono ricchi, ma sono un <b>grande simbolo di apprezzamento</b>') !!}.</p>
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<p>{{ tr('Per le aziende che hanno necessità di essere seguite da <b>supporto professionale</b> è disponibile un servizio di assistenza e supporto a pagamento') }}.</p>
|
<p>{!! tr('Per le aziende che hanno necessità di essere seguite da <b>supporto professionale</b> è disponibile un servizio di assistenza e supporto a pagamento') !!}.</p>
|
||||||
|
|
||||||
<p>{!! tr("E' disponibile anche un <b>servizio cloud</b> su cui poter installare OpenSTAManager, in modo da non doverti più preoccupare di backup e gestione dei dati") !!}.</p>
|
<p>{!! tr("E' disponibile anche un <b>servizio cloud</b> su cui poter installare OpenSTAManager, in modo da non doverti più preoccupare di backup e gestione dei dati") !!}.</p>
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@
|
||||||
<a href="{{ route('user-info') }}" class="user-panel text-center info" style="height: 60px">
|
<a href="{{ route('user-info') }}" class="user-panel text-center info" style="height: 60px">
|
||||||
<div class="text-center mt-2">
|
<div class="text-center mt-2">
|
||||||
@if ($user->photo)
|
@if ($user->photo)
|
||||||
<img src="{{ base_url() }}{{ $user->photo }}" class="profile-user-img img-fluid img-circle" alt="{{ $user->username }}" />
|
<img src="{{ $user->photo }}" class="profile-user-img img-fluid img-circle" alt="{{ $user->username }}" />
|
||||||
@else
|
@else
|
||||||
<i class="fa fa-user-circle-o fa-5x"></i>
|
<i class="fa fa-user-circle-o fa-5x"></i>
|
||||||
@endif
|
@endif
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
<div class="col-sm-4 border-right">
|
<div class="col-sm-4 border-right">
|
||||||
<div class="description-block">
|
<div class="description-block">
|
||||||
<a class="btn btn-info btn-block tip" data-href="" data-toggle="modal" data-title="{{ tr('Cambia foto utente') }}">
|
<a class="btn btn-info btn-block tip" data-href="{{ route('user-photo') }}" data-toggle="modal" data-title="{{ tr('Cambia foto utente') }}">
|
||||||
<i class="fa fa-picture-o"></i> {{ tr('Cambia foto utente') }}
|
<i class="fa fa-picture-o"></i> {{ tr('Cambia foto utente') }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
<form action="{{ route('user-password-save') }}" method="post" id="password-form">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{[ "type": "password", "label": "{{ tr('Password') }}", "name": "password", "required": 1 ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{[ "type": "password", "label": "{{ tr('Ripeti la password') }}", "name": "password_rep", "required": 1 ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" onclick="updatePassword()" class="btn btn-primary pull-right">
|
||||||
|
<i class="fa fa-plus"></i> {{ tr('Aggiorna password') }}
|
||||||
|
</button>
|
||||||
|
<div class="clearfix"> </div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var min_length = {{ $min_length_password }};
|
||||||
|
|
||||||
|
function updatePassword() {
|
||||||
|
let password = $("#password").val();
|
||||||
|
let password_rep = $("#password_rep").val();
|
||||||
|
|
||||||
|
if(password === "" || password_rep === ""){
|
||||||
|
swal({
|
||||||
|
title: "{{ tr('Inserire una password valida') }}",
|
||||||
|
type: "error",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(password !== password_rep){
|
||||||
|
swal({
|
||||||
|
title: "{{ tr('Le password non coincidono') }}",
|
||||||
|
type: "error",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(password.length < min_length ){
|
||||||
|
swal({
|
||||||
|
title: "{{ tr('La password deve essere lunga minimo _MIN_ caratteri!', [
|
||||||
|
'_MIN_' => $min_length_password,
|
||||||
|
]) }}",
|
||||||
|
type: "error",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
$("#password-form").submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>$(document).ready(init);</script>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<form action="{{ route('user-photo-save') }}" method="post" enctype="multipart/form-data" id="photo-form">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
@php
|
||||||
|
$user = auth()->user();
|
||||||
|
$user_photo = $user->photo;
|
||||||
|
@endphp
|
||||||
|
@if($user_photo) {
|
||||||
|
<center><img src="{{ $user_photo }}" class="img-responsive" alt="{{ $user->username }}" /></center>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{[ "type": "file", "label": "{{ tr('Foto utente') }}", "name": "photo", "help": "{{ tr('Dimensione consigliata 100x100 pixel') }}", "required": 1 ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary pull-right">
|
||||||
|
<i class="fa fa-plus"></i> {{ tr('Aggiorna foto') }}
|
||||||
|
</button>
|
||||||
|
<div class="clearfix"> </div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script>$(document).ready(init);</script>
|
|
@ -27,7 +27,7 @@ Route::get('/', function () {
|
||||||
|
|
||||||
return redirect('controller.php?id_module='.$module->id);
|
return redirect('controller.php?id_module='.$module->id);
|
||||||
})
|
})
|
||||||
->middleware('auth');
|
->middleware(['auth']);
|
||||||
|
|
||||||
// Sezione di configurazione
|
// Sezione di configurazione
|
||||||
Route::get('/config', [ConfigurationController::class, 'index'])
|
Route::get('/config', [ConfigurationController::class, 'index'])
|
||||||
|
@ -48,7 +48,8 @@ Route::get('/messages', [Test::class, 'index'])
|
||||||
->name('messages');
|
->name('messages');
|
||||||
|
|
||||||
// Operazioni Ajax
|
// Operazioni Ajax
|
||||||
Route::prefix('ajax')->group(function () {
|
Route::prefix('ajax')
|
||||||
|
->group(function () {
|
||||||
Route::get('/select', [Test::class, 'index'])
|
Route::get('/select', [Test::class, 'index'])
|
||||||
->name('ajax-select');
|
->name('ajax-select');
|
||||||
Route::get('/complete', [Test::class, 'index'])
|
Route::get('/complete', [Test::class, 'index'])
|
||||||
|
@ -70,7 +71,9 @@ Route::prefix('ajax')->group(function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Hooks
|
// Hooks
|
||||||
Route::prefix('hook')->group(function () {
|
Route::prefix('hook')
|
||||||
|
->middleware(['auth'])
|
||||||
|
->group(function () {
|
||||||
Route::get('/list', [Test::class, 'index'])
|
Route::get('/list', [Test::class, 'index'])
|
||||||
->name('hooks');
|
->name('hooks');
|
||||||
|
|
||||||
|
@ -89,23 +92,41 @@ Route::prefix('hook')->group(function () {
|
||||||
|
|
||||||
// Informazioni su OpenSTAManager
|
// Informazioni su OpenSTAManager
|
||||||
Route::get('/info', [InfoController::class, 'info'])
|
Route::get('/info', [InfoController::class, 'info'])
|
||||||
|
->middleware(['auth'])
|
||||||
->name('info');
|
->name('info');
|
||||||
|
|
||||||
// Segnalazione bug
|
// Segnalazione bug
|
||||||
Route::get('/bug', [InfoController::class, 'bug'])
|
Route::prefix('bug')
|
||||||
|
->middleware(['auth'])
|
||||||
|
->group(function () {
|
||||||
|
Route::get('', [InfoController::class, 'bug'])
|
||||||
->name('bug');
|
->name('bug');
|
||||||
Route::post('/bug', [InfoController::class, 'send'])
|
|
||||||
|
Route::post('', [InfoController::class, 'send'])
|
||||||
->name('bug-send');
|
->name('bug-send');
|
||||||
|
});
|
||||||
|
|
||||||
// Log di accesso
|
// Log di accesso
|
||||||
Route::get('/logs', [UserController::class, 'logs'])
|
Route::get('/logs', [UserController::class, 'logs'])
|
||||||
|
->middleware(['auth'])
|
||||||
->name('logs');
|
->name('logs');
|
||||||
|
|
||||||
// Informazioni sull'utente
|
// Informazioni sull'utente
|
||||||
Route::get('/user', [UserController::class, 'index'])
|
Route::prefix('user')
|
||||||
|
->middleware(['auth'])
|
||||||
|
->group(function () {
|
||||||
|
Route::get('/info', [UserController::class, 'index'])
|
||||||
->name('user-info');
|
->name('user-info');
|
||||||
|
|
||||||
Route::get('/password', [UserController::class, 'password'])
|
Route::get('/password', [UserController::class, 'password'])
|
||||||
->name('user-password');
|
->name('user-password');
|
||||||
Route::post('/password', [UserController::class, 'save'])
|
|
||||||
->name('user-password-save');;
|
Route::post('/password', [UserController::class, 'savePassword'])
|
||||||
|
->name('user-password-save');
|
||||||
|
|
||||||
|
Route::get('/photo', [UserController::class, 'photo'])
|
||||||
|
->name('user-photo');
|
||||||
|
|
||||||
|
Route::post('/photo', [UserController::class, 'savePhoto'])
|
||||||
|
->name('user-photo-save');
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue