HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Admin/AccountController.php
<?php

namespace App\Http\Controllers\Refactor\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\Language;
use App\Model\Contact;

class AccountController extends Controller
{
    /**
     * Save admin color scheme preference (AJAX, returns JSON).
     */
    public function saveColorScheme(Request $request)
    {
        $admin = $request->user()->admin;
        $allowed = ['default', 'blue', 'green', 'brown', 'pink', 'grey', 'white'];

        $scheme = $request->input('color_scheme', 'default');
        if (!in_array($scheme, $allowed)) {
            $scheme = 'default';
        }

        $admin->color_scheme = $scheme;
        $admin->save();

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

    /**
     * Get available languages for the language switcher popup.
     */
    public function languages(Request $request)
    {
        $admin = $request->user()->admin;
        $languages = Language::where('status', Language::STATUS_ACTIVE)->orderBy('name')->get();
        $currentLang = $admin->language;

        return view('refactor.pages.admin.account.languages', [
            'languages' => $languages,
            'currentLang' => $currentLang,
        ]);
    }

    /**
     * Change the admin's language (AJAX, returns JSON).
     */
    public function changeLanguage(Request $request)
    {
        $admin = $request->user()->admin;
        $language = Language::findByUid($request->uid);

        if (!$language) {
            return response()->json([
                'status' => 'error',
                'message' => trans('refactor/admin_common.error.language_not_found'),
            ], 404);
        }

        $admin->language_id = $language->id;
        $admin->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_common.flash.language_changed_to', ['name' => $language->name]),
            'code' => $language->code,
        ]);
    }

    /**
     * Admin profile page (GET/POST).
     */
    public function profile(Request $request)
    {
        $admin = $request->user()->admin;
        $user = $request->user();

        if ($request->isMethod('post')) {
            $rules = [
                'email' => 'required|email|unique:users,email,' . $user->id . ',id',
                'first_name' => 'required',
                'last_name' => 'required',
            ];

            if ($request->password) {
                $rules['password'] = 'min:5|confirmed';
            }

            $validator = \Validator::make($request->all(), $rules);

            if ($validator->fails()) {
                return back()->withErrors($validator)->withInput();
            }

            $user->fill($request->all());

            if (!empty($request->password)) {
                $user->password = bcrypt($request->password);
            }

            $user->save();

            $admin->fill($request->all());

            // Upload profile image
            if ($request->hasFile('image') && $request->file('image')->isValid()) {
                $user->uploadProfileImage($request->file('image'));
            }

            // Remove image
            if ($request->_remove_image == 'true') {
                $user->removeProfileImage();
            }

            $admin->save();

            return redirect()->route('refactor.admin.account.profile')
                ->with('alert-success', trans('refactor/admin_account.flash.profile_updated'));
        }

        return view('refactor.pages.admin.admin-account.profile', [
            'admin' => $admin,
            'user' => $user,
        ]);
    }

    /**
     * Admin contact page (GET/POST).
     */
    public function contact(Request $request)
    {
        $admin = $request->user()->admin;

        if ($admin->contact) {
            $contact = $admin->contact;
        } else {
            $contact = new Contact([
                'first_name' => $request->user()->first_name,
                'last_name' => $request->user()->last_name,
                'email' => $request->user()->email,
            ]);
        }

        if ($request->isMethod('post')) {
            $validator = \Validator::make($request->all(), Contact::$rules);

            if ($validator->fails()) {
                return back()->withErrors($validator)->withInput();
            }

            $contact->fill($request->all());

            if ($contact->save()) {
                $admin->contact_id = $contact->id;
                $admin->save();
            }

            return redirect()->route('refactor.admin.account.contact')
                ->with('alert-success', trans('refactor/admin_account.flash.contact_updated'));
        }

        return view('refactor.pages.admin.admin-account.contact', [
            'admin' => $admin,
            'contact' => $contact,
        ]);
    }

    /**
     * Admin API token page.
     */
    public function api(Request $request)
    {
        return view('refactor.pages.admin.admin-account.api');
    }

    /**
     * Renew admin API token.
     */
    public function renewToken(Request $request)
    {
        $user = $request->user();
        $user->api_token = str_random(60);
        $user->save();

        return response()->json([
            'message' => trans('refactor/admin_account.flash.token_renewed'),
            'reload' => true,
        ]);
    }

    /**
     * Admin 2FA settings page.
     */
    public function twoFactor(Request $request)
    {
        $user = $request->user();

        return view('refactor.pages.admin.admin-account.two_factor', [
            'user' => $user,
        ]);
    }

    /**
     * Enable/disable 2FA (AJAX).
     */
    public function twoFactorEnable(Request $request)
    {
        $user = $request->user();
        $user->enable_2fa = true;
        $user->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_account.flash.2fa_enabled'),
        ]);
    }

    public function twoFactorDisable(Request $request)
    {
        $user = $request->user();
        $user->enable_2fa = false;
        $user->enable_2fa_email = false;
        $user->enable_2fa_google_authenticator = false;
        $user->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_account.flash.2fa_disabled'),
        ]);
    }

    /**
     * Save 2FA methods (AJAX).
     */
    public function twoFactorSave(Request $request)
    {
        $user = $request->user();
        $user->enable_2fa = $request->enable_2fa;
        $user->enable_2fa_email = $request->enable_2fa_email;
        $user->enable_2fa_google_authenticator = $request->enable_2fa_google_authenticator;
        $user->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_account.flash.2fa_saved'),
        ]);
    }

    /**
     * Generate Google Authenticator key.
     */
    public function twoFactorGenerateKey(Request $request)
    {
        $user = $request->user();
        $google2fa = app('pragmarx.google2fa');
        $secret = $google2fa->generateSecretKey();

        $qrCodeUrl = $google2fa->getQRCodeUrl(
            config('app.name'),
            $user->email,
            $secret
        );

        return response()->json([
            'status' => 'success',
            'secret' => $secret,
            'qr_url' => $qrCodeUrl,
        ]);
    }

    /**
     * Save Google Authenticator key.
     */
    public function twoFactorSaveKey(Request $request)
    {
        $user = $request->user();
        $google2fa = app('pragmarx.google2fa');

        $valid = $google2fa->verifyKey($request->secret, $request->code);

        if (!$valid) {
            return response()->json([
                'status' => 'error',
                'message' => 'Invalid verification code.',
            ], 422);
        }

        $user->google2fa_secret = $request->secret;
        $user->enable_2fa_google_authenticator = true;
        $user->save();

        return response()->json([
            'status' => 'success',
            'message' => trans('refactor/admin_account.flash.2fa_google_saved'),
        ]);
    }
}