mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-22 00:13:46 -04:00
151 lines
4.9 KiB
PHP
151 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace Modules\Chat\Http\Controllers\API;
|
|
|
|
use Modules\Chat\Http\Controllers\AppBaseController;
|
|
use App\Http\Requests\API\RegisterRequest;
|
|
use App\Models\Role;
|
|
use App\Models\User;
|
|
use Modules\Chat\Repositories\AccountRepository;
|
|
use Modules\Chat\Repositories\UserRepository;
|
|
use Carbon\Carbon;
|
|
use Crypt;
|
|
use Exception;
|
|
use Hash;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use InfyOm\Generator\Utils\ResponseUtil;
|
|
|
|
class AuthAPIController extends AppBaseController
|
|
{
|
|
/** @var AccountRepository */
|
|
public $accountRepo;
|
|
/** @var UserRepository */
|
|
private $userRepository;
|
|
|
|
public function __construct(AccountRepository $accountRepository, UserRepository $userRepo)
|
|
{
|
|
$this->accountRepo = $accountRepository;
|
|
$this->userRepository = $userRepo;
|
|
}
|
|
|
|
/**
|
|
* @param Request $request
|
|
*
|
|
* @return JsonResponse
|
|
*/
|
|
public function login(Request $request)
|
|
{
|
|
$email = $request->get('email');
|
|
$password = $request->get('password');
|
|
|
|
if (empty($email) or empty($password)) {
|
|
return $this->sendError('username and password required', Response::HTTP_UNPROCESSABLE_ENTITY);
|
|
}
|
|
|
|
/** @var User $user */
|
|
$user = User::whereRaw('lower(email) = ?', [$email])->first();
|
|
if (empty($user)) {
|
|
return $this->sendError('Invalid username or password', Response::HTTP_UNPROCESSABLE_ENTITY);
|
|
}
|
|
|
|
if (! Hash::check($password, $user->password)) {
|
|
return $this->sendError('Invalid username or password', Response::HTTP_UNPROCESSABLE_ENTITY);
|
|
}
|
|
|
|
if (! $user->is_active) {
|
|
return JsonResponse::fromJsonString(ResponseUtil::makeError('Your account is deactivated. Please verify your email for account activation.'), Response::HTTP_UNAUTHORIZED);
|
|
}
|
|
|
|
$tokenResult = $user->createToken('Personal Access Token');
|
|
$token = $tokenResult->token;
|
|
$token->save();
|
|
|
|
$user->update(['is_online' => 1, 'last_seen' => null]);
|
|
|
|
return $this->sendResponse(['token' => $tokenResult->accessToken, 'user' => $user], 'Logged in successfully.');
|
|
}
|
|
|
|
/**
|
|
* @param RegisterRequest $request
|
|
*
|
|
* @throws \Exception
|
|
* @return JsonResponse
|
|
*/
|
|
public function register(RegisterRequest $request)
|
|
{
|
|
$input = $request->all();
|
|
|
|
/** @var User $user */
|
|
$user = User::create([
|
|
'name' => $input['name'],
|
|
'email' => $input['email'],
|
|
'password' => Hash::make($input['password']),
|
|
]);
|
|
|
|
$apiUrl = url('/api');
|
|
|
|
$this->userRepository->assignRoles($user, ['role_id' => Role::MEMBER_ROLE]);
|
|
$activateCode = $this->accountRepo->generateUserActivationToken($user->id);
|
|
$this->accountRepo->sendConfirmEmail($user->name, $user->email, $activateCode, $apiUrl);
|
|
|
|
return $this->sendSuccess('Please check your email inbox to confirm your account. Do not forget to check your spam folder as well.');
|
|
}
|
|
|
|
/**
|
|
* @return JsonResponse
|
|
*/
|
|
public function logout()
|
|
{
|
|
$authUser = getLoggedInUser();
|
|
$userTokens = $authUser->tokens;
|
|
|
|
foreach ($userTokens as $token) {
|
|
/** var Laravel\Passport\Token $token */
|
|
$token->revoke();
|
|
}
|
|
|
|
$authUser->update(['is_online' => 0, 'last_seen' => Carbon::now()]);
|
|
|
|
return $this->sendSuccess('Logged out successfully.');
|
|
}
|
|
|
|
public function verifyAccount(Request $request)
|
|
{
|
|
$token = $request->get('token', null);
|
|
$baseUrl = url('/');
|
|
|
|
if (empty($token)) {
|
|
return redirect('/login?success=0&msg=token not found.');
|
|
}
|
|
|
|
try {
|
|
$token = Crypt::decrypt($token);
|
|
list($userId, $activationCode) = $result = explode('|', $token);
|
|
$loginUrl = $baseUrl.'/login';
|
|
|
|
if (count($result) < 2) {
|
|
return redirect($loginUrl.'?success=0&msg=token not found.');
|
|
}
|
|
|
|
/** @var User $user */
|
|
$user = User::whereActivationCode($activationCode)->findOrFail($userId);
|
|
|
|
if (empty($user)) {
|
|
return redirect($loginUrl.'?success=0&msg=This account activation token is invalid.');
|
|
}
|
|
if ($user->is_active) {
|
|
return redirect($loginUrl.'?success=0&msg=Your account already activated. Please do a login.');
|
|
}
|
|
|
|
$user->is_active = 1;
|
|
$user->save();
|
|
|
|
return redirect($loginUrl.'?success=1&msg=Your account is successfully activated. Please do a login.');
|
|
} catch (Exception $e) {
|
|
return redirect('/login?success=0&msg=Something went wrong.');
|
|
}
|
|
}
|
|
}
|