HEX
Server: LiteSpeed
System: Linux s787.bom1.mysecurecloudhost.com 4.18.0-477.13.1.lve.el8.x86_64 #1 SMP Thu Jun 1 16:40:47 EDT 2023 x86_64
User: mobilech (5348)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/mobilech/alliancelaptoptraining.com.np/repair/app/Http/Controllers/Admin/ThemeController.php
<?php

namespace App\Http\Controllers\Admin;

use App\CPU\Helpers;
use App\Http\Controllers\Controller;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class ThemeController extends Controller
{

    public function theme_setup(Request $request)
    {
        Helpers::setEnvironmentValue('WEB_THEME', $request['theme_id']);
        Toastr::success('Web theme updated successfully!');
        return back();
    }

    public function theme_index()
    {
        $scan = scandir(base_path('resources/themes'));
        $themes_folders = array_diff($scan, ['.', '..']);

        $themes = [];
        foreach ($themes_folders as $folder){
            $info = file_exists(base_path('resources/themes/'.$folder.'/public/addon/info.php')) ? include(base_path('resources/themes/'.$folder.'/public/addon/info.php')) : [];
            $themes[$folder] = $info;
        }

        return view('admin-views.business-settings.theme-setup', compact('themes'));
    }

    public function theme_install(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'theme_upload' => 'required|mimes:zip'
        ]);

        if ($validator->errors()->count() > 0) {
            $error = Helpers::error_processor($validator);
            return response()->json(['status' => 'error', 'message' => $error[0]['message']]);
        }

        $file = $request->file('theme_upload');
        $filename = $file->getClientOriginalName();
        $tempPath = $file->storeAs('temp', $filename);

        $zip = new \ZipArchive();
        if ($zip->open(storage_path('app/' . $tempPath)) === TRUE) {
            // Extract the contents to a directory
            $extractPath = base_path('resources/themes');
            $zip->extractTo($extractPath);
            $zip->close();
            if(File::exists($extractPath.'/'.explode('.', $filename)[0].'/public/addon/info.php')){
                File::chmod($extractPath.'/'.explode('.', $filename)[0].'/public/addon', 0777);
                Toastr::success(\App\CPU\translate('theme_upload_successfully!'));
                $status = 'success';
                $message = \App\CPU\translate('theme_upload_successfully!');
            }else{
                File::deleteDirectory($extractPath.'/'.explode('.zip', $filename)[0]);
                $status = 'error';
                $message = \App\CPU\translate('invalid_theme!');
            }
        }else{
            $status = 'error';
            $message = \App\CPU\translate('theme_upload_fail!');
        }

        Storage::delete($tempPath);

        return response()->json([
            'status' => $status,
            'message'=> $message
        ]);
    }

    public function publish(Request $request)
    {
        $theme_info = include('resources/themes/'.$request['theme'].'/public/addon/info.php');
        if ($request['theme'] != 'default' && (empty($theme_info['purchase_code']) || empty($theme_info['username']) || $theme_info['is_active'] == '0')) {
            $theme = $request['theme'];
            return response()->json([
                'flag' => 'inactive',
                'view' => view('admin-views.business-settings.partials.theme-activate-modal-data', compact('theme_info', 'theme'))->render(),
            ]);
        }

        Helpers::setEnvironmentValue('WEB_THEME', $request['theme']);
    }

    public function activation(Request $request): Redirector|RedirectResponse|Application
    {
        $remove = ["http://", "https://", "www."];
        $url = str_replace($remove, "", url('/'));
        $full_data = include('resources/themes/'.$request['theme'].'/public/addon/info.php');

        $post = [
            base64_decode('dXNlcm5hbWU=') => $request['username'],
            base64_decode('cHVyY2hhc2Vfa2V5') => $request['purchase_code'],
            base64_decode('ZG9tYWlu') => $url,
        ];

        $response = Http::post(base64_decode('aHR0cHM6Ly9jaGVjay42YW10ZWNoLmNvbS9hcGkvdjEvZG9tYWluLXJlZ2lzdGVy'), $post)->json();
        $status = base64_decode($response['active']);

        if((int)base64_decode($status)){
            $full_data['is_active'] = 1;
            $full_data['username'] = $request['username'];
            $full_data['purchase_code'] = $request['purchase_code'];
            $str = "<?php return " . var_export($full_data, true) . ";";
            file_put_contents(base_path('resources/themes/'.$request['theme'].'/public/addon/info.php'), $str);

            Toastr::success(translate('activated_successfully'));
        }else{
            Toastr::error(translate('activation failed'));
        }
        return back();
    }

    public function delete_theme(Request $request){
        $theme = $request->theme;

        if(theme_root_path() == $theme){
            return response()->json([
                'status' => 'error',
                'message'=> translate("can't_delete_the_active_theme")
            ]);
        }
        $full_path = base_path('resources/themes/'.$theme);

        if(File::deleteDirectory($full_path)){
            return response()->json([
                'status' => 'success',
                'message'=> translate('theme_delete_successfully')
            ]);
        }else{
            return response()->json([
                'status' => 'error',
                'message'=> translate('theme_delete_fail')
            ]);
        }

    }

    function getDirectories(string $path): array
    {
        $directories = [];
        $items = scandir($path);
        foreach ($items as $item) {
            if ($item == '..' || $item == '.')
                continue;
            if (is_dir($path . '/' . $item))
                $directories[] = $item;
        }
        return $directories;
    }
}