shell bypass 403

UnknownSec Shell


name : MeetingController.php
<?php

namespace Modules\Zoom\Http\Controllers;

use App\Http\Controllers\Controller;
use App\User;
use Brian2694\Toastr\Facades\Toastr;
use Exception;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
use Modules\VirtualClass\Entities\VirtualClass;
use Modules\Zoom\Entities\ZoomMeeting;
use Modules\Zoom\Entities\ZoomMeetingUser;
use Modules\Zoom\Entities\ZoomSetting;
use Zoom;

class MeetingController extends Controller
{
    public function __construct()
    {
        Artisan::call('config:clear');
    }

    /**
     * Display a listing of the resource.
     * @return Application|Factory|RedirectResponse|View
     */
    public function about()
    {
        $module = 'Zoom';

        return $module;
    }

    public function index()
    {

        $data = $this->defaultPageData();
        $data['user'] = Auth::user();
        $data['instructors'] = User::select('id', 'name')->whereIn('role_id', [1, 2])->get();
        $data['classes'] = VirtualClass::select('id', 'title')->where('host', 'Zoom')->latest()->get();
        return view('zoom::meeting.meeting', $data);
    }

    private function defaultPageData()
    {
        $user = Auth::user();
        $data['default_settings'] = ZoomSetting::firstOrCreate([
            'user_id' => $user->id
        ], [
            '$user->id' => $user->id,
        ]);


        if (Auth::user()->role_id == 1) {
            $data['meetings'] = ZoomMeeting::orderBy('id', 'DESC')->get();
        } else {
            $data['meetings'] = ZoomMeeting::orderBy('id', 'DESC')->whereHas('participates', function ($query) {
                return $query->where('user_id', Auth::user()->id);
            })
                ->where('status', 1)
                ->get();
        }
        return $data;
    }

    public function meetingStart($id)
    {

        try {
            $meeting = ZoomMeeting::where('meeting_id', $id)->first();
            if (!$meeting->currentStatus == 'started') {
                Toastr::error('Class not yet start, try later', 'Failed');
                return redirect()->back();
            }
            if (!$meeting->currentStatus == 'closed') {
                Toastr::error('Class are closed', 'Failed');
                return redirect()->back();
            }


            return redirect($meeting->url . '?pwd=' . $meeting->password);

        } catch (Exception $e) {
            GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
        }
    }

    /**
     * Store a newly created resource in storage.
     * @param Request $request
     * @return RedirectResponse
     */
    public function store(Request $request)
    {
        if (Auth::user()->role_id == 1) {
            $instructor_id = $request->get('instructor_id');
        } else {
            $instructor_id = Auth::user()->id;
        }

        $class_id = $request->get('class_id');

        $rules = [

            'class_id' => 'required',
            'topic' => 'required',
            'description' => 'nullable',
            'password' => 'required',
            'attached_file' => 'nullable|mimes:jpeg,png,jpg,doc,docx,pdf,xls,xlsx',
            'time' => 'required',
            'durration' => 'required',
            'join_before_host' => 'required',
            'host_video' => 'required',
            'participant_video' => 'required',
            'mute_upon_entry' => 'required',
            'waiting_room' => 'required',
            'audio' => 'required',
            'auto_recording' => 'nullable',
            'approval_type' => 'required',
            'is_recurring' => 'required',
            'recurring_type' => 'required_if:is_recurring,1',
            'recurring_repect_day' => 'required_if:is_recurring,1',
            'recurring_end_date' => 'required_if:is_recurring,1',
        ];
        $this->validate($request, $rules, validationMessage($rules));

        try {
            //Available time check for classs
            if ($this->isTimeAvailableForMeeting($request, $id = 0)) {
                Toastr::error('Virtual class time is not available for teacher and student!', 'Failed');
                return redirect()->back();
            }

            //Chekc the number of api request by today max limit 100 request
            if (ZoomMeeting::whereDate('created_at', Carbon::now())->count('id') >= 100) {
                Toastr::error('You can not create more than 100 meeting within 24 hour!', 'Failed');
                return redirect()->back();
            }


            $users = Zoom::user()->where('status', 'active')->setPaginate(false)->setPerPage(300)->get()->toArray();

            $profile = $users['data'][0];
            $start_date = Carbon::parse($request['date'])->format('Y-m-d') . ' ' . date("H:i:s", strtotime($request['time']));
            $meeting = Zoom::meeting()->make([
                "topic" => $request['topic'],
                "type" => $request['is_recurring'] == 1 ? 8 : 2,
                "duration" => $request['durration'],
                "timezone" => Settings('active_time_zone'),
                "password" => $request['password'],
                "start_time" => new Carbon($start_date),
            ]);

            $meeting->settings()->make([
                'join_before_host' => $this->setTrueFalseStatus($request['join_before_host']),
                'host_video' => $this->setTrueFalseStatus($request['host_video']),
                'participant_video' => $this->setTrueFalseStatus($request['participant_video']),
                'mute_upon_entry' => $this->setTrueFalseStatus($request['mute_upon_entry']),
                'waiting_room' => $this->setTrueFalseStatus($request['waiting_room']),
                'audio' => $request['audio'],
                'auto_recording' => $request->has('auto_recording') ? $request['auto_recording'] : 'none',
                'approval_type' => $request['approval_type'],
            ]);

            if ($request['is_recurring'] == 1) {
                $end_date = Carbon::parse($request['recurring_end_date'])->endOfDay();
                $meeting->recurrence()->make([
                    'type' => $request['recurring_type'],
                    'repeat_interval' => $request['recurring_repect_day'],
                    'end_date_time' => $end_date
                ]);
            }
            $meeting_details = Zoom::user()->find($profile['id'])->meetings()->save($meeting);

            DB::beginTransaction();
            $fileName = "";
            if ($request->file('attached_file') != "") {
                $file = $request->file('attached_file');
                $ignore = strtolower($file->getClientOriginalExtension());
                if ($ignore != 'php') {
                    $fileName = $request['topic'] . time() . "." . $file->getClientOriginalExtension();
                    $file->move('public/uploads/zoom-meeting/', $fileName);
                    $fileName = 'public/uploads/zoom-meeting/' . $fileName;
                }
            }
            $system_meeting = ZoomMeeting::create([
                'topic' => $request['topic'],
                'instructor_id' => $instructor_id,
                'class_id' => $class_id,
                'description' => $request['description'],
                'date_of_meeting' => $request['date'],
                'time_of_meeting' => $request['time'],
                'meeting_duration' => $request['durration'],

                'host_video' => $request['host_video'],
                'participant_video' => $request['participant_video'],
                'join_before_host' => $request['join_before_host'],
                'mute_upon_entry' => $request['mute_upon_entry'],
                'waiting_room' => $request['waiting_room'],
                'audio' => $request['audio'],
                'auto_recording' => $request->has('auto_recording') ? $request['auto_recording'] : 'none',
                'approval_type' => $request['approval_type'],

                'is_recurring' => $request['is_recurring'],
                'recurring_type' => $request['is_recurring'] == 1 ? $request['recurring_type'] : null,
                'recurring_repect_day' => $request['is_recurring'] == 1 ? $request['recurring_repect_day'] : null,
                'recurring_end_date' => $request['is_recurring'] == 1 ? $request['recurring_end_date'] : null,
                'meeting_id' => $meeting_details->id,
                'password' => $meeting_details->password,
                'start_time' => Carbon::parse($start_date)->toDateTimeString(),
                'end_time' => Carbon::parse($start_date)->addMinute($request['durration'])->toDateTimeString(),
                'attached_file' => $fileName,
                'created_by' => Auth::user()->id,
            ]);


            $user = new ZoomMeetingUser();
            $user->meeting_id = $system_meeting->id;
            $user->user_id = $instructor_id;
            $user->host = 1;
            $user->save();

            DB::commit();

            if ($system_meeting) {
                Toastr::success(trans('common.Operation successful'), trans('common.Success'));
                return redirect()->back();
            } else {
                Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
                return redirect()->back();
            }
        } catch (Exception $e) {

            GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
        }
    }


    public function classStore($data)
    {


        try {


            $users = Zoom::user()->where('status', 'active')->setPaginate(false)->setPerPage(300)->get()->toArray();

            $profile = $users['data'][0];
            $start_date = Carbon::parse($data['date'])->format('Y-m-d') . ' ' . date("H:i:s", strtotime($data['time']));
            $meeting = Zoom::meeting()->make([
                "topic" => $data['topic'],
                "type" => $data['is_recurring'] == 1 ? 8 : 2,
                "duration" => $data['duration'],
                "timezone" => Settings('active_time_zone'),
                "password" => $data['password'],
                "start_time" => new Carbon($start_date),
            ]);

            $meeting->settings()->make([
                'join_before_host' => $this->setTrueFalseStatus($data['join_before_host']),
                'host_video' => $this->setTrueFalseStatus($data['host_video']),
                'participant_video' => $this->setTrueFalseStatus($data['participant_video']),
                'mute_upon_entry' => $this->setTrueFalseStatus($data['mute_upon_entry']),
                'waiting_room' => $this->setTrueFalseStatus($data['waiting_room']),
                'audio' => $data['audio'],
                'auto_recording' => $data['auto_recording'] ? $data['auto_recording'] : 'none',
                'approval_type' => $data['approval_type'],
            ]);

            if ($data['is_recurring'] == 1) {
                $end_date = Carbon::parse($data['recurring_end_date'])->endOfDay();
                $meeting->recurrence()->make([
                    'type' => $data['recurring_type'],
                    'repeat_interval' => $data['recurring_repect_day'],
                    'end_date_time' => $end_date
                ]);
            }
            $meeting_details = Zoom::user()->find($profile['id'])->meetings()->save($meeting);
            $meeting_id = $meeting_details->id ?? null;


            $system_meeting = new ZoomMeeting();
            $system_meeting->topic = $data['topic'];
            $system_meeting->instructor_id = $data['instructor_id'];
            $system_meeting->class_id = $data['class_id'];
            $system_meeting->description = $data['description'];
            $system_meeting->date_of_meeting = $data['date'];
            $system_meeting->time_of_meeting = $data['time'];
            $system_meeting->meeting_duration = $data['duration'];
            $system_meeting->host_video = $data['host_video'];
            $system_meeting->participant_video = $data['participant_video'];
            $system_meeting->join_before_host = $data['join_before_host'];
            $system_meeting->mute_upon_entry = $data['mute_upon_entry'];
            $system_meeting->waiting_room = $data['waiting_room'];
            $system_meeting->audio = $data['audio'];
            $system_meeting->auto_recording = $data['auto_recording'];
            $system_meeting->approval_type = $data['approval_type'];
            $system_meeting->is_recurring = $data['is_recurring'];
            $system_meeting->recurring_type = $data['is_recurring'] == 1 ? $data['recurring_type'] : null;
            $system_meeting->recurring_repect_day = $data['is_recurring'] == 1 ? $data['recurring_repect_day'] : null;
            $system_meeting->recurring_end_date = $data['is_recurring'] == 1 ? $data['recurring_end_date'] : null;
            $system_meeting->meeting_id = strval($meeting_id);
            $system_meeting->password = $meeting_details->password;
            $system_meeting->start_time = Carbon::parse($start_date)->toDateTimeString();
            $system_meeting->end_time = Carbon::parse($start_date)->addMinute($data['duration'])->toDateTimeString();
            $system_meeting->attached_file = $data['attached_file'];
            $system_meeting->created_by = Auth::user()->id;
            $system_meeting->save();


            $user = new ZoomMeetingUser();
            $user->meeting_id = $system_meeting->id;
            $user->user_id = Auth::user()->id;
            $user->host = 1;
            $user->save();


            if ($system_meeting) {
                $result['message'] = '';
                $result['type'] = true;
                return $result;
            } else {
                $result['message'] = '';
                $result['type'] = false;
            }
        } catch (Exception $e) {

            $result['message'] = $e->getMessage();
            $result['type'] = false;
            return $result;
        }
    }


    private function isTimeAvailableForMeeting($request, $id)
    {

        if (isset($request['participate_ids'])) {
            $teacherList = $request['participate_ids'];
        } else {
            $teacherList = [Auth::user()->id];
        }

        if ($id != 0) {
            $meetings = ZoomMeeting::where('date_of_meeting', Carbon::parse($request['date'])->format("m/d/Y"))
                ->where('id', '!=', $id)
                ->whereHas('participates', function ($q) use ($teacherList) {
                    $q->whereIn('user_id', $teacherList);
                })
                ->get();
        } else {
            $meetings = ZoomMeeting::where('date_of_meeting', Carbon::parse($request['date'])->format("m/d/Y"))
                ->whereHas('participates', function ($q) use ($teacherList) {
                    $q->whereIn('user_id', $teacherList);
                })
                ->get();
        }
        if ($meetings->count() == 0) {
            return false;
        }
        $checkList = [];

        foreach ($meetings as $key => $meeting) {
            $new_time = Carbon::parse($request['date'] . ' ' . date("H:i:s", strtotime($request['time'])));
            if ($new_time->between(Carbon::parse($meeting->start_time), Carbon::parse($meeting->end_time))) {
                array_push($checkList, $meeting->time_of_meeting);
            }
        }
        if (count($checkList) > 0) {
            return true;
        } else {
            return false;
        }
    }

    private function setTrueFalseStatus($value)
    {
        if ($value == 1) {
            return true;
        }
        return false;
    }

    /**
     * Show the specified resource.
     * @param int $id
     * @return Application|Factory|RedirectResponse|View
     */
    public function show($id)
    {

        try {
            $localMeetingData = ZoomMeeting::where('meeting_id', $id)->first();

            $results = Zoom::meeting()->find($id);
            if ($localMeetingData) {
                if ($results) {
                    $results = $results->toArray();
                }
                return view('zoom::meeting.meetingDetails', compact('localMeetingData', 'results'));
            } else {
                Toastr::error(trans('common.Operation failed'), trans('common.Failed'));
                return redirect()->back();
            }
        } catch (Exception $e) {
            Toastr::error($e->getMessage(), trans('common.Failed'));
            return redirect()->back();
        }

    }

    /**
     * Show the form for editing the specified resource.
     * @param int $id
     * @return Application|Factory|RedirectResponse|View
     */
    public function edit($id)
    {

        try {
            $data = $this->defaultPageData();
            $data['editdata'] = ZoomMeeting::findOrFail($id);
            $data['user'] = Auth::user();
            $data['classes'] = VirtualClass::select('id', 'title')->where('host', 'Zoom')->latest()->get();
            $data['instructors'] = User::select('id', 'name')->whereIn('role_id', [1, 2])->get();
            $data['participate_ids'] = DB::table('zoom_meeting_users')->where('meeting_id', $id)->select('user_id')->pluck('user_id');

            $data['user_type'] = $data['editdata']->participates[0]['role_id'];
            $data['userList'] = User::where('role_id', $data['user_type'])
                ->whereIn('id', $data['participate_ids'])
                ->select('id', 'name', 'role_id')->get();
            if (Auth::user()->role_id != 1) {
                if (Auth::user()->id != $data['editdata']->created_by) {
                    Toastr::error('Class is created by other, you could not modify !', 'Failed');
                    return redirect()->back();
                }
            }
            return view('zoom::meeting.meeting', $data);
        } catch (Exception $e) {
            Toastr::error($e->getMessage(), trans('common.Failed'));
            return redirect()->back();
        }
    }

    /**
     * Update the specified resource in storage.
     * @param Request $request
     * @param int $id
     * @return RedirectResponse
     */
    public function update(Request $request, $id)
    {
        if (Auth::user()->role_id == 1) {
            $instructor_id = $request->get('instructor_id');
        } else {
            $instructor_id = Auth::user()->id;
        }

        $rules = [
            'class_id' => 'required',
            'topic' => 'required',
            'description' => 'nullable',
            'password' => 'required',
            'attached_file' => 'nullable|mimes:jpeg,png,jpg,doc,docx,pdf,xls,xlsx',
            'time' => 'required',
            'join_before_host' => 'required',
            'host_video' => 'required',
            'participant_video' => 'required',
            'mute_upon_entry' => 'required',
            'waiting_room' => 'required',
            'audio' => 'required',
            'auto_recording' => 'nullable',
            'approval_type' => 'required',
            'is_recurring' => 'required',
            'recurring_type' => 'required_if:is_recurring,1',
            'recurring_repect_day' => 'required_if:is_recurring,1',
            'recurring_end_date' => 'required_if:is_recurring,1',
        ];
        $this->validate($request, $rules, validationMessage($rules));

        try {
            $system_meeting = ZoomMeeting::findOrFail($id);

//            if ($this->isTimeAvailableForMeeting($request, $id = $id)) {
//                Toastr::error('Virtual class time is not available !', 'Failed');
//                return redirect()->back();
//            }

            $users = Zoom::user()->where('status', 'active')->setPaginate(false)->setPerPage(300)->get()->toArray();
            $profile = $users['data'][0];
            $start_date = Carbon::parse($request['date'])->format('Y-m-d') . ' ' . date("H:i:s", strtotime($request['time']));

            $meeting = Zoom::meeting()->find($system_meeting->meeting_id);
            if ($meeting) {
                $meeting->make([
                    "topic" => $request['topic'],
                    "type" => $request['is_recurring'] == 1 ? 8 : 2,
                    "duration" => $system_meeting->meeting_duration,
                    "timezone" => Settings('active_time_zone'),
                    "start_time" => new Carbon($start_date),
                    "password" => $request['password'],
                ]);
            } else {
                $meeting = Zoom::meeting()->make([
                    "topic" => $request['topic'],
                    "type" => $request['is_recurring'] == 1 ? 8 : 2,
                    "duration" => $system_meeting->meeting_duration,
                    "timezone" => Settings('active_time_zone'),
                    "password" => $request['password'],
                    "start_time" => new Carbon($start_date),
                ]);
            }


            $meeting->settings()->make([
                'join_before_host' => $this->setTrueFalseStatus($request['join_before_host']),
                'host_video' => $this->setTrueFalseStatus($request['host_video']),
                'participant_video' => $this->setTrueFalseStatus($request['participant_video']),
                'mute_upon_entry' => $this->setTrueFalseStatus($request['mute_upon_entry']),
                'waiting_room' => $this->setTrueFalseStatus($request['waiting_room']),
                'audio' => $request['audio'],
                'auto_recording' => $request->has('auto_recording') ? $request['auto_recording'] : 'none',
                'approval_type' => $request['approval_type'],
            ]);

            if ($request['is_recurring'] == 1) {
                $end_date = Carbon::parse($request['recurring_end_date'])->endOfDay();
                $meeting->recurrence()->make([
                    'type' => $request['recurring_type'],
                    'repeat_interval' => $request['recurring_repect_day'],
                    'end_date_time' => $end_date
                ]);
            }

            Zoom::user()->find($profile['id'])->meetings()->save($meeting);

            DB::beginTransaction();

            $system_meeting->update([
                'instructor_id' => $instructor_id,
                'class_id' => $request['class_id'],
                'topic' => $request['topic'],
                'description' => $request['description'],
                'date_of_meeting' => Carbon::parse($request['date'])->format('m/d/Y'),
                'time_of_meeting' => $request['time'],
                'password' => $request['password'],

                'host_video' => $request['host_video'],
                'participant_video' => $request['participant_video'],
                'join_before_host' => $request['join_before_host'],
                'mute_upon_entry' => $request['mute_upon_entry'],
                'waiting_room' => $request['waiting_room'],
                'audio' => $request['audio'],
                'auto_recording' => $request->has('auto_recording') ? $request['auto_recording'] : 'none',
                'approval_type' => $request['approval_type'],

                'is_recurring' => $request['is_recurring'],
                'recurring_type' => $request['is_recurring'] == 1 ? $request['recurring_type'] : null,
                'recurring_repect_day' => $request['is_recurring'] == 1 ? $request['recurring_repect_day'] : null,
                'recurring_end_date' => $request['is_recurring'] == 1 ? $request['recurring_end_date'] : null,

                'updated_by' => Auth::user()->id,
            ]);

            if ($request->file('attached_file') != "") {
                if (file_exists($system_meeting->attached_file)) {
                    unlink($system_meeting->attached_file);
                }
                $file = $request->file('attached_file');
                $ignore = strtolower($file->getClientOriginalExtension());
                if ($ignore != 'php') {
                    $fileName = $request['topic'] . time() . "." . $file->getClientOriginalExtension();
                    $file->move('public/uploads/zoom-meeting/', $fileName);
                    $fileName = 'public/uploads/zoom-meeting/' . $fileName;
                    $system_meeting->update([
                        'attached_file' => $fileName
                    ]);
                }
            }

            if (isset($request->instructor_id) && !empty($request->instructor_id)) {
                ZoomMeetingUser::where('meeting_id', $id)->delete();
                $zoomUser = new ZoomMeetingUser();
                $zoomUser->meeting_id = $id;
                $zoomUser->user_id = $request->instructor_id;
                $zoomUser->host = 1;
                $zoomUser->save();
            }


            DB::commit();
            Toastr::success('Class updated successful', 'Success');
            return redirect()->route('zoom.meetings');

        } catch (Exception $e) {
            GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
        }
    }

    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return RedirectResponse
     */
    public function destroy($id)
    {
        try {
            $localMeeting = ZoomMeeting::findOrFail($id);
            $class = VirtualClass::where('id', $localMeeting->class_id)->first();
            if (Auth::user()->role_id != 1) {
                if (Auth::user()->id != $localMeeting->created_by) {
                    Toastr::error('Class is created by other, you could not DELETE !', 'Failed');
                    return redirect()->back();
                }
            }

            $meeting = Zoom::meeting();
            $meeting->find($localMeeting->meeting_id);
            $meeting->delete(true);

            if (file_exists($localMeeting->attached_file)) {
                unlink($localMeeting->attached_file);
            }
            ZoomMeetingUser::where('meeting_id', $id)->delete();
            $localMeeting->delete();
            $class->total_class = $class->total_class - 1;
            $class->save();

            Toastr::success('Class deleted successful', 'Success');
            return redirect()->back();
        } catch (Exception $e) {
            GettingError($e->getMessage(), url()->current(), request()->ip(), request()->userAgent());
        }
    }

    public function userWiseUserList(Request $request)
    {
        if ($request->has('user_type')) {
            $userList = User::where('role_id', $request['user_type'])
                ->select('id', 'name')->get();
            return response()->json([
                'users' => $userList
            ]);
        }
    }

    private function setNotificaiton($users, $role_id, $updateStatus)
    {
        $now = Carbon::now('utc')->toDateTimeString();
        $notification_datas = [];

        if ($updateStatus == 1) {
            foreach ($users as $key => $user) {
                array_push(
                    $notification_datas,
                    [
                        'user_id' => $user,
                        'role_id' => $role_id,
                        'date' => date('Y-m-d'),
                        'message' => 'Zoom meeting is updated by ' . Auth::user()->name . '',
                        'url' => route('zoom.meetings'),
                        'created_at' => $now,
                        'updated_at' => $now
                    ]
                );
            }
        } else {
            foreach ($users as $key => $user) {
                array_push(
                    $notification_datas,
                    [
                        'user_id' => $user,
                        'role_id' => $role_id,
                        'date' => date('Y-m-d'),
                        'message' => 'Zoom meeting is created by ' . Auth::user()->name . ' with you',
                        'url' => route('zoom.meetings'),
                        'created_at' => $now,
                        'updated_at' => $now
                    ]
                );
            }
        }

    }
}

© 2025 UnknownSec
afwwrfwafr45458465
Password