262 lines
8.4 KiB
PHP
262 lines
8.4 KiB
PHP
|
|
<?php
|
||
|
|
namespace App\Http\Controllers\Api\V1;
|
||
|
|
use App\Models\User;
|
||
|
|
use App\Constant\Constant;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Illuminate\Support\Facades\Validator;
|
||
|
|
use App\Http\Controllers\Api\ApiController;
|
||
|
|
use App\Http\Requests\ChangePassword\SetPasswordRequest;
|
||
|
|
use App\Jobs\Notifications\Shravak\SendNewSignUp;
|
||
|
|
use App\Repositories\Api\Access\User\UserInterface as UserRepo;
|
||
|
|
|
||
|
|
|
||
|
|
class AuthController extends ApiController
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* @param UserRepo $userRepo
|
||
|
|
* AuthController constructor.
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
public function __construct(UserRepo $userRepo)
|
||
|
|
{
|
||
|
|
$this->userRepo = $userRepo;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param object $request
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function login(Request $request)
|
||
|
|
{
|
||
|
|
try {
|
||
|
|
$validation = Validator::make($request->all(), [
|
||
|
|
'email' => 'required',
|
||
|
|
'country_code' => 'sometimes',
|
||
|
|
'via' => 'required|in:OTP,PASSWORD',
|
||
|
|
'password' => 'required_if:via,=,PASSWORD'
|
||
|
|
]);
|
||
|
|
|
||
|
|
if ($validation->fails()) {
|
||
|
|
return $this->throwValidation($validation->messages()->first());
|
||
|
|
}
|
||
|
|
$response = $this->userRepo->loginVerification($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param object $request
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function register(Request $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
$verified = $request['verified'] ?? Constant::NULL;
|
||
|
|
$validation = Validator::make($request->all(), [
|
||
|
|
'name' => 'required|string',
|
||
|
|
'email' => 'required|unique:users',
|
||
|
|
'country_code' => 'required',
|
||
|
|
'dharma' => 'required'
|
||
|
|
]);
|
||
|
|
|
||
|
|
if ($validation->fails()) {
|
||
|
|
return $this->throwValidation($validation->messages()->first());
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
$emailHash = md5(strtolower($request->email)); //converted to hash
|
||
|
|
|
||
|
|
if (filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
|
||
|
|
$checkUser = User::where([
|
||
|
|
'email_hash' => $emailHash,
|
||
|
|
'deleted_at' => Constant::NULL
|
||
|
|
])->first();
|
||
|
|
} else {
|
||
|
|
$checkUser = User::where([
|
||
|
|
'mobile' => $request->email,
|
||
|
|
'country_code' => $request->country_code,
|
||
|
|
'deleted_at' => Constant::NULL
|
||
|
|
])->first();
|
||
|
|
}
|
||
|
|
|
||
|
|
//To send the verification code to the unverified user
|
||
|
|
if (!empty($checkUser)) {
|
||
|
|
//Remove confirmation code
|
||
|
|
removeUserMetaValue($checkUser->id, 'confirmation_code');
|
||
|
|
|
||
|
|
$otp = generateOtp();
|
||
|
|
$dataConfirmationCode['user_id'] = $checkUser->id;
|
||
|
|
$dataConfirmationCode['meta_key'] = 'confirmation_code';
|
||
|
|
$dataConfirmationCode['meta_value'] = bcrypt($otp);
|
||
|
|
|
||
|
|
$dataRegister['user_id'] = $checkUser->id;
|
||
|
|
$dataRegister['meta_key'] = 'registered_from';
|
||
|
|
$dataRegister['meta_value'] = 'Mobile';
|
||
|
|
|
||
|
|
$dataRegisterOs['user_id'] = $checkUser->id;
|
||
|
|
$dataRegisterOs['meta_key'] = 'registered_os';
|
||
|
|
$dataRegisterOs['meta_value'] = 'Android';
|
||
|
|
|
||
|
|
$dataRegisterWith['user_id'] = $checkUser->id;
|
||
|
|
$dataRegisterWith['meta_key'] = 'registered_with';
|
||
|
|
$dataRegisterWith['meta_value'] = 'Normal';
|
||
|
|
|
||
|
|
//Adding details to user meta
|
||
|
|
addUserMultipleMetaValue([$dataRegister, $dataRegisterOs, $dataRegisterWith]);
|
||
|
|
|
||
|
|
//event for sending mail of email verification
|
||
|
|
// event(new \App\Events\Frontend\Auth\UserConfirmation($checkUser, $otp));
|
||
|
|
|
||
|
|
$response['status'] = Constant::CODE_403;
|
||
|
|
$response['message'] = trans('auth.contact_exists');
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($verified == Constant::STATUS_ONE) {
|
||
|
|
$response = $this->userRepo->createUser($request->all(), $emailHash);
|
||
|
|
} else {
|
||
|
|
$response['status'] = Constant::CODE_200;
|
||
|
|
$response['message'] = trans('auth.register_success');
|
||
|
|
}
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param object $request
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function confirmOtp(Request $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
|
||
|
|
try {
|
||
|
|
$validation = Validator::make($request->all(), [
|
||
|
|
'email' => 'required',
|
||
|
|
'otp' => 'required',
|
||
|
|
]);
|
||
|
|
|
||
|
|
if ($validation->fails()) {
|
||
|
|
return $this->throwValidation($validation->messages()->first());
|
||
|
|
}
|
||
|
|
$response = $this->userRepo->confirmOtp($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$response['success'] = Constant::STATUS_FALSE;
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param object $request
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function resendOtp(Request $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
|
||
|
|
try {
|
||
|
|
$validation = Validator::make($request->all(), [
|
||
|
|
'email' => 'required',
|
||
|
|
]);
|
||
|
|
|
||
|
|
if ($validation->fails()) {
|
||
|
|
return $this->throwValidation($validation->messages()->first());
|
||
|
|
}
|
||
|
|
$response = $this->userRepo->resendOtp($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$response['success'] = Constant::STATUS_FALSE;
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param Request $request
|
||
|
|
* @return JsonResponse
|
||
|
|
*
|
||
|
|
* Social Login User
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
public function socialLogin(Request $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
|
||
|
|
try {
|
||
|
|
$validation = Validator::make($request->all(), [
|
||
|
|
'provider' => 'required',
|
||
|
|
'id' => 'required',
|
||
|
|
'email' => 'required|email|unique:users,email,null,id,deleted_at,null',
|
||
|
|
'name' => 'required',
|
||
|
|
]);
|
||
|
|
|
||
|
|
if ($validation->fails()) {
|
||
|
|
return $this->throwValidation($validation->messages()->first());
|
||
|
|
}
|
||
|
|
$response = $this->userRepo->findOrCreateSocial($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function setPassword(SetPasswordRequest $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
try{
|
||
|
|
$response = $this->userRepo->setPassword($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$response['success'] = Constant::STATUS_FALSE;
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @return array
|
||
|
|
*/
|
||
|
|
public function userExist(Request $request)
|
||
|
|
{
|
||
|
|
$response = [];
|
||
|
|
try{
|
||
|
|
$response = $this->userRepo->userExist($request->all());
|
||
|
|
$this->setStatusCode($response['status']);
|
||
|
|
|
||
|
|
} catch (\Exception $ex) {
|
||
|
|
$response['message'] = $ex->getMessage();
|
||
|
|
$response['success'] = Constant::STATUS_FALSE;
|
||
|
|
$this->setStatusCode(Constant::CODE_403);
|
||
|
|
}
|
||
|
|
return $this->respond($response);
|
||
|
|
}
|
||
|
|
}
|