2023-02-19 01:40:12 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use App\Models\User;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
use Illuminate\Http\Request;
|
2023-09-01 14:24:10 +02:00
|
|
|
use App\Utils\Logger;
|
2023-02-19 01:40:12 +01:00
|
|
|
|
|
|
|
class AuthController extends Controller
|
|
|
|
{
|
|
|
|
public function register(Request $request)
|
|
|
|
{
|
|
|
|
$validatedData = $request->validate([
|
|
|
|
'name' => 'required|string|max:255',
|
|
|
|
'email' => 'required|string|email|max:255|unique:users',
|
2023-03-15 23:06:07 +01:00
|
|
|
'username' => 'required|string|max:255|unique:users',
|
2023-02-19 01:40:12 +01:00
|
|
|
'password' => 'required|string|min:8',
|
|
|
|
]);
|
|
|
|
|
|
|
|
$user = User::create([
|
|
|
|
'name' => $validatedData['name'],
|
|
|
|
'email' => $validatedData['email'],
|
2023-02-21 00:37:00 +01:00
|
|
|
'username' => $validatedData['username'],
|
2023-02-19 01:40:12 +01:00
|
|
|
'password' => Hash::make($validatedData['password']),
|
|
|
|
]);
|
|
|
|
|
|
|
|
$token = $user->createToken('auth_token')->plainTextToken;
|
|
|
|
|
2023-09-01 14:24:10 +02:00
|
|
|
Logger::log("Creato utente $user->name ($user->username)", $user);
|
|
|
|
|
2023-02-19 01:40:12 +01:00
|
|
|
return response()->json([
|
|
|
|
'access_token' => $token,
|
|
|
|
'token_type' => 'Bearer',
|
|
|
|
'user' => $user
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function login(Request $request)
|
|
|
|
{
|
2023-02-23 00:23:56 +01:00
|
|
|
//TODO: https://stackoverflow.com/a/73980629
|
2023-02-21 00:37:00 +01:00
|
|
|
if (!Auth::attempt($request->only('username', 'password'))) {
|
2023-02-19 01:40:12 +01:00
|
|
|
return response()->json([
|
|
|
|
'message' => 'Invalid login details'
|
|
|
|
], 401);
|
|
|
|
}
|
|
|
|
|
2023-02-21 00:37:00 +01:00
|
|
|
$user = User::where('username', $request['username'])->firstOrFail();
|
2023-02-19 01:40:12 +01:00
|
|
|
|
|
|
|
$token = $user->createToken('auth_token')->plainTextToken;
|
|
|
|
|
2023-09-01 14:24:10 +02:00
|
|
|
Logger::log("Login", $user, $user);
|
|
|
|
|
2023-02-19 01:40:12 +01:00
|
|
|
return response()->json([
|
|
|
|
'access_token' => $token,
|
|
|
|
'token_type' => 'Bearer',
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
2023-02-23 00:23:56 +01:00
|
|
|
public function logout(Request $request)
|
|
|
|
{
|
|
|
|
//TODO: https://stackoverflow.com/a/73980629
|
2023-09-01 14:24:10 +02:00
|
|
|
Logger::log("Logout");
|
2023-02-23 00:23:56 +01:00
|
|
|
auth('web')->logout();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2023-02-19 01:40:12 +01:00
|
|
|
public function me(Request $request)
|
|
|
|
{
|
2023-06-06 18:53:49 +02:00
|
|
|
$impersonateManager = app('impersonate');
|
2023-06-06 00:27:34 +02:00
|
|
|
return [
|
|
|
|
...$request->user()->toArray(),
|
|
|
|
"permissions" => array_map(function($p) {
|
|
|
|
return $p["name"];
|
|
|
|
}, $request->user()->allPermissions()->toArray()),
|
2023-06-06 18:53:49 +02:00
|
|
|
"impersonating_user" => $impersonateManager->isImpersonating(),
|
|
|
|
"impersonator_id" => $impersonateManager->getImpersonatorId()
|
2023-06-06 00:27:34 +02:00
|
|
|
];
|
2023-02-19 01:40:12 +01:00
|
|
|
}
|
2023-06-06 18:53:49 +02:00
|
|
|
|
|
|
|
public function impersonate(Request $request, $user)
|
|
|
|
{
|
|
|
|
$impersonatedUser = User::find($user);
|
|
|
|
$request->user()->impersonate($impersonatedUser);
|
|
|
|
$token = $impersonatedUser->createToken('auth_token')->plainTextToken;
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
'access_token' => $token,
|
|
|
|
'token_type' => 'Bearer',
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function stopImpersonating(Request $request)
|
|
|
|
{
|
|
|
|
$request->user()->leaveImpersonation();
|
|
|
|
return;
|
|
|
|
}
|
2023-02-19 01:40:12 +01:00
|
|
|
}
|