| 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 : |
<?php
// app/Http/Controllers/WPController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use App\Models\Website;
use App\Models\Prompt;
use App\Helpers\EncryptionHelper;
use DB;
class WebsiteController extends Controller
{
public function index()
{
/* $data = session('website_json');
if(!$data){
return redirect('/dashboard');
}*/
//print_r($data);
return view('generate-site');
}
public function run(Request $request)
{
// Run the WP-CLI command
$data = session('website_json');
$website = Website::create([
"user_id" => auth()->user()->id,
"title" => $data["website_title"],
"path" => "/bloxby_wp",
"is_temp" => 1
]);
$json = escapeshellarg(json_encode($data, JSON_PRETTY_PRINT));
$process = Process::fromShellCommandline(env("SITEGENPATH")." site_bloxy_wp_".$website->id." site_bloxy_db_".$website->id." '".$json."'"); // change to your command
$process->setTimeout(300); // Increase for long tasks
$process->run();
if (!$process->isSuccessful()) {
session()->forget('website_json');
return response()->json(['status' => 'error', 'message' => $process->getErrorOutput()], 500);
} else {
session()->forget('website_json');
$website->path = "site_bloxy_wp_".$website->id;
$website->dbname = "site_bloxy_db_".$website->id;
$website->meta = json_encode($data);
$website->is_temp = 0;
$website->save();
}
return response()->json(['status' => 'success', 'output' => $process->getOutput()]);
}
public function remove(Request $request, $id){
$website = Website::where("id",$id)->first();
if($website){
$user_id = $website->user->id;
if($website->domain!=null){
return redirect()->back()->withError( "Please remove the domain attached before removing the website.");
}
if($website->plan){
return redirect()->back()->withError( "You are not authorized to remove the 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 response()->json(['status' => 'error', 'message' => $process->getErrorOutput()], 500);
} else {
@unlink(env("FRONT_PUBLIC_PATH")."websites/thumbs/".$website->thumbnail);
Prompt::where("website_id", $website->id)->delete();
$website->delete();
return redirect()->route('users.websites.list',["id"=>$user_id])->with(['status' => 'success', 'output' => $process->getOutput()]);
}
}
return redirect()->route('users.websites.list',["id"=>$user_id]);
}
public function listUserWebsites(Request $request, $id){
$title = "User websites";
$websites = Website::where("user_id", $id)->orderby("id","desc")->get();
/*foreach($websites as $key => $website){
$server_meta = json_decode($website->server_meta, true);
$websites[$key]->size =null;
if(is_array($server_meta)){
$userDir = "/var/www/".$server_meta["folder"]."/".$server_meta["slug_environment"]."_".$server_meta["site"];
$size = trim(shell_exec("du -sb " . escapeshellarg($userDir) . " | cut -f1"));
$mb = $size / (1024 * 1024);
$websites[$key]->size =$mb;
}
}*/
$prompts = Prompt::query();
//->where("website_id",null)
$prompts_count = $prompts->where("user_id",$id)->count();
return view('websites.user_websites', compact('title','id','websites','prompts_count'));
}
public function toggleSite(Request $request, $id){
$website = Website::where("id", $id)->first();
if($website){
if($website->is_website_down==1){
$server_meta = json_decode($website->server_meta, true);
$process = new Process([
'sudo',
'/var/bloxbycommands/toggle_site.sh',
"up",
$server_meta["sftp_user"],
"/var/www/".$server_meta["folder"]."/".$server_meta["sftp_user"]
]);
$process->setTimeout(300); // Increase for long tasks
$process->run();
if (!$process->isSuccessful()) {
return redirect()->back()->with([ 'errors' =>[ $process->getErrorOutput()]]);
}
$website->is_website_down=0;
$website->save();
} else {
$server_meta = json_decode($website->server_meta, true);
$process = new Process([
'sudo',
'/var/bloxbycommands/toggle_site.sh',
"down",
$server_meta["sftp_user"],
"/var/www/".$server_meta["folder"]."/".$server_meta["sftp_user"]
]);
$process->setTimeout(300); // Increase for long tasks
$process->run();
if (!$process->isSuccessful()) {
return redirect()->back()->with([ 'errors' => [$process->getErrorOutput()]]);
}
$website->is_website_down=1;
$website->save();
}
}
return redirect()->back()->with(["success","The website has been toggled successfully."]);
}
public function addDomain(Request $request, $id){
$website = Website::where("domain", $request->domain)->first();
if($website){
return redirect()->back()->with('error', "The domain is already attached to another website");
}
$website = Website::where("id", $id)->first();
$website->domain = $request->domain;
$website->domain_status = "pending";
$website->save();
return redirect()->back()->with(["success"=>"The domain has been added successfully."]);
}
public function attachDomain(Request $request, $id){
$website = Website::where("id", $id)->first();
if($website){
$ip = gethostbyname($request->domain);
if ($ip && $ip === env("SERVER_IP")) {
$server_meta = json_decode($website->server_meta, true);
$process = new Process([
'sudo',
'/var/bloxbycommands/attach_domain.sh',
$server_meta["domain"].".bloxby.io",
$request->domain,
"/var/www/".$server_meta["folder"]."/".$server_meta["sftp_user"]."/public_html"
]);
$process->setTimeout(300); // Increase for long tasks
$process->run();
$output = trim($process->getOutput()); // single-line message from script
$exitCode = $process->getExitCode();
// Determine message type
if ($exitCode === 0) {
$website->domain = $request->domain;
$website->save();
return redirect()->back()->with('success', $output);
} else {
// Optionally include stderr if needed
$errorOutput = trim($process->getErrorOutput());
$message = $output ?: $errorOutput ?: 'Unknown error';
return redirect()->back()->with('error', $message);
}
} else {
return redirect()->back()->with('error', "Your domain is either not pointed or still in transition.");
}
}
return redirect()->back()->with(["success"=>"Your domain has been pointed successfully."]);
}
public function removeDomain(Request $request, $id){
$website = Website::where("id", $id)->first();
if($website){
$server_meta = json_decode($website->server_meta, true);
$process = new Process([
'sudo',
'/var/bloxbycommands/remove_domain.sh',
$website->domain,
$server_meta["domain"].".bloxby.io",
"/var/www/".$server_meta["folder"]."/".$server_meta["sftp_user"]."/public_html"
]);
$process->setTimeout(300); // Increase for long tasks
$process->run();
if (!$process->isSuccessful()) {
return redirect()->back()->with([ 'errors' =>[ $process->getErrorOutput()]]);
}
$website->domain= null;
$website->domain_status= 'pending';
$website->domain_error= null;
$website->save();
}
return redirect()->back()->with(["success"=>"Your domain has been removed successfully."]);
}
public function deleteDomain(Request $request, $id){
try{
DB::BeginTransaction();
$website = Website::where("id", $id)->first();
if($website){
if($website->domain_status=="pending"){
$website->domain= null;
$website->domain_status= 'pending';
$website->domain_error= null;
$website->save();
}
DB::Commit();
}
} catch(\Exception $e){
DB::Rollback();
return redirect()->back()->with([ 'errors' =>[ $e->getMessage()]]);
}
return redirect()->back()->with(["success"=>"The domain has been deleted sucessfully."]);
}
public function websiteDetails(Request $request, $id){
$website = Website::where("id", $id)->first();
$server_meta = json_decode($website->server_meta, true);
$sftp_ip = env("SERVER_IP");
$sftp_user = null;
$sftp_pass = null;
if($website){
$sftp_user = $server_meta["sftp_user"];
$sftp_pass = EncryptionHelper::secret_decrypt($server_meta["sftp_pass"],env("SODIUM_KEY"));
}
$dns_status = false;
if($website->domain){
$ip = gethostbyname($website->domain);
if ($ip && $ip === env("SERVER_IP")){
$dns_status = true;
}
}
return view("websites.overview")->with(compact(['website','server_meta','sftp_ip','sftp_user','sftp_pass','dns_status','id']));
}
}