327 lines
11 KiB
PHP
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!',
|
|
]);
|
|
}
|
|
|
|
}
|
|
|
|
}
|