shell bypass 403

UnknownSec Shell


name : EloquentUserRepository.php
<?php

namespace App\Repositories\Eloquent;

use App\Exceptions\GeneralException;
use App\Helpers\Helper;
use App\Models\Customer;
use App\Models\RoleUser;
use App\Models\User;
use App\Repositories\Contracts\RoleRepository;
use App\Repositories\Contracts\UserRepository;
use Carbon\Carbon;
use Exception;
use Illuminate\Contracts\Config\Repository;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
use Throwable;


class EloquentUserRepository extends EloquentBaseRepository implements UserRepository
{
    /**
     * @var Repository
     */
    protected Repository $config;

    /**
     * @var RoleRepository
     */
    protected RoleRepository $roles;

    /**
     * EloquentUserRepository constructor.
     *
     * @param  User  $user
     * @param  RoleRepository  $roles
     * @param  Repository  $config
     */
    public function __construct(
            User $user,
            RoleRepository $roles,
            Repository $config
    ) {
        parent::__construct($user);
        $this->roles  = $roles;
        $this->config = $config;
    }

    /**
     * @param  array  $input
     * @param  bool  $confirmed
     *
     * @return User
     * @throws GeneralException
     * @throws Exception
     *
     */
    public function store(array $input, $confirmed = false): User
    {
        /** @var User $user */
        $user = $this->make(Arr::only($input, ['first_name', 'last_name', 'email', 'status', 'phone']));

        if (empty($user->locale)) {
            $user->locale = $this->config->get('app.locale');
        }

        if (empty($user->timezone)) {
            $user->timezone = $this->config->get('app.timezone');
        }

        if (isset($input['is_customer'])) {
            $user->is_customer   = true;
            $user->active_portal = 'customer';
        }

        if (isset($input['is_admin'])) {
            $user->is_admin          = true;
            $user->active_portal     = 'admin';
            $user->email_verified_at = Carbon::now();
        } else {
            $user->is_admin = false;

            if ( ! config('account.verify_account')) {
                $user->email_verified_at = Carbon::now();
            }
        }


        if ( ! $this->save($user, $input)) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        if (isset($input['is_customer'])) {
            $customer = Customer::create([
                    'user_id'       => $user->id,
                    'phone'         => $input['phone'],
                    'notifications' => json_encode([
                            'login'        => 'no',
                            'tickets'      => 'yes',
                            'sender_id'    => 'yes',
                            'keyword'      => 'yes',
                            'subscription' => 'yes',
                            'promotion'    => 'yes',
                            'profile'      => 'yes',
                    ]),
            ]);

            if ($customer) {
                $permissions     = json_decode($user->customer->permissions, true);
                $user->api_token = $user->createToken($input['email'], $permissions)->plainTextToken;
                $user->save();

                return $user;
            }
            $user->delete();
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));

        }

        //  event(new UserCreated($user));

        return $user;
    }

    /**
     * @param  User  $user
     * @param  array  $input
     *
     * @return User
     * @throws Exception|Throwable
     *
     * @throws Exception
     */
    public function update(User $user, array $input): User
    {
        if ( ! $user->can_edit) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        $user->fill(Arr::except($input, 'password'));

        if ($user->is_super_admin && ! $user->active) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        if ( ! $this->save($user, $input)) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        //  event(new UserUpdated($user));

        return $user;
    }

    /**
     * @param  User  $user
     * @param  array  $input
     *
     * @return bool
     * @throws GeneralException
     *
     */
    private function save(User $user, array $input): bool
    {
        if (isset($input['password']) && ! empty($input['password'])) {
            $user->password = Hash::make($input['password']);
        }

        if ( ! $user->save()) {
            return false;
        }

        $roles = $input['roles'] ?? [];

        if ( ! empty($roles)) {
            $allowedRoles = $this->roles->getAllowedRoles()->keyBy('id');

            foreach ($roles as $id) {
                if ( ! $allowedRoles->has($id)) {
                    throw new GeneralException(__('locale.exceptions.something_went_wrong'));
                }
            }
        }

        $user->roles()->sync($roles);

        return true;
    }

    /**
     * @param  User  $user
     *
     * @return bool
     * @throws GeneralException
     */
    public function destroy(User $user): bool
    {
        if ( ! $user->can_delete) {
            throw new GeneralException(__('locale.exceptions.unauthorized'));
        }

        if ( ! $user->delete()) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

//        event(new UserDeleted($user));

        return true;
    }

    /**
     * @param  User  $user
     *
     * @return RedirectResponse
     * @throws Exception
     *
     */
    public function impersonate(User $user): RedirectResponse
    {
        if ($user->is_super_admin) {
            throw new GeneralException(__('locale.exceptions.something_went_wrong'));
        }

        $authenticatedUser = auth()->user();

        if ($authenticatedUser->id === $user->id
                || Session::get('admin_user_id') === $user->id
        ) {
            return redirect()->route('admin.home');
        }

        if ( ! Session::get('admin_user_id')) {
            session(['admin_user_id' => $authenticatedUser->id]);
            session(['admin_user_name' => $authenticatedUser->name]);
            session(['temp_user_id' => $user->id]);
        }

        //Login user
        auth()->loginUsingId($user->id);

        return redirect(Helper::home_route());
    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchDestroy(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            // This wont call eloquent events, change to destroy if needed
            foreach ($this->query()->whereIn('uid', $ids)->cursor() as $administrator) {
                RoleUser::where('user_id', $administrator->id)->delete();
                Customer::where('user_id', $administrator->id)->delete();
                $administrator->delete();
            }
        });

        return true;
    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchEnable(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            if ($this->query()->whereIn('uid', $ids)
                    ->update(['status' => true])
            ) {
                return true;
            }

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

        return true;
    }

    /**
     * @param  array  $ids
     *
     * @return mixed
     * @throws Exception|Throwable
     *
     */
    public function batchDisable(array $ids): bool
    {
        DB::transaction(function () use ($ids) {
            if ($this->query()->whereIn('uid', $ids)
                    ->update(['status' => false])
            ) {
                return true;
            }

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

        return true;
    }

}

© 2025 UnknownSec
afwwrfwafr45458465
Password