Sindbad~EG File Manager
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
use Illuminate\Support\Facades\Mail;
use App\Mail\VerificationMail;
use App\Mail\RecoveryMail;
use Illuminate\Support\Str;
use Exception;
use Illuminate\Support\Facades\Log;
use App\Models\User;
use App\Models\Startup;
use App\Models\RespostaPergunta;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\PHPMailer;
//use PHPMailer\PHPMailer\Exception;
use Swift_SmtpTransport;
use Swift_Mailer;
use Swift_Message;
class AuthController extends Controller
{
public function login(Request $request)
{
// Validação dos dados de login
$credentials = $request->only('cpf', 'password');
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Credenciais inválidas'], 401);
}
$user = Auth::user();
return response()->json(['user' => $user, 'token' => $token], 200);
}
public function register(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'cpf' => 'required|unique:users,cpf',
'email' => 'required|string|email|unique:users',
]);
if ($validator->fails()) {
$errors = $validator->errors();
// Verificar se houve erro de CPF duplicado
if ($errors->has('cpf')) {
return response()->json(['error' => 'CPF já cadastrado!'], 400);
}
// Verificar se houve erro de email duplicado
if ($errors->has('email')) {
return response()->json(['error' => 'Email já cadastrado'], 400);
}
// Outros erros de validação
return response()->json(['error' => 'Email ou CPF Inválido'], 400);
}
$temporary_password = Str::random(40);
$user = new User([
'name' => ' ',
'email' => $request->email,
'cpf' => $request->cpf,
'password' => Hash::make($temporary_password),
]);
$token = Str::random(40);
$user->email_verification_token = $token;
$user->save();
return response()->json(['message' => 'Cadastro realizado com sucesso', 'token' => $token], 201);
} catch (Exception $e) {
Log::error('Ocorreu uma exceção: ' . $e->getMessage());
return response()->json(['error' => 'Erro Interno'], 500);
}
}
public function changePassword(Request $request, $userId)
{
$user = User::find($userId);
$validator = Validator::make($request->all(), [
'new_password' => 'required|min:8',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user->password = Hash::make($request->new_password);
$user->save();
return response()->json(['message' => 'Senha alterada com sucesso'], 200);
}
public function resetPassword(Request $request, $token)
{
$validator = Validator::make($request->all(), [
'new_password' => 'required|min:8',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user = User::where('email_verification_token', $token)->first();
if (!$user) {
return response()->json(['error' => 'Token de verificação inválido'], 404);
}
$user->password = Hash::make($request->new_password);
$user->save();
return response()->json(['message' => 'Senha redefinida com sucesso'], 200);
}
public function verifyEmail(Request $request, $token)
{
$user = User::where('email_verification_token', $token)->first();
if (!$user) {
return response()->json(['error' => 'Token de verificação inválido'], 404);
}
if ($user->complete_registration) {
return response()->json(['error' => 'Utilize sua senha para fazer o login'], 400);
}
$user->email_verified_at = now();
$user->save();
$token = JWTAuth::fromUser($user);
return response()->json(['user' => $user, 'token' => $token], 200);
}
public function resendVerificationEmail(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user = User::where('email', $request->email)->first();
if (!$user) {
return response()->json(['error' => 'Usuário não encontrado'], 404);
}
$this->sendVerificationEmail($user);
return response()->json(['message' => 'E-mail de confirmação de cadastro reenviado com sucesso'], 200);
}
private function sendVerificationEmail($user)
{
try {
$token = Str::random(40);
$user->email_verification_token = $token;
$user->save();
//$verificationUrl = route('verify-email', ['token' => $token]);
$verificationUrl = 'https://www.startupacademy.digital/auth/verificar-email/' . $token;
Mail::to($user->email)->send(new VerificationMail($verificationUrl));
} catch (Exception $e) {
Log::error('Ocorreu uma exceção: ' . $e->getMessage());
}
}
public function sendRecoveryEmail(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user = User::where('email', $request->email)->first();
if (!$user) {
return response()->json(['error' => 'Usuário não encontrado'], 404);
}
$url = $request['url'];
$token = Str::random(40);
$user->email_verification_token = $token;
$user->save();
$recoveryUrl = $url . '/auth/registrar-nova-senha/' . $token;
try {
Mail::to($user->email)->send(new RecoveryMail($recoveryUrl));
} catch (Exception $e) {
Log::error('Ocorreu uma exceção ao enviar o e-mail de recuperação: ' . $e->getMessage());
return response()->json(['error' => $e->getMessage()], 500);
}
return response()->json(['message' => 'E-mail de recuperação enviado com sucesso'], 200);
}
public function verifyToken(Request $request)
{
try {
JWTAuth::guard('api')->parseToken()->authenticate();
// O token é válido, retorne uma resposta adequada
return response()->json(['valid' => true]);
} catch (Exception $e) {
// O token não é válido, retorne uma resposta adequada
return response()->json(['valid' => false], 401);
}
}
public function getUserData(Request $request)
{
$user = Auth::user();
// Carregue a startup relacionada ao usuário
$user->load('startups', 'startups.respostas', 'startups.respostas.respostasPerguntas');
// Retorne os dados do usuário
return response()->json(['user' => $user], 200);
}
public function updateUser(Request $request, $userId)
{
$user = User::find($userId);
$validator = Validator::make($request->all(), [
'name' => 'required|string',
'telefone' => 'string',
'whatsapp' => 'string',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
$user->name = $request->name;
$user->telefone = $request->telefone;
$user->whatsapp = $request->whatsapp;
$user->use_terms_accepted = $request->use_terms_accepted;
$user->save();
return response()->json(['message' => 'Usuário atualizado com sucesso'], 200);
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists