MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/ezwork/app/Http/Controllers/AuthController.php
<?php

/**
 * AuthController class file
 *
 * PHP Version 7.2
 *
 * @category Controller
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Auth\Events\Registered;
use Hash;
use Illuminate\Support\Facades\Log;
use App\Rules\Isactive ;
use App\Rules\Emailverification ;
use DB;
use Carbon\Carbon;

//use Illuminate\Auth\Events\PasswordReset;

/**
 * AuthController class
 *
 * The class manage Authentication
 *
 * @category AuthController
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

class AuthController extends Controller
{
    use SendsPasswordResetEmails, ResetsPasswords {
        SendsPasswordResetEmails::broker insteadof ResetsPasswords;
        ResetsPasswords::credentials insteadof SendsPasswordResetEmails;
    }

    // use SendsPasswordResetEmails;
    // use ResetsPasswords;
     /**
      * Register function create a new user instance after a valid registration
      * and return json.
      *
      * @param  \Illuminate\Http\Request  request
      * @return json
      */
    public function register(Request $request)
    {
        $v = Validator::make(
            $request->all(),
            [
            'fname' => 'required',
            'lname' => 'required',
            'mobile_country_code_id' => 'required',
            'mobile_no' =>  'required|digits:10',
            'email' => 
                [
                    'required', 
                    'max:255', 
                    'email', 
                    'regex:/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix', 
                    'unique:users'
                ],
            'password'  =>
                [
                    'required',
                    'min:8',             // must be at least 6 characters in length
                    'regex:/[a-z]/',      // must contain at least one lowercase letter
                    'regex:/[A-Z]/',      // must contain at least one uppercase letter
                    'regex:/[0-9]/',      // must contain at least one digit
                    'regex:/[@$!%*#?&]/', // must contain a special character
                    'confirmed'
                ],
            ],
            [
            'fname.required' => 'Please enter first name!',
            'lname.required' => 'Please enter last name!',
            'mobile_country_code_id.required' => 'Select Code!',
            'mobile_no.required' => 'Please enter mobile no!',
            'mobile_no.digits' => 'Mobile no must be 10 digit!',
            'email.required' => 'Please enter email!',
            'email.email' => 'Please enter valid email!',
            'email.max' => 'Email length exceeds 255 characters limit!',
            'email.unique' => 'Email already registered with us!',
            'email.regex' => 'Your email is not valid!',
            'password.required' => 'Please enter password!',
            'password.min' => 'Password must be min 8 character!',
            'password.regex' => 'Password must have at least one lowercase, one uppercase, 
                one digit and a special character!',
            'password.confirmed' => 'Password and confirm password does not match!',
            ]
        );
        if ($v->fails()) {
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please enter required details!',
                'errors' => $v->errors()
                ],
                422
            );
        }

        if ($v->fails()) {
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please enter required details!',
                'errors' => $v->errors()
                ],
                422
            );
        }


        $user = User::create(
            [
            'fname' => $request->fname,
            'lname' => $request->lname,
            'name' => $request->fname . ' ' . $request->lname,
            'mobile_country_code_id' => $request->mobile_country_code_id,
            'mobile_no' => $request->mobile_no,
            'email' => $request->email,
            'password' => bcrypt($request->password)
            ]
        );

        \App\Models\Profile::create(
            ['user_id' => $user->id]
        );

        event(new Registered($user));

        return response()->json(['status' => 'success'], 200);
    }

    /**
     * Login function authenticate a user, create auth token
     * and return json.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function login(Request $request)
    {
        $v = Validator::make(
            $request->all(),
            [
            'email' => ['required','email','exists:users,email', new Emailverification() , new Isactive()],
            'password'  => 'required',
            ],
            [
            'email.required' => 'Please enter email!',
            'email.email' => 'Please enter valid email!',
            'email.exists' => 'These email do not match our records!',
            'password.required' => 'Please enter password!',
            ]
        );
        if ($v->fails()) {
            Log::channel('unauthentication_login')->error(
                'Login Failed. User : 
                ' . $request->email . ' Pass : ' . $request->password . ' IP Address : ' . $request->ip()
            );
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please enter required details!',
                'errors' => $v->errors()
                ],
                422
            );
        }
        $credentials = $request->only('email', 'password','role');
        if ($token = $this->guard()->attempt($credentials)) {
            return response()->json(['status' => 'success'], 200)->header('Authorization', $token);
        }
        return response()->json(['error' => 'login_error','loginFailed' => true], 401);
    }

     /**
      *  Logout function logout a user and return json.
      *
      * @param  \Illuminate\Http\Request  request
      * @return json
      */
    public function logout()
    {
        $this->guard()->logout();

        return response()->json(
            [
            'status' => 'success',
            'msg' => 'Logged out Successfully.'
            ],
            200
        );
    }

    /**
     * User Function find and return current authenticated user.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function user(Request $request)
    {
        $user = User::find(Auth::user()->id);
        return response()->json(
            [
            'status' => 'success',
            'data' => $user
            ]
        );
    }

    /**
     * Refresh function refreshs authentication token of user.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function refresh()
    {
        try {
            $token = $this->guard()->refresh();
        } catch (\Tymon\JWTAuth\Exceptions\InvalidClaimException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\PayloadException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\TokenBlacklistedException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Tymon\JWTAuth\Exceptions\UserNotDefinedException $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        } catch (\Exception $e) {
            return response()->json(['error' => 'refresh_token_error'], 401);
        }
        return response()->json(['status' => 'successs'], 200)->header('Authorization', $token);
        // if ($token = $this->guard()->refresh()) {
        //     return response()
        //         ->json(['status' => 'successs'], 200)
        //         ->header('Authorization', $token);
        // }
        // return response()->json(['error' => 'refresh_token_error'], 401);
    }

    /**
     * Apply guard
     *
     * @param  void
     * @return Auth
     */
    private function guard()
    {
        return Auth::guard();
    }

    


    /**
     * Get the response for a successful password reset link.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  string                   $response
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    protected function sendResetLinkResponse(Request $request, $response)
    {
        return response()->json(
            [
            'message' => 'Password reset email sent.',
            'data' => $response
            ]
        );
    }
    /**
     * Get the response for a failed password reset link.
     *
     * @param  \Illuminate\Http\Request  request
     * @param  string  response
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    protected function sendResetLinkFailedResponse(Request $request, $response): \Illuminate\Http\JsonResponse
    {
        return response()->json(['message' => 'Email could not be sent to this email address.']);
    }

    /**
     * Send password reset link.
     *
     * @param  \Illuminate\Http\Request  request
     * @return Illuminate\Foundation\Auth\ResetsPasswords
     */
    public function sendPasswordResetLink(Request $request)
    {
        return $this->sendResetLinkEmail($request);
    }

    /**
     * Handle reset password
     */
    public function callResetPassword(Request $request)
    {
        return $this->reset($request);
    }

    /**
     * Reset the given user's password.
     *
     * @param  \Illuminate\Contracts\Auth\CanResetPassword $user
     * @param  string                                      $password
     * @return void
     */
    protected function resetPassword($user, $password)
    {
        $user->password = Hash::make($password);
        $user->save();
        event(new \Illuminate\Auth\Events\PasswordReset($user));
    }

    /**
     * Get the response for a successful password reset.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  string                   $response
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    protected function sendResetResponse(Request $request, $response)
    {
        return response()->json(['message' => 'Password reset successfully.']);
    }
    /**
     * Get the response for a failed password reset.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  string                   $response
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    protected function sendResetFailedResponse(Request $request, $response)
    {
        return response()->json(['message' => 'Failed, Invalid Token.']);
    }

    /**
     * Return the countries list in json format.
     *
     * @param  null
     * @return json
     */
    public function getCountries()
    {
        $countrys = App\Models\Country::get();
        return response()->json(
            [
                'status' => 'success',
                'countrys' => $countrys->toArray()
            ],
            200
        );
    }

    /**
     * Return the token varification.
     *
     * @param  null
     * @return json
     */
    public function resetValidation(Request $request)
    {
        $expire = config('auth.passwords.users.expire');
        $token = $request->token;

        $date = date("Y-m-d H:i:s");
        $time = strtotime($date);
        $time = $time - (10 * 60);
        $date = date("Y-m-d H:i:s", $time);

        $data = DB::table('password_resets')->whereDate('created_at', '=', date('Y-m-d'))->get();
        $status = false;
        $tokenStatus = false ;
        foreach ($data as $value) {
            if (Hash::check($token, $value->token)) {
                $tokenStatus = DB::table('password_resets')->where('email', '=', $value->email)
                    ->where('created_at', '>', $date)->first();
            }
        }
    
        if ($tokenStatus) {
            $status = true;
        }
        return response()->json(
            [
                'status' => $status,
                'time' => $date,
                'Current time' => date("Y-m-d H:i:s"),
                'token' => $tokenStatus,
            ],
            200
        );
    }
}