<?php
namespace App\Http\Controllers\Api;
use App\Admin;
use App\Classes\CurrentPassword;
use App\Classes\GenerateUserId;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Route;
use Laravel\Passport\Client;
class AdminController extends Controller
{
private $client;
public function __construct()
{
$this->client = Client::find(4);
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required'
], [
'email.required' => 'O Campo Email é Obrigatório',
'password.required' => 'O Campo Senha é Obrigatório',
]);
$params = [
'grant_type' => 'password',
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'username' => request('email'),
'password' => request('password'),
'provider' => 'admins',
'scope' => '*'
];
$request->request->add($params);
Config::set('auth.guards.api.provider', $params['provider']);
$proxy = Request::create('oauth/token', 'POST');
return Route::dispatch($proxy);
}
public function refresh(Request $request)
{
$this->validate($request, [
'refresh_token' => 'required'
]);
$params = [
'grant_type' => 'refresh_token',
'refresh_token' => request('refresh_token'),
'client_id' => $this->client->id,
'client_secret' => $this->client->secret,
'username' => request('email'),
'password' => request('password'),
'provider' => 'admins'
];
$request->request->add($params);
Config::set('auth.guards.api.provider', $params['provider']);
$proxy = Request::create('oauth/token', 'POST');
return Route::dispatch($proxy);
}
public function logout(Request $request)
{
$accessToken = Auth::user()->token();
DB::table('oauth_refresh_tokens')->where('access_token_id', $accessToken->id)
->update(['revoked' => true]);
$accessToken->revoke();
return response()->json([], 204);
}
public function saveUser(Request $request)
{
$generate = new GenerateUserId();
$randomString = $generate->generatedUserId(30);
$user = Admin::create([
'name' => request('name'),
'last_name' => request('last_name'),
'email' => request('email'),
'profile' => request('profile'),
'phone' => request('phone'),
'status' => 1,
'bi' => request('bi'),
'user_id' => $randomString,
'password' => bcrypt('12345678'),
]);
return response()->json(['message' => 'Utilizador Adicionado com Sucesso'], 200);
}
public function loggedUser(Request $request)
{
return response()->json($request->user());
}
public function getUsers()
{
$users = Admin::query()->get();
return response()->json(['data' => $users]);
}
public function deleteUser($id)
{
$user = Admin::query()->where('id', $id)->first();
if ($user) {
$user->delete();
return response()->json(['message' => 'Utilizador removido com Sucesso']);
} else {
return response()->json(['message' => 'Utilizador não encontrado'], 404);
}
}
public function updateUser(Request $request)
{
// return $request->all();
$user = Admin::query()->where('id', $request->id)->first();
if ($user) {
$user->update([
'name' => request('name'),
'last_name' => $request->last_name,
'email' => request('email'),
'phone' => request('phone'),
'profile' => $request->profile,
'bi' => request('bi'),
'password' => bcrypt(request('password')),
]);
return response()->json(['message' => 'Dados do ' . $user->name . ' actualizados com Sucesso']);
} else {
return response()->json(['message' => 'Utilizador não encontrado'], 404);
}
}
public function getUser($id)
{
$user = Admin::query()->where('id', $id)->first();
return response()->json($user);
}
public function enableOrDisable($id)
{
$user = Admin::query()->where('id', $id)->first();
if ($user->status == 1) {
$user->update([
'status' => 0
]);
return response()->json(['message' => 'Utilizador ' . $user->name . ' desabilitado com Sucesso!']);
} else {
$user->update([
'status' => 1
]);
return response()->json(['message' => 'Utilizador ' . $user->name . ' activado com Sucesso!']);
}
}
public function updateUserPasword(Request $request)
{
$user = Admin::query()->where('id', $request->id)->first();
if ($user) {
if (Hash::check($request->current_password, $user->password) && $request->current_password != null) {
$user->update([
'password' => bcrypt($request->new_password)
]);
return response()->json(['message' => 'Senha da conta ' . $user->email . ' actualizada com Sucesso'], 200);
} else {
return response()->json(['message' => 'Senha Antiga Inválida'], 400);
}
} else {
return response()->json(['message' => 'Utilizador inválido'], 400);
}
}
public function changePassword(Request $request)
{
$this->validate($request, [
'current_password' => ['required', new CurrentPassword()],
'new_password' => ['required', 'min:8', 'confirmed'],
'new_password_confirmation' => 'required|min:8',
], [
'current_password.required' => 'O Campo Senha Actual é Obrigatório',
'new_password.required' => 'O Campo Nova Senha é Obrigatório',
'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório',
'new_password.confirmed' => 'Senhas incompatíveis',
'current_password.min' => 'A senha deve ter 8 digitos no mínimo',
'new_password.min' => 'A senha deve ter 8 digitos no mínimo',
'new_password_confirmation.min' => 'A senha deve ter 8 digitos no mínimo'
]
);
if (Hash::check($request->current_password, $request->user()->password)) {
$request->user()->update([
'password' => bcrypt($request->new_password),
'session_status' => 1
]);
return response()->json(['message' => 'Senhas Compativeis'], 200);
} else {
return response()->json(['message' => 'Senha Antiga Inválida'], 404);
}
}
}