shell bypass 403

UnknownSec Shell


name : TemplateTagsController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Exceptions\GeneralException;
use App\Http\Requests\TemplateTags\StoreTag;
use App\Http\Requests\TemplateTags\UpdateTag;
use App\Models\TemplateTags;
use App\Repositories\Contracts\TemplateTagsRepository;
use Box\Spout\Common\Exception\InvalidArgumentException;
use Box\Spout\Common\Exception\IOException;
use Box\Spout\Common\Exception\UnsupportedTypeException;
use Box\Spout\Writer\Exception\WriterNotOpenedException;
use Generator;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
use JetBrains\PhpStorm\NoReturn;
use Rap2hpoutre\FastExcel\FastExcel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;

class TemplateTagsController extends AdminBaseController
{

    protected TemplateTagsRepository $template_tags;

    /**
     * TemplateTagsController constructor.
     *
     * @param  TemplateTagsRepository  $template_tags
     */

    public function __construct(TemplateTagsRepository $template_tags)
    {
        $this->template_tags = $template_tags;
    }

    /**
     * @return Application|Factory|View
     * @throws AuthorizationException
     */

    public function index(): Factory|View|Application
    {

        $this->authorize('view tags');

        $breadcrumbs = [
                ['link' => url(config('app.admin_path')."/dashboard"), 'name' => __('locale.menu.Dashboard')],
                ['link' => url(config('app.admin_path')."/dashboard"), 'name' => __('locale.menu.Sending')],
                ['name' => __('locale.menu.Template Tags')],
        ];

        return view('admin.TemplateTags.index', compact('breadcrumbs'));
    }


    /**
     * @param  Request  $request
     *
     * @return void
     * @throws AuthorizationException
     */
    #[NoReturn] public function search(Request $request): void
    {

        $this->authorize('view tags');

        $columns = [
                0 => 'responsive_id',
                1 => 'uid',
                2 => 'uid',
                3 => 'name',
                4 => 'tag',
                5 => 'type',
                6 => 'required',
                7 => 'action',
        ];

        $totalData = TemplateTags::count();

        $totalFiltered = $totalData;

        $limit = $request->input('length');
        $start = $request->input('start');
        $order = $columns[$request->input('order.0.column')];
        $dir   = $request->input('order.0.dir');

        if (empty($request->input('search.value'))) {
            $template_tags = TemplateTags::offset($start)
                    ->limit($limit)
                    ->orderBy($order, $dir)
                    ->get();
        } else {
            $search = $request->input('search.value');

            $template_tags = TemplateTags::whereLike(['uid', 'name', 'tag', 'type'], $search)
                    ->offset($start)
                    ->limit($limit)
                    ->orderBy($order, $dir)
                    ->get();

            $totalFiltered = TemplateTags::whereLike(['uid', 'name', 'tag', 'type'], $search)->count();

        }

        $data = [];
        if ( ! empty($template_tags)) {
            foreach ($template_tags as $tags) {

                if ($tags->required === 1) {
                    $required = 'checked';
                } else {
                    $required = '';
                }

                $nestedData['responsive_id'] = '';
                $nestedData['uid']           = $tags->uid;
                $nestedData['name']          = $tags->name;
                $nestedData['tag']           = $tags->tag;
                $nestedData['type']          = $tags->type;
                $nestedData['required']      = "<div class='form-check form-switch form-check-primary'>
                <input type='checkbox' class='form-check-input get_required' id='required_$tags->uid' data-id='$tags->uid' name='status' $required>
                <label class='form-check-label' for='required_$tags->uid'>
                  <span class='switch-icon-left'><i data-feather='check'></i> </span>
                  <span class='switch-icon-right'><i data-feather='x'></i> </span>
                </label>
              </div>";
                $nestedData['edit']          = route('admin.tags.show', $tags->uid);
                $data[]                      = $nestedData;

            }
        }

        $json_data = [
                "draw"            => intval($request->input('draw')),
                "recordsTotal"    => intval($totalData),
                "recordsFiltered" => intval($totalFiltered),
                "data"            => $data,
        ];

        echo json_encode($json_data);
        exit();

    }


    /**
     * @return Application|Factory|View
     * @throws AuthorizationException
     */

    public function create(): Factory|View|Application
    {
        $this->authorize('create tags');

        $breadcrumbs = [
                ['link' => url(config('app.admin_path')."/dashboard"), 'name' => __('locale.menu.Dashboard')],
                ['link' => url(config('app.admin_path')."/tags"), 'name' => __('locale.menu.Template Tags')],
                ['name' => __('locale.template_tags.new_template_tag')],
        ];

        return view('admin.TemplateTags.create', compact('breadcrumbs'));
    }


    /**
     * View sender id for edit
     *
     * @param  TemplateTags  $tag
     *
     * @return Application|Factory|View
     *
     * @throws AuthorizationException
     */

    public function show(TemplateTags $tag): Factory|View|Application
    {
        $this->authorize('edit tags');

        $breadcrumbs = [
                ['link' => url(config('app.admin_path')."/dashboard"), 'name' => __('locale.menu.Dashboard')],
                ['link' => url(config('app.admin_path')."/tags"), 'name' => __('locale.menu.Template Tags')],
                ['name' => __('locale.template_tags.update_template_tag')],
        ];

        return view('admin.TemplateTags.create', compact('breadcrumbs', 'tag'));
    }


    /**
     * @param  StoreTag  $request
     *
     * @return RedirectResponse
     */

    public function store(StoreTag $request): RedirectResponse
    {

        if (config('app.stage') == 'demo') {
            return redirect()->route('admin.tags.index')->with([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }

        $input          = $request->input();
        $tag            = strtolower(str_replace([" ", '-'], '_', $input['name']));
        $available_tags = ['email', 'username', 'company', 'first_name', 'last_name', 'birth_date', 'anniversary_date', 'address'];

        if (in_array($tag, $available_tags)) {
            return redirect()->route('admin.tags.create')->with([
                    'status'  => 'error',
                    'message' => __('locale.template_tags.template_tag_available', ['template_tag' => $tag]),
            ]);
        }

        $input['tag'] = $tag;

        $this->template_tags->store($input);

        return redirect()->route('admin.tags.index')->with([
                'status'  => 'success',
                'message' => __('locale.template_tags.template_tag_successfully_added'),
        ]);

    }


    /**
     * @param  TemplateTags  $tag
     * @param  UpdateTag  $request
     *
     * @return RedirectResponse
     */

    public function update(TemplateTags $tag, UpdateTag $request): RedirectResponse
    {
        if (config('app.stage') == 'demo') {
            return redirect()->route('admin.tags.index')->with([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }

        $this->template_tags->update($tag, $request->input());

        return redirect()->route('admin.tags.index')->with([
                'status'  => 'success',
                'message' => __('locale.template_tags.template_tag_successfully_updated'),
        ]);
    }


    /**
     * change sender id status
     *
     * @param  TemplateTags  $tag
     *
     * @return JsonResponse
     *
     * @throws AuthorizationException
     * @throws GeneralException
     */
    public function activeToggle(TemplateTags $tag): JsonResponse
    {
        if (config('app.stage') == 'demo') {
            return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }

        try {
            $this->authorize('edit tags');

            if ($tag->update(['required' => ! $tag->required])) {
                return response()->json([
                        'status'  => 'success',
                        'message' => __('locale.template_tags.template_tag_successfully_change'),
                ]);
            }

            throw new GeneralException(__('locale.exceptions.something_went_wrong'));

        } catch (ModelNotFoundException $exception) {
            return response()->json([
                    'status'  => 'error',
                    'message' => $exception->getMessage(),
            ]);
        }
    }

    /**
     * @param  TemplateTags  $tag
     *
     * @return JsonResponse
     *
     * @throws AuthorizationException
     */
    public function destroy(TemplateTags $tag): JsonResponse
    {

        if (config('app.stage') == 'demo') {
            return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }

        $this->authorize('delete tags');

        $this->template_tags->destroy($tag);

        return response()->json([
                'status'  => 'success',
                'message' => __('locale.template_tags.template_tag_successfully_deleted'),
        ]);

    }

    /**
     * Bulk Action with Enable, Disable and Delete
     *
     * @param  Request  $request
     *
     * @return JsonResponse
     * @throws AuthorizationException
     */

    public function batchAction(Request $request): JsonResponse
    {

        if (config('app.stage') == 'demo') {
            return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }

        $action = $request->get('action');
        $ids    = $request->get('ids');

        switch ($action) {
            case 'destroy':
                $this->authorize('delete tags');

                $this->template_tags->batchDestroy($ids);

                return response()->json([
                        'status'  => 'success',
                        'message' => __('locale.template_tags.template_tags_deleted'),
                ]);

            case 'required':
                $this->authorize('edit tags');

                $this->template_tags->batchRequired($ids);

                return response()->json([
                        'status'  => 'success',
                        'message' => __('locale.template_tags.template_tags_required'),
                ]);

            case 'optional':

                $this->authorize('edit tags');

                $this->template_tags->batchOptional($ids);

                return response()->json([
                        'status'  => 'success',
                        'message' => __('locale.template_tags.template_tags_optional'),
                ]);
        }

        return response()->json([
                'status'  => 'error',
                'message' => __('locale.exceptions.invalid_action'),
        ]);

    }


    /**
     * @return Generator
     */
    public function templateTagsGenerator(): Generator
    {
        foreach (TemplateTags::cursor() as $tags) {
            yield $tags;
        }
    }

    /**
     * @return RedirectResponse|BinaryFileResponse
     * @throws AuthorizationException
     * @throws IOException
     * @throws InvalidArgumentException
     * @throws UnsupportedTypeException
     * @throws WriterNotOpenedException
     */
    public function export(): BinaryFileResponse|RedirectResponse
    {

        if (config('app.stage') == 'demo') {
            return redirect()->route('admin.tags.index')->with([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
            ]);
        }


        $this->authorize('view tags');

        $file_name = (new FastExcel($this->templateTagsGenerator()))->export(storage_path('TemplateTags_'.time().'.xlsx'));

        return response()->download($file_name);
    }

}

© 2025 UnknownSec
afwwrfwafr45458465
Password