Sindbad~EG File Manager

Current Path : /var/www/html/apimaturidadestartup.startupacademy.digital/app/Http/Controllers/
Upload File :
Current File : /var/www/html/apimaturidadestartup.startupacademy.digital/app/Http/Controllers/AuthController.php

<?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