Files
vedant-chavan/app/Http/Controllers/API/LoginController.php
vedant-chavan eff0228447 first commit
2024-06-12 20:29:05 +05:30

327 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\UserEmailOtp;
use App\Models\UserDetail;
use Carbon\Carbon;
use Auth;
// use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use App\Mail\SendUserOtp;
use App\Models\mood_o_meter;
use App\Models\PersonalAccessToken;
use App\Models\LeaderboardMaster;
class LoginController extends Controller
{
public function login(Request $request)
{
$validator = Validator::make($request->all(),[
'email_id' => 'required|email',
'password' => 'required|string|min:6'
]);
$credentials = $request->only('email_id', 'password');
$token = Auth::guard('api')->attempt($credentials);
// $token = auth('api')->attempt($credentials);
// dd("TOKEN",$token);
if (!$token) {
return response()->json([
'success' => false,
'message' => 'Wrong Creditials',
'status'=>401,
], 401);
}
$user = Auth::guard('api')->user();
// dd($user->end_date);
$todays_date = Carbon::now()->toDateString();
// dd($todays_date);
$endDate = Carbon::parse($user->end_date);
$subscriptionEndsIn7Days = $endDate->addDays(7)->toDateString();
if($subscriptionEndsIn7Days == null || $subscriptionEndsIn7Days < $todays_date){
$logout = auth('api')->logout();
return response()->json([
'success' => false,
'message' => 'Subscription end',
'status'=>201,], 201);
}
$personalAccessToken = new PersonalAccessToken();
$personalAccessToken->user_id = $user->id;
$personalAccessToken->token = $token;
$personalAccessToken->last_login = Carbon::now()->format('Y-m-d H:i:s');
$personalAccessToken->save();
//moodometer add data
$existingRecord = mood_o_meter::where('user_id', $user->id)->exists();
if (!$existingRecord) {
// Create a new mood record
$newEntry = mood_o_meter::create([
'user_id' => $user->id,
'mood_o_meter' => null,
'is_active' => '1',
]);
}
//Leaderboard add data
$existingRecord = LeaderboardMaster::where('user_id', $user->id)->exists();
if (!$existingRecord) {
// Create a new leaderbaord record
$newEntry = LeaderboardMaster::create([
'user_id' => $user->id,
'total_score' => '0',
'progress_bar' => '0',
]);
}
$user = User::with('user_detail')->where('id', $user->id)->first()->toArray();
// $user = User::select('id','full_name','contact_number','email_id','status')->where('id',$user->id)->first()->toArray();
return response()->json([
'success' => true,
'status' => true,
'message'=> 'You are successfully logged in',
'authorisation' => [
'token' => $token,
'user_data' => $user,
'type' => 'bearer',
]
], 200);
}
public function update_password(Request $request) {
$validator = Validator::make($request->all(), [
'user_id' => 'required|exists:users,id',
// 'current_password' => 'required|string|min:6',
'password' => 'required|string|confirmed'
]);
if ($validator->fails()) {
return response()->json([
'success' => false,
'status' => 406,
'message' => 'Password does not match',
'error' => $validator->errors(),
], 401);
}
# Match The Old Password
$user = User::where('id', $request->user_id)->first();
$user->password = Hash::make($request->input('password'));
$user->update();
return response()->json([
'success' => true,
'status' => 200,
'message' => 'Password changed successfully!',
]);
}
public function generate(Request $request) {
$validator = Validator::make($request->all(), [
'email_id' => 'required|email',
]);
if ($validator->fails()) {
return response()->json([
'error' => $validator->errors()], 401);
}
//check user exist or not
$email = $request->email_id;
$user = User::where('email_id', $email)->first();
if(!$user){
return response(["status" => 404,
'message' => 'Email Id Does Not Exist']
);
}
// Generate An Otp
$otp = UserEmailOtp::updateOrCreate(['user_id' => $user->id],
[ 'otp' => rand(1000, 9999),
'valid_upto' => Carbon::now()->addMinutes(10)
]);
if ($otp) {
// send otp in the email
$mail_details = [
'email' => $request->email_id,
'subject' => 'Forgot Password',
'body' => 'Your OTP is : ' . $otp->otp
];
$mail = \Mail::to($request->email_id)->send(new SendUserOtp($mail_details));
return response(["status" => 200,
"message" => "OTP sent successfully",
'user_id' => $otp['user_id']]);
} else {
return response(["status" => 401,
'message' => 'Invalid']
);
}
}
public function verifyOtp(Request $request) {
$emailId = $request->email_id;
$otp = $request->otp;
// dd($emailId,$otp);
$user = User::where('email_id', $emailId)->first();
$varificationCode = UserEmailOtp::where('user_id', $user->id)->latest()->first();
// dd($varificationCode);
$now = Carbon::now();
if ($varificationCode && $now->isAfter($varificationCode->valid_upto)) {
return response()->json([
'status' => 500,
'message' => 'Your OTP has been expired',
], 500);
}
if($varificationCode->otp != $otp){
return response(["status" => 401,
'message' => 'Invalid OTP']
);
}else{
return response(["status" => 200,
'message' => 'Valid OTP']
);
}
}
public function create_new_pass_with_otp(Request $request) {
$request->validate([
'user_id' => 'required|exists:users,id',
]);
$validator = Validator::make($request->all(), [
'user_id' => 'required|exists:users,id',
'otp' => 'required'
]);
#Validation Logic
$verificationCode = UserEmailOtp::where('user_id', $request->user_id)
->where('otp', $request->otp)
->first();
$now = Carbon::now();
if (!$verificationCode) {
return response()->json([
'status' => 401,
'message' => 'Invalid',
], 401);
} elseif ($verificationCode && $now->isAfter($verificationCode->valid_upto)) {
return response()->json([
'status' => 500,
'message' => 'Your OTP has been expired',
], 500);
} else {
return response()->json([
'status' => 200,
'message' => 'Otp Verify successfully',
], 200);
}
}
public function resend_otp(Request $request) {
$validator = Validator::make($request->all(), [
'email_id' => 'required|email',
]);
if ($validator->fails()) {
return response()->json([
'error' => $validator->errors()], 401);
}
// Generate An Otp
$email = $request->email_id;
$user = User::where('email_id', $email)->first();
$otp = UserEmailOtp::updateOrCreate(['user_id' => $user->id],
[ 'otp' => rand(1000, 9999),
'valid_upto' => Carbon::now()->addMinutes(10)
]);
if ($otp) {
// send otp in the email
$mail_details = [
'email' => $request->email_id,
'subject' => 'Forgot Password',
'body' => 'Your OTP is : ' . $otp->otp
];
// print_r($mail_details);exit;
\Mail::to($request->email_id)->send(new SendUserOtp($mail_details));
return response(["status" => 200,
"message" => "OTP sent successfully",
'user_id' => $otp['user_id']]);
} else {
return response(["status" => 401,
'message' => 'Invalid']
);
}
// $message = "Your otp is - ".$varificationCode->otp;
return response()->json([
'success' => true,
'status' => 200,
'message' => $message,
]);
}
public function resetPassword(Request $request){
$userId = $request->user_id;
$oldPass = $request->old_pass;
$newPass = $request->new_pass;
//check old password is not match with new password
$userPass = User::where('id',$userId)->first();
if(!Hash::check($oldPass,$userPass->password)){
return response()->json([
'status'=>201 ,
'message'=>'Wrong Password'
]);
}elseif(Hash::check($newPass,$userPass->password)){
return response()->json([
'status'=>201 ,
'message'=>'New Password and Old Password Cannot Be same'
]);
}else{
$user = User::where('id', $userId)->first();
$user->password = Hash::make($newPass);
$user->update();
return response()->json([
'success' => true,
'status' => 200,
'message' => 'Password changed successfully!',
]);
}
}
}