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/amanda/app/Http/Controllers/UserController.php
<?php

namespace App\Http\Controllers;

use Auth;
use App\User;
use Validator;
use Illuminate\Http\Request;

use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;
use Mail;

class UserController extends Controller
{
    public function index(Request $request)
    { 
        $limit = config('constants.limit');
        $search = $request->search;

        $sortBy = "id";
        if($request->sortBy!=""){
            $sortBy = $request->sortBy;
        }

        $sortDir="desc";
        if($request->sortDir!=""){

            $sortDir = $request->sortDir;
        }


        if($sortBy=="name"){
            $sortBy = 'users.name';
        }
        else if($sortBy=="email"){
            $sortBy = 'users.email';
        }
        else{
            $sortBy = 'users.id';   
        }

        $user = User::with(['orders'])
                ->whereNotIn('is_admin',[1])
                ->where(function($q) use ($search)
                {
                      $q->orWhere('users.name', 'like', '%' . $search . '%');
                      $q->orWhere('users.email', 'like', '%' . $search . '%');
                })
                 // ->orderBy('users.id','desc')
                 ->orderBy($sortBy,$sortDir)
                ->paginate($limit);
        return response()->json($user,200); 
    }

    public function userSearch(Request $request)
    {
        $limit = config('constants.limit');
        $search = $request->search;
        $user = User::with(['orders'])
                ->where(function($q) use ($search)
                {
                      $q->orWhere('users.name', 'like', '%' . $search . '%');
                      $q->orWhere('users.email', 'like', '%' . $search . '%');
                })
                 ->orderBy('users.id','desc')
                ->paginate($limit);
        return response()->json($user); 
    }

    public function login(Request $request)
    {

        $status = 401;
        $response = ['error' => 'Username or password does not match.'];
        $validator = Validator::make($request->all(), [
            'email'=>'required|email',
            'password'=>'required'
        ]);
       /* if($validator->fails()) {
          return response()->json(['error' => $validator->errors()], 401);
        }*/
        $checkStatus=User::Where(array('email'=>$request->email))->first();


        if(empty($checkStatus)){
            return response()->json(['error' => "Username or password dose not match."], 401);
        }
        else
        {
            if($checkStatus->status=="active"){
                if (Auth::attempt($request->only(['email', 'password']))) {
                    $status = 200;
                    $response = [
                        'user' => Auth::user(),
                        'token' => Auth::user()->createToken('bigStore')->accessToken,
                    ];
                }
            }
            else{
                return response()->json(['error' => "Your account has been deactived by the admin."], 401);
            }
        }


        return response()->json($response, $status);
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|max:50',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6',
            'confirm_password' => 'required|same:password',
            'gender'=> 'required|in:male,female' 
        ]);

        if ($validator->fails()) {
            return response()->json(['error' => $validator->errors()], 401);
        }

        $data = $request->only(['name', 'email', 'password','gender']);
       
        $data['password'] = bcrypt($data['password']);

        $user = User::create($data);
        $user->is_admin = 0;

        $to_name = $request->name;
        $to_email = $request->email;
        $data = array('name'=>$to_name);
        Mail::send('emails.welcome', $data, function($message) use ($to_name, $to_email) {
            $message->to($to_email, $to_name)->subject('Welcome to SweManda');
            $message->from(config('constants.admin_email'),'SWEMANDA');
        });

        return response()->json([
            'user' => $user,
            'token' => $user->createToken('bigStore')->accessToken,
        ]);
    }

    public function show(User $user)
    {
        return response()->json($user);
    }

    public function showOrders(User $user)
    {
        return response()->json($user->orders()->with(['product'])->get());
    }

    public function changeStatus(Request $request)
    {
        if(!empty($request->id)){
            $user = User::find($request->id);
            // $user->status =
            if($user->status=="active"){
                $user->status="deactive";
            } else if($user->status=="deactive"){
                $user->status="active";
            }
            $user->save();
        }
         return response()->json($user);
    }


     public function resetPasswordLink(Request $request)
    {

        $checkUser = \DB::table('users')->where(array('email'=>$request->email, 'status'=>'active'))->first();
        if(empty($checkUser)){
           return response()->json([
                'status' => false,
                'message' => "We can't find a user with that e-mail address.",
            ]);
        }
        else{
            $check = \DB::table('password_resets')->where(array('email'=>$request->email))->first();
            $token =  Str::random(60);
            if(!empty($check))
            {
                \DB::table('password_resets')
                ->where('email', $request->email)
                ->update(['token' => $token, 'created_at'=>date('Y-m-d h:i:s')]);
            }
            else{
                $values = array('email' => $request->email,'token' => $token, 'created_at'=>date('Y-m-d h:i:s'));
                \DB::table('password_resets')->insert($values);
            }

            $resetLink = url('/').'/password/reset/'.$token;

            $to_name = $checkUser->name;
            $to_email = $request->email;
            $data = array('name'=>$to_name, 'resetLink'=>$resetLink);
            Mail::send('emails.reset_password_link', $data, function($message) use ($to_name, $to_email) {
                $message->to($to_email, $to_name)->subject('Forgot Password Link');
                $message->from(config('constants.admin_email'),'SWEMANDA');
            });

            return response()->json([
                'status' => true,
                'data' => 'test',
                'message' => "Send reset password link.",
            ]);
        }
    }

    public function resetPasswordUpdate(Request $request)
    {

        $request->validate ([
            'email' => 'required|email',
            'password' => 'required|same:password|min:6',
            'confirm_password' => 'required|same:password|min:6',
        ]);

        $checkUser = \DB::table('password_resets')->where(array('email'=>$request->email))->first();
       if($checkUser->token!=$request->resettoken){
                return response()->json([
                'status' => false,
                'message' => "This password reset token is invalid.",
            ]);
        }
           
        else{
            
            $password = Hash::make($request->password);
            
            \DB::table('users')
                ->where(array('email'=>$request->email, 'status'=>'active'))
                ->update(['password' => $password, 'updated_at'=>date('Y-m-d h:i:s')]);

            return response()->json([
                'status' => true,
                'message' => "Password reset successfully",
            ]);
        }


    }
        
}