403Webshell
Server IP : 34.87.99.72  /  Your IP : 216.73.217.31
Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n
System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
User : bitnami ( 1000)
PHP Version : 7.4.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /opt/bitnami/apache/htdocs/app/app/Http/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/bitnami/apache/htdocs/app/app/Http/Services/AuthService.php
<?php
namespace App\Http\Services;

use App\Models\User;
use App\Models\Locker;
use App\Models\SanctumToken;
use App\Models\UserBoxInventory;
use App\Models\EmailToken;
use App\Models\UserSocialize;
use App\Http\Services\UserCreditService;
use App\Http\Services\EmailService;
use Auth;
use Hash;
use Illuminate\Validation\ValidationException;
use Queriplex;
use Pylon\Exceptions\BadRequestException;
use Twilio\Rest\Client;
use Carbon\Carbon;

class AuthService
{
    public function __construct(
		UserCreditService $userCreditService,
		EmailService $emailService
	)
	{
		$this->userCreditService = $userCreditService;
		$this->emailService = $emailService;
	}

	public function login(Array $request)
	{
        $credentials = [
            "password" => $request['password']
        ];

        if(isset($request['email']))
        {
            $credentials["email"] = $request['email'];
        }
        else if(isset($request['login']))
        {
            if(filter_var($request['login'], FILTER_VALIDATE_EMAIL))
            {
                $credentials["email"] = $request['login'];
            }
            else
            {
                $credentials["unique_id"] = $request['login'];
            }
        }

		if (Auth::attempt($credentials)) {
            $is_mobile_platformm = in_array( SanctumToken::getPlatformId($request['platform']), SanctumToken::getMobilePlatforms());
            if($is_mobile_platformm && !in_array(Auth::user()->role_id,[ User::ROLE_CUSTOMER ]) && !isset($request['terminal_id'])){
                throw (new BadRequestException("Role Access Denied", 403))
                    ->withErrorType("ROLE_ACCESS_DENIED");
            }

            if(isset($request['terminal_id']))
            {
                $locker = Locker::where('terminal_id', $request['terminal_id'])->firstOr(function(){
                    throw ValidationException::withMessages([
                        "terminal_id" => "Terminal ID is unavailable.",
                    ]);
                });
                
                if(Auth::user()->id != $locker->owner_id && !Auth::user()->isSuperAdmin())
                {
                    throw (new BadRequestException("Locker ownership mismatched!", 403))
                        ->withErrorType("LOCKER_LOGIN_ACCESS_DENIED");
                }
            }

            $token = Auth::user()->createToken($request['device_name'], $request['platform']);

            if( isset($request['fcm_token']) ){
                Auth::user()->fcmTokens()->updateOrCreate([
                    'token' => $request['fcm_token'],
                ],[
                    'token' => $request['fcm_token'],
                ]);
            }

            return $token;
        }

        throw ValidationException::withMessages([
            'email' => ['The provided credentials are incorrect.'],
            'login' => ['The provided credentials are incorrect.']
        ]);
	}

    public function byPassLogin(Array $request)
    {
        $user = Queriplex::make(User::query())
            ->withFilters($request, [
                "id" => "id",
                "username" => "full_name",
                "email" => "email",
            ])->apply();

        $result = $user->whereNotIn('role_id',[ User::ROLE_SUPER_ADMIN, User::ROLE_AA_ADMIN ])
            ->first();
    
        if ( $result && Auth::guard()->loginUsingId($result->id)) {

            $token = Auth::user()->createToken($request['device_name']);
            return $token;
        }

        throw new BadRequestException("Failed to by pass login.");
    }

    public function register(Array $request)
    {
        if(isset($request['code']))
            $this->checkPhoneVerification($request);

        $user = new User();
        $user->full_name = $request['full_name'];
        $user->unique_id = User::computedUniqueId($request['role_id']);
        $user->email = $request['email'];
        $user->mobile_num = $request['mobile_num'];
        $user->gender = $request['gender'] ?? null;
		$user->address = $request['address'] ?? null;
		$user->city = $request['city'] ?? null;
		$user->postcode = $request['postcode'] ?? null;
		$user->state = $request['state'] ?? null;
        $user->role_id = User::ROLE_CUSTOMER;
        $user->password = Hash::make($request['password']);
        $user->phone_verified_at = now();
        $user->save();

        $this->userCreditService->userRegisterFreeCredit($user->id);

        if(isset($request['device_name'])){
            Auth::guard()->loginUsingId($user->id);
            $token = Auth::user()->createToken($request['device_name'], $request['platform']);

            if( isset($request['fcm_token']) ){
                Auth::user()->fcmTokens()->updateOrCreate([
                    'token' => $request['fcm_token'],
                ],[
                    'token' => $request['fcm_token'],
                ]);
            }

            return $token;
        }

        return true;
    }

    public function user()
    {
        $user = Auth::user();
        $user['partnerPackage'] = $user->partnerPackage;
        $user['isPartner'] = $user->isPartner();
        $user['isSuperAdmin'] = $user->isSuperAdmin();
        $user['isCustomer'] = $user->isCustomer();

        if(!$user->isSuperAdmin()){
            $user->getCreditAmount();
        }

        return [
            "version" => 1,
            "user" => $user,
        ];
    }

    public function logout()
    {
        return Auth::user()->currentAccessToken()->delete();
    }

    public function editAuthPassword(Array $request)
    {
        
        $user = Auth::user();

        // check current password
        if ($user->isContainOldPassword() && !Hash::check($request['current_password'], $user->password)){
            throw ValidationException::withMessages([
                "current_password" => "Current Password is invalid.",
            ]);
        }

        // see if old and new password are equal
        if (Hash::check($request['password'], $user->password)){
            throw ValidationException::withMessages([
                "password" => "New password cannot be the same as current password.",
            ]);
        }

        $user->password = Hash::make($request['password']);
        $user->save();

        $user->tokens()->delete();

        return true;
    }

    public function initPhoneVerification($mobile_num)
    {
        try{
            $token = config('services.twilio.twilioAuth');
            $twilio_sid = config('services.twilio.twilioSid');
            $twilio_verify_sid = config('services.twilio.twilioVerifySid');
            $twilio = new Client($twilio_sid, $token);
            $message = $twilio->verify->v2->services($twilio_verify_sid)
                ->verifications
                ->create($mobile_num, "sms");
            return $message->status;
        }
        catch(\Exception $e){
            throw $e;
        }
    }

    public function checkPhoneVerification(Array $request)
    {
        $token = config('services.twilio.twilioAuth');
        $twilio_sid = config('services.twilio.twilioSid');
        $twilio_verify_sid = config('services.twilio.twilioVerifySid');
        $twilio = new Client($twilio_sid, $token);
        try{
            $verification_check = $twilio->verify->v2->services($twilio_verify_sid)
                                    ->verificationChecks
                                    ->create([
                                        'code' => $request['code'], 
                                        'to' => $request['mobile_num']
                                        ]);
        }
        catch(\Exception $e){
            if($e->getCode() == 20404)
            {
                throw (new BadRequestException("Invalid verification code."))
                    ->withErrorType("INVALID_VERIFICATION_CODE");
            }
            else if($e->getCode() == 60202)
            {
                throw (new BadRequestException("Max check attempt reached, please try again 15 minutes later."))
                    ->withErrorType("MAX_CHECK_ATTEMPT_REACHED");
            }
        }
        
        if($verification_check->valid)
        {
            return true;
        }

        throw (new BadRequestException("Invalid verification code."))
            ->withErrorType("INVALID_VERIFICATION_CODE");
    }

    public function updateMobileNum(Array $request)
    {
        
        $user = $request['user'];

        // check if user already has phone number
        // if($user->mobile_num != NULL && $user->mobile_num != '')
		// 	throw (new BadRequestException("User already has phone number."))
		// 		->withErrorType("User already has phone number.");

        if($this->checkPhoneVerification($request))
        {
            UserBoxInventory::where("collector_num", $user->mobile_num)
            ->update(["collector_num" => $request['mobile_num']]);
            
            $user->mobile_num = $request['mobile_num'];
            $user->phone_verified_at = now();
            $user->save();
        }

        return $user;
    }

    public function updateFcmToken(Array $request)
    {
        $user = $request['user'];

        $user->fcmTokens()->updateOrCreate([
            'token' => $request['fcm_token'],
        ],[
            'token' => $request['fcm_token'],
        ]);

        return $user;
    }

    public function initEmailVerification(Array $request)
    {
        $user = $request['user'];

        $code = mt_rand(100000,999999);
        
        $expired_at = Carbon::now();

        $expired_at = $expired_at->addMinutes(5);

        $email_token = new EmailToken();
        $email_token->email = $request['email'];
        $email_token->token = $code;
        $email_token->type = EmailToken::UPDATE_EMAIL;
        $email_token->expired_at = $expired_at;
		$email_token->save();

		$this->emailService->send_email_verification($user, $request['email'], $code);

        return true;
    }

    public function checkEmailVerification(Array $request)
    {
        $email_token = EmailToken::where("expired_at", ">", Carbon::now())
        ->where("email", $request["email"])
        ->where("token", $request["code"])
        ->first();

        if($email_token)
        {
            $email_token->expired_at = Carbon::now();
            $email_token->save();

            return true;
        }

        throw (new BadRequestException("Invalid verification code."))
            ->withErrorType("INVALID_VERIFICATION_CODE");
    }

    public function updateEmail(Array $request)
    {
        
        $user = $request['user'];

        // check if user already has phone number
        // if($user->mobile_num != NULL && $user->mobile_num != '')
		// 	throw (new BadRequestException("User already has phone number."))
		// 		->withErrorType("User already has phone number.");

        if($this->checkEmailVerification($request))
        {
            $user->email = $request['email'];
            $user->save();
        }

        return $user;
    }

    public function deleteAccount(Array $request)
	{
        $user = $request['user'];

        $credentials = [
            "password" => $request['password'],
            "email" => $user->email,
        ];

        if(Hash::check($request['password'], $user->password))   
        {
    
            $user->full_name = $user->id . "_" . $user->full_name . "_deleted";
            $user->unique_id = $user->id . "_" . $user->unique_id . "_deleted";
            $user->email = $user->id . "_" . $user->email . "_deleted";
            $user->mobile_num = $user->id . "_" . $user->mobile_num . "_deleted";
            $user->ic_num = $user->id . "_" . $user->ic_num . "_deleted";
            $user->save();
    
            UserSocialize::where("user_id", $user->id)->delete();
    
            $user->tokens()->delete();
            
            $user->delete();
            return true;
        }
        
        throw ValidationException::withMessages([
            'password' => ['The provided credentials are incorrect.'],
        ]);
	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit