File "DemoMiddleware.php"

Full Path: /home/trinadezambia/public_html/admin_panel/app/Http/Middleware/DemoMiddleware.php
File size: 3.92 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;

class DemoMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param Request $request
     * @param Closure(Request): (Response|RedirectResponse) $next
     * @return JsonResponse
     */
    public function handle(Request $request, Closure $next)
    {
        //        echo $request->getRequestUri();
        $school_database_name = Session::get('school_database_name');
        if ($school_database_name) {
            DB::setDefaultConnection('school');
            Config::set('database.connections.school.database', $school_database_name);
            DB::purge('school');
            DB::connection('school')->reconnect();
            DB::setDefaultConnection('school');
        } else {
            DB::purge('school');
            DB::connection('mysql')->reconnect();
            DB::setDefaultConnection('mysql');
        }
        $exclude_uri = array(
            '/login',
            '/api/student/login',
            '/api/parent/login',
            '/api/teacher/login',
            '/contact',
            '/api/student/submit-online-exam-answers',
            '/students/generate-id-card',
            '/certificate',
            '/certificate/staff-certificate',
            '/staff/generate-id-card',
            '/session-year/set-session-year'
        );
        $excludeEmails = [
            "info@crestwoodacademy.com",
            "alex.johnson@elementary.org",
            "jamie.smith@gmail.com",
            "thor@gmail.com",
            "2024-2571",
            "subhamsharma5961@gmail.com"
        ];

        // Demo school mode
        $isSuperAdminLogin = Session::get('super_admin_login_with_demo_school') ?? false;
        if ((Auth::user() && Auth::user()->school && Auth::user()->school->domain == 'demo') && !$request->isMethod('get') && !in_array($request->getRequestUri(), $exclude_uri) && !$isSuperAdminLogin) {
            $message = "This is not allowed in the Demo Version.";

            // If API / AJAX request
            if ($request->expectsJson()) {
                return response()->json([
                    'error'   => true,
                    'message' => $message,
                    'code'    => 112
                ], 403);
            }

            // Normal web request → redirect back
            return redirect()->back()->with('error', $message);
        }

        if (env('DEMO_MODE') && !$request->isMethod('get') && Auth::user() && !in_array(Auth::user()->email, $excludeEmails) && !in_array($request->getRequestUri(), $exclude_uri)) {
            $excluded_ips = ['103.30.227.53', '103.30.227.54', '103.30.226.49']; // replace with the IPs you want to exclude
            $test_school_panel = ['jamie.smith@gmail.com', 'thor@gmail.com', '2024-2571', 'subhamsharma5961@gmail.com'];  // Add testing school user email
            if (!in_array($request->ip(), $excluded_ips)) {
                // return response()->json(array(
                //     'error'   => true,
                //     'message' => "This is not allowed in the Demo Version.",
                //     'code'    => 112
                // ));
                $message = "This is not allowed in the Demo Version.";

                // If API / AJAX request
                if ($request->expectsJson()) {
                    return response()->json([
                        'error'   => true,
                        'message' => $message,
                        'code'    => 112
                    ], 403);
                }

                // Normal web request → redirect back
                return redirect()->back()->with('error', $message);
            }
        }
        return $next($request);
    }
}