You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					445 lines
				
				18 KiB
			
		
		
			
		
	
	
					445 lines
				
				18 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Http\Controllers\Api\V1\Auth;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use App\Models\User;
							 | 
						||
| 
								 | 
							
								use Carbon\CarbonInterval;
							 | 
						||
| 
								 | 
							
								use Illuminate\Http\Request;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\Helpers;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Carbon;
							 | 
						||
| 
								 | 
							
								use App\Mail\EmailVerification;
							 | 
						||
| 
								 | 
							
								use App\Models\BusinessSetting;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\SMS_module;
							 | 
						||
| 
								 | 
							
								use App\Models\WalletTransaction;
							 | 
						||
| 
								 | 
							
								use App\Models\EmailVerifications;
							 | 
						||
| 
								 | 
							
								use App\Models\PhoneVerifications;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\DB;
							 | 
						||
| 
								 | 
							
								use App\CentralLogics\CustomerLogic;
							 | 
						||
| 
								 | 
							
								use App\Http\Controllers\Controller;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Mail;
							 | 
						||
| 
								 | 
							
								use Illuminate\Support\Facades\Validator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CustomerAuthController extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public function verify_phone(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'phone' => 'required|min:11|max:14',
							 | 
						||
| 
								 | 
							
								            'otp'=>'required',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $user = User::where('phone', $request->phone)->first();
							 | 
						||
| 
								 | 
							
								        if($user)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if($user->is_phone_verified)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'message' => translate('messages.phone_number_is_already_varified')
							 | 
						||
| 
								 | 
							
								                ], 200);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if(env('APP_MODE')=='demo')
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if($request['otp']=="1234")
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    $user->is_phone_verified = 1;
							 | 
						||
| 
								 | 
							
								                    $user->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    return response()->json([
							 | 
						||
| 
								 | 
							
								                        'message' => translate('messages.phone_number_varified_successfully'),
							 | 
						||
| 
								 | 
							
								                        'otp' => 'inactive'
							 | 
						||
| 
								 | 
							
								                    ], 200);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'message' => translate('messages.phone_number_and_otp_not_matched')
							 | 
						||
| 
								 | 
							
								                ], 404);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $data = DB::table('phone_verifications')->where([
							 | 
						||
| 
								 | 
							
								                'phone' => $request['phone'],
							 | 
						||
| 
								 | 
							
								                'token' => $request['otp'],
							 | 
						||
| 
								 | 
							
								            ])->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if($data)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                DB::table('phone_verifications')->where([
							 | 
						||
| 
								 | 
							
								                    'phone' => $request['phone'],
							 | 
						||
| 
								 | 
							
								                    'token' => $request['otp'],
							 | 
						||
| 
								 | 
							
								                ])->delete();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $user->is_phone_verified = 1;
							 | 
						||
| 
								 | 
							
								                $user->save();
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'message' => translate('messages.phone_number_varified_successfully'),
							 | 
						||
| 
								 | 
							
								                    'otp' => 'inactive'
							 | 
						||
| 
								 | 
							
								                ], 200);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            else{
							 | 
						||
| 
								 | 
							
								                // $otp_hit = BusinessSetting::where('key', 'max_otp_hit')->first();
							 | 
						||
| 
								 | 
							
								                // $max_otp_hit =isset($otp_hit) ? $otp_hit->value : 5 ;
							 | 
						||
| 
								 | 
							
								                $max_otp_hit = 5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                // $otp_hit_time = BusinessSetting::where('key', 'max_otp_hit_time')->first();
							 | 
						||
| 
								 | 
							
								                // $max_otp_hit_time =isset($otp_hit_time) ? $otp_hit_time->value : 30 ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $max_otp_hit_time = 60; // seconds
							 | 
						||
| 
								 | 
							
								                $temp_block_time = 600; // seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $verification_data= DB::table('phone_verifications')->where('phone', $request['phone'])->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if(isset($verification_data)){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // if($verification_data->is_blocked == 1){
							 | 
						||
| 
								 | 
							
								                    //     $errors = [];
							 | 
						||
| 
								 | 
							
								                    //     array_push($errors, ['code' => 'otp', 'message' => translate('messages.your_account_is_blocked')]);
							 | 
						||
| 
								 | 
							
								                    //     return response()->json(['errors' => $errors ], 403);
							 | 
						||
| 
								 | 
							
								                    // }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if(isset($verification_data->temp_block_time ) && Carbon::parse($verification_data->temp_block_time)->DiffInSeconds() <= $temp_block_time){
							 | 
						||
| 
								 | 
							
								                        $time= $temp_block_time - Carbon::parse($verification_data->temp_block_time)->DiffInSeconds();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        $errors = [];
							 | 
						||
| 
								 | 
							
								                        array_push($errors, ['code' => 'otp_block_time',
							 | 
						||
| 
								 | 
							
								                        'message' => translate('messages.please_try_again_after_').CarbonInterval::seconds($time)->cascade()->forHumans()
							 | 
						||
| 
								 | 
							
								                         ]);
							 | 
						||
| 
								 | 
							
								                        return response()->json([
							 | 
						||
| 
								 | 
							
								                            'errors' => $errors
							 | 
						||
| 
								 | 
							
								                        ], 405);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if($verification_data->is_temp_blocked == 1 && Carbon::parse($verification_data->updated_at)->DiffInSeconds() >= $max_otp_hit_time){
							 | 
						||
| 
								 | 
							
								                        DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                            [
							 | 
						||
| 
								 | 
							
								                                'otp_hit_count' => 0,
							 | 
						||
| 
								 | 
							
								                                'is_temp_blocked' => 0,
							 | 
						||
| 
								 | 
							
								                                'temp_block_time' => null,
							 | 
						||
| 
								 | 
							
								                                'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                                'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                            ]);
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // if($verification_data->is_temp_blocked == 1 && Carbon::parse($verification_data->updated_at)->DiffInSeconds() < $max_otp_hit_time){
							 | 
						||
| 
								 | 
							
								                    //         $errors = [];
							 | 
						||
| 
								 | 
							
								                    //     array_push($errors, ['code' => 'otp', 'message' => translate('messages.please_try_again_after_').$time.' '.translate('messages.seconds') ]);
							 | 
						||
| 
								 | 
							
								                    //     return response()->json([
							 | 
						||
| 
								 | 
							
								                    //         'errors' => $errors
							 | 
						||
| 
								 | 
							
								                    //     ], 405);
							 | 
						||
| 
								 | 
							
								                    //     }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if($verification_data->otp_hit_count >= $max_otp_hit &&  Carbon::parse($verification_data->updated_at)->DiffInSeconds() < $max_otp_hit_time &&  $verification_data->is_temp_blocked == 0){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                            [
							 | 
						||
| 
								 | 
							
								                            'is_temp_blocked' => 1,
							 | 
						||
| 
								 | 
							
								                            'temp_block_time' => now(),
							 | 
						||
| 
								 | 
							
								                            'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                            'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                            ]);
							 | 
						||
| 
								 | 
							
								                        $errors = [];
							 | 
						||
| 
								 | 
							
								                        array_push($errors, ['code' => 'otp_temp_blocked', 'message' => translate('messages.Too_many_attemps') ]);
							 | 
						||
| 
								 | 
							
								                        return response()->json([
							 | 
						||
| 
								 | 
							
								                            'errors' => $errors
							 | 
						||
| 
								 | 
							
								                        ], 405);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    // if($verification_data->otp_hit_count >= $max_otp_hit &&  Carbon::parse($verification_data->updated_at)->DiffInSeconds() < $max_otp_hit_time){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    //     DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                    //         [
							 | 
						||
| 
								 | 
							
								                    //         // 'is_temp_blocked' => 1,
							 | 
						||
| 
								 | 
							
								                    //         'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                    //         'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                    //         ]);
							 | 
						||
| 
								 | 
							
								                    //         // $errors = [];
							 | 
						||
| 
								 | 
							
								                    //         array_push($errors, ['code' => 'otp_warning', 'message' =>translate('messages.Too_many_attemps') ]);
							 | 
						||
| 
								 | 
							
								                    //         return response()->json([
							 | 
						||
| 
								 | 
							
								                    //             'errors' => $errors
							 | 
						||
| 
								 | 
							
								                    //         ], 405);
							 | 
						||
| 
								 | 
							
								                    // }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                'otp_hit_count' => DB::raw('otp_hit_count + 1'),
							 | 
						||
| 
								 | 
							
								                'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                'temp_block_time' => null,
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'message' => translate('messages.phone_number_and_otp_not_matched')
							 | 
						||
| 
								 | 
							
								                ], 404);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return response()->json([
							 | 
						||
| 
								 | 
							
								            'message' => translate('messages.not_found')
							 | 
						||
| 
								 | 
							
								        ], 404);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function check_email(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'email' => 'required|unique:users'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (BusinessSetting::where(['key'=>'email_verification'])->first()->value){
							 | 
						||
| 
								 | 
							
								            $token = rand(1000, 9999);
							 | 
						||
| 
								 | 
							
								            DB::table('email_verifications')->insert([
							 | 
						||
| 
								 | 
							
								                'email' => $request['email'],
							 | 
						||
| 
								 | 
							
								                'token' => $token,
							 | 
						||
| 
								 | 
							
								                'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            try{
							 | 
						||
| 
								 | 
							
								                if(config('mail.status')) {
							 | 
						||
| 
								 | 
							
								                    Mail::to($request['email'])->send(new EmailVerification($token));
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            }catch(\Exception $ex){
							 | 
						||
| 
								 | 
							
								                info($ex);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'message' => 'Email is ready to register',
							 | 
						||
| 
								 | 
							
								                'token' => 'active'
							 | 
						||
| 
								 | 
							
								            ], 200);
							 | 
						||
| 
								 | 
							
								        }else{
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'message' => 'Email is ready to register',
							 | 
						||
| 
								 | 
							
								                'token' => 'inactive'
							 | 
						||
| 
								 | 
							
								            ], 200);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function verify_email(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'email' => 'required'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $verify = EmailVerifications::where(['email' => $request['email'], 'token' => $request['token']])->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (isset($verify)) {
							 | 
						||
| 
								 | 
							
								            $verify->delete();
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'message' => translate('messages.token_varified'),
							 | 
						||
| 
								 | 
							
								            ], 200);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $errors = [];
							 | 
						||
| 
								 | 
							
								        array_push($errors, ['code' => 'token', 'message' => translate('messages.token_not_found')]);
							 | 
						||
| 
								 | 
							
								        return response()->json(['errors' => $errors ]
							 | 
						||
| 
								 | 
							
								        , 404);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function register(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'f_name' => 'required',
							 | 
						||
| 
								 | 
							
								            'l_name' => 'required',
							 | 
						||
| 
								 | 
							
								            'email' => 'required|unique:users',
							 | 
						||
| 
								 | 
							
								            'phone' => 'required|unique:users',
							 | 
						||
| 
								 | 
							
								            'password' => 'required|min:6',
							 | 
						||
| 
								 | 
							
								        ], [
							 | 
						||
| 
								 | 
							
								            'f_name.required' => 'The first name field is required.',
							 | 
						||
| 
								 | 
							
								            'l_name.required' => 'The last name field is required.',
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $ref_by= null ;
							 | 
						||
| 
								 | 
							
								        $customer_verification = BusinessSetting::where('key','customer_verification')->first()->value;
							 | 
						||
| 
								 | 
							
								        //Save point to refeer
							 | 
						||
| 
								 | 
							
								        if($request->ref_code) {
							 | 
						||
| 
								 | 
							
								            $ref_status = BusinessSetting::where('key','ref_earning_status')->first()->value;
							 | 
						||
| 
								 | 
							
								            if ($ref_status != '1') {
							 | 
						||
| 
								 | 
							
								                return response()->json(['errors'=>Helpers::error_formater('ref_code', translate('messages.referer_disable'))], 403);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $referar_user = User::where('ref_code', '=', $request->ref_code)->first();
							 | 
						||
| 
								 | 
							
								            if (!$referar_user || !$referar_user->status) {
							 | 
						||
| 
								 | 
							
								                return response()->json(['errors'=>Helpers::error_formater('ref_code',translate('messages.referer_code_not_found'))], 405);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if(WalletTransaction::where('reference', $request->phone)->first()) {
							 | 
						||
| 
								 | 
							
								                return response()->json(['errors'=>Helpers::error_formater('phone',translate('Referrer code already used'))], 203);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // $ref_code_exchange_amt = BusinessSetting::where('key','ref_earning_exchange_rate')->first()->value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // $refer_wallet_transaction = CustomerLogic::create_wallet_transaction($referar_user->id, $ref_code_exchange_amt, 'referrer',$request->phone);
							 | 
						||
| 
								 | 
							
								            //dd($refer_wallet_transaction);
							 | 
						||
| 
								 | 
							
								            // try{
							 | 
						||
| 
								 | 
							
								            //     if(config('mail.status')) {
							 | 
						||
| 
								 | 
							
								            //         Mail::to($referar_user->email)->send(new \App\Mail\AddFundToWallet($refer_wallet_transaction));
							 | 
						||
| 
								 | 
							
								            //     }
							 | 
						||
| 
								 | 
							
								            // }catch(\Exception $ex)
							 | 
						||
| 
								 | 
							
								            // {
							 | 
						||
| 
								 | 
							
								            //     info($ex->getMessage());
							 | 
						||
| 
								 | 
							
								            // }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $ref_by= $referar_user->id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $user = User::create([
							 | 
						||
| 
								 | 
							
								            'f_name' => $request->f_name,
							 | 
						||
| 
								 | 
							
								            'l_name' => $request->l_name,
							 | 
						||
| 
								 | 
							
								            'email' => $request->email,
							 | 
						||
| 
								 | 
							
								            'phone' => $request->phone,
							 | 
						||
| 
								 | 
							
								            'ref_by' =>   $ref_by,
							 | 
						||
| 
								 | 
							
								            'password' => bcrypt($request->password),
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								        $user->ref_code = Helpers::generate_referer_code($user);
							 | 
						||
| 
								 | 
							
								        $user->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $token = $user->createToken('RestaurantCustomerAuth')->accessToken;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if($customer_verification && env('APP_MODE') !='demo')
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // $interval_time = BusinessSetting::where('key', 'otp_interval_time')->first();
							 | 
						||
| 
								 | 
							
								            // $otp_interval_time= isset($interval_time) ? $interval_time->value : 20;
							 | 
						||
| 
								 | 
							
								            $otp_interval_time= 60; //seconds
							 | 
						||
| 
								 | 
							
								            $verification_data= DB::table('phone_verifications')->where('phone', $request['phone'])->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if(isset($verification_data) &&  Carbon::parse($verification_data->updated_at)->DiffInSeconds() < $otp_interval_time){
							 | 
						||
| 
								 | 
							
								                $time= $otp_interval_time - Carbon::parse($verification_data->updated_at)->DiffInSeconds();
							 | 
						||
| 
								 | 
							
								                $errors = [];
							 | 
						||
| 
								 | 
							
								                array_push($errors, ['code' => 'otp', 'message' =>  translate('messages.please_try_again_after_').$time.' '.translate('messages.seconds')]);
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'errors' => $errors
							 | 
						||
| 
								 | 
							
								                ], 405);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $otp = rand(1000, 9999);
							 | 
						||
| 
								 | 
							
								            DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                [
							 | 
						||
| 
								 | 
							
								                'token' => $otp,
							 | 
						||
| 
								 | 
							
								                'otp_hit_count' => 0,
							 | 
						||
| 
								 | 
							
								                'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								            // Mail::to($request['email'])->send(new EmailVerification($otp));
							 | 
						||
| 
								 | 
							
								            $response = SMS_module::send($request['phone'],$otp);
							 | 
						||
| 
								 | 
							
								            if($response != 'success')
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                $errors = [];
							 | 
						||
| 
								 | 
							
								                array_push($errors, ['code' => 'otp', 'message' => translate('messages.faield_to_send_sms')]);
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'errors' => $errors
							 | 
						||
| 
								 | 
							
								                ], 405);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        try
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            Mail::to($request->email)->send(new \App\Mail\CustomerRegistration($request->f_name.' '.$request->l_name));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        catch(\Exception $ex)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            info($ex);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return response()->json(['token' => $token,'is_phone_verified' => 0, 'phone_verify_end_url'=>"api/v1/auth/verify-phone" ], 200);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function login(Request $request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $validator = Validator::make($request->all(), [
							 | 
						||
| 
								 | 
							
								            'phone' => 'required',
							 | 
						||
| 
								 | 
							
								            'password' => 'required|min:6'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($validator->fails()) {
							 | 
						||
| 
								 | 
							
								            return response()->json(['errors' => Helpers::error_processor($validator)], 403);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'phone' => $request->phone,
							 | 
						||
| 
								 | 
							
								            'password' => $request->password
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $customer_verification = BusinessSetting::where('key','customer_verification')->first()->value;
							 | 
						||
| 
								 | 
							
								        //dd($customer_verification);
							 | 
						||
| 
								 | 
							
								        if (auth()->attempt($data)) {
							 | 
						||
| 
								 | 
							
								            $token = auth()->user()->createToken('RestaurantCustomerAuth')->accessToken;
							 | 
						||
| 
								 | 
							
								            if(!auth()->user()->status)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                $errors = [];
							 | 
						||
| 
								 | 
							
								                array_push($errors, ['code' => 'auth-003', 'message' => translate('messages.your_account_is_blocked')]);
							 | 
						||
| 
								 | 
							
								                return response()->json([
							 | 
						||
| 
								 | 
							
								                    'errors' => $errors
							 | 
						||
| 
								 | 
							
								                ], 403);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if($customer_verification && !auth()->user()->is_phone_verified && env('APP_MODE') != 'demo')
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                // $interval_time = BusinessSetting::where('key', 'otp_interval_time')->first();
							 | 
						||
| 
								 | 
							
								                // $otp_interval_time= isset($interval_time) ? $interval_time->value : 60;
							 | 
						||
| 
								 | 
							
								                $otp_interval_time= 60; //seconds
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $verification_data= DB::table('phone_verifications')->where('phone', $request['phone'])->first();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if(isset($verification_data) &&  Carbon::parse($verification_data->updated_at)->DiffInSeconds() < $otp_interval_time){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    $time= $otp_interval_time - Carbon::parse($verification_data->updated_at)->DiffInSeconds();
							 | 
						||
| 
								 | 
							
								                    $errors = [];
							 | 
						||
| 
								 | 
							
								                    array_push($errors, ['code' => 'otp', 'message' =>  translate('messages.please_try_again_after_').$time.' '.translate('messages.seconds')]);
							 | 
						||
| 
								 | 
							
								                    return response()->json([
							 | 
						||
| 
								 | 
							
								                        'errors' => $errors
							 | 
						||
| 
								 | 
							
								                    ], 405);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $otp = rand(1000, 9999);
							 | 
						||
| 
								 | 
							
								                DB::table('phone_verifications')->updateOrInsert(['phone' => $request['phone']],
							 | 
						||
| 
								 | 
							
								                    [
							 | 
						||
| 
								 | 
							
								                    'token' => $otp,
							 | 
						||
| 
								 | 
							
								                    'otp_hit_count' => 0,
							 | 
						||
| 
								 | 
							
								                    'created_at' => now(),
							 | 
						||
| 
								 | 
							
								                    'updated_at' => now(),
							 | 
						||
| 
								 | 
							
								                    ]);
							 | 
						||
| 
								 | 
							
								                $response = SMS_module::send($request['phone'],$otp);
							 | 
						||
| 
								 | 
							
								                // $response = 'qq';
							 | 
						||
| 
								 | 
							
								                if($response != 'success')
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    $errors = [];
							 | 
						||
| 
								 | 
							
								                    array_push($errors, ['code' => 'otp', 'message' => translate('messages.faield_to_send_sms')]);
							 | 
						||
| 
								 | 
							
								                    return response()->json([
							 | 
						||
| 
								 | 
							
								                        'errors' => $errors
							 | 
						||
| 
								 | 
							
								                    ], 405);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $user = auth()->user();
							 | 
						||
| 
								 | 
							
								            if($user->ref_code == null && isset($user->id)){
							 | 
						||
| 
								 | 
							
								                $ref_code = Helpers::generate_referer_code($user);
							 | 
						||
| 
								 | 
							
								                DB::table('users')->where('phone', $user->phone)->update(['ref_code' => $ref_code]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return response()->json(['token' => $token, 'is_phone_verified'=>auth()->user()->is_phone_verified], 200);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $errors = [];
							 | 
						||
| 
								 | 
							
								            array_push($errors, ['code' => 'auth-001', 'message' => translate('messages.Unauthorized')]);
							 | 
						||
| 
								 | 
							
								            return response()->json([
							 | 
						||
| 
								 | 
							
								                'errors' => $errors
							 | 
						||
| 
								 | 
							
								            ], 401);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |