HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/alq-central.bikenow.co/app/Http/Controllers/Api/UserApiController.php
<?php

namespace App\Http\Controllers\Api;

use App\DataPolicyClient;
use App\Http\Controllers\Controller;
use App\TermClient;
use App\User;
use App\UserInformation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class UserApiController extends Controller
{
    public $__SUPERADMIN_ROL = 1;
    public $__ADMIN_ROL = 2;
    public $__MESSENGER_ROL = 3;

private $appUrl;

    public function __construct()
    {
        $this->appUrl = env('APP_URL');
    }

    public function getAppUrl()
    {
        return $this->appUrl;
    }

    // Registro normal de usuarios a traves de la app de e-commerce
    public function signup(Request $request)
    {
        $email = User::where("email", $request["accountInfo"]["email"])->get();
        if (count($email) > 0) {
            $data = array('status' => 'email_already_exists');
            return response()->json($data, 200);
        }
        return $this->createUser($request, 4);
    }

    // Es cuando se realiza registro de Mensajero o administrador a traves del admin.
    public function signupFromAdmin(Request $request)
    {
        $userCopy = User::where("email", $request["accountInfo"]["email"])->first();
        if (isset($userCopy->id)) {
            $user = new User();
            $user->setConnection($request["name_database"]);
            $userN = $user->where('email', $request["accountInfo"]["email"])->first();
            if (isset($userN->id)) {
                $data = array('status' => 'email_already_exists', 'd' => $userN);
                return response()->json($data, 200);
            } else {
                $userTerms = TermClient::where("user_id", $userCopy->id)->first();
                $userInformation = UserInformation::where("user_id", $userCopy->id)->first();
                return $this->createCopyUserHost($userCopy, $userTerms, $userInformation, $request["name_database"]);
            }
        }
        return $this->createUser($request, $request["rol"]);
    }

    // Es cuando se realiza registro de un cliente en el pedido tipo venta a traves del admin.
    public function signupFromAdminSale(Request $request)
    {
        $userCopy = User::where("document", $request["accountInfo"]["document"])->first();
        if (isset($userCopy->id)) {
            $user = new User();
            $user->setConnection($request["name_database"]);
            $userN = $user->where('document', $request["accountInfo"]["document"])->first();
            if (isset($userN->id)) {
                $data = array('status' => 'document_already_exists');
                return response()->json($data, 200);
            } else {
                $userTerms = TermClient::where("user_id", $userCopy->id)->first();
                $userInformation = UserInformation::where("user_id", $userCopy->id)->first();
                return $this->createCopyUserHost($userCopy, $userTerms, $userInformation, $request["name_database"]);
            }
        }
        return $this->createUser($request, $request["rol"]);
    }

    public function createUser($request, $rol)
    {
        $user               = new User();
        $user->first_name   = $request["accountInfo"]["name"];
        $user->last_name    = $request["accountInfo"]["lastName"];
        $user->phone        = $request["accountInfo"]["cellPhone"];
        $user->email        = $request["accountInfo"]["email"];
        $user->password     = \Hash::make($request["accountInfo"]["password"]);
        if (isset($request["accountInfo"]["document"]))
            $user->document = $request["accountInfo"]["document"];
        $user->rol_id = $rol;
        $user->save();
        $isSubscriber = null;
        if (isset($request["accountInfo"]["isSubscriber"]))
            $isSubscriber = $request["accountInfo"]["isSubscriber"];

        if ($user->id) {
            /* CONSIDERACIÓN: Los términos que se guardan en central son siempre 1 para manejo exclusivo del registro; sin embargo, 
                los nuevos términos y condiciones que el equipo vaya cargando quedan aceptados dentro de la BD de cada equipo */
            $userTerms              = new TermClient();
            $userTerms->accepted    = 1;
            $userTerms->term_id     = 1;
            $userTerms->user_id     = $user->id;
            $userTerms->save();

            $userInformation                        = new UserInformation();
            $userInformation->is_initial            = 1;
            $userInformation->is_tutorial_viewed    = 1;
            $userInformation->is_habeas_data_viewed = 1;
            $userInformation->user_id               = $user->id;

            if (in_array($rol, [$this->__MESSENGER_ROL]) && isset($request["accountInfo"])) {
                $userInformation->plate                 = $request["accountInfo"]["plate"];
                $userInformation->courier_company_id    = $request["accountInfo"]["courier_company_id"];
                $userInformation->sucursal_id           = $request["accountInfo"]["sucursal_id"];
            }

            $userInformation->save();
        }

        return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"], $isSubscriber);
    }

    public function createCopyUserHost($userCopy, $userTermsCopy, $userInformationCopy, $db_connection, $isSubscriber = null)
    {
        $user               = new User();
        $user->setConnection($db_connection);
        $user->id           = $userCopy->id;
        $user->first_name   = $userCopy->first_name;
        $user->last_name    = $userCopy->last_name;
        $user->phone        = $userCopy->phone;
        $user->email        = $userCopy->email;
        $user->password     = $userCopy->password;
        $user->document     = $userCopy->document;
        $user->rol_id       = $userCopy->rol_id;
        $user->created_at   = $userCopy->created_at;
        if (isset($isSubscriber))
            $user->is_subscriber = $isSubscriber;
        $user->save();

        $termId     = $userTermsCopy->term_id;
        $controller = new CentralApiController;
        $bodyTerm   = $controller->getTermsActive();
        if ($bodyTerm && isset($bodyTerm->term)) {
            $termId = $bodyTerm->term->id;
        }
        $userTerms              = new TermClient();
        $userTerms->setConnection($db_connection);
        $userTerms->accepted    = $userTermsCopy->accepted;
        $userTerms->term_id     = $termId;
        $userTerms->user_id     = $userCopy->id;
        $userTerms->created_at  = $userTermsCopy->created_at;
        $userTerms->updated_at  = $userTermsCopy->updated_at;
        $userTerms->save();

        $policyId   = $userTermsCopy->term_id;
        $bodyPolicy   = $controller->getActivePolicy();
        if ($bodyPolicy && isset($bodyPolicy->activePolicy)) {
            $policyId = $bodyPolicy->activePolicy->id;
        }
        $dataPolicy                 = new DataPolicyClient();
        $dataPolicy->setConnection($db_connection);
        $dataPolicy->accepted       = $userTermsCopy->accepted;
        $dataPolicy->data_policy_id = $policyId;
        $dataPolicy->user_id        = $userCopy->id;
        $dataPolicy->created_at     = $userTermsCopy->created_at;
        $dataPolicy->updated_at     = $userTermsCopy->updated_at;
        $dataPolicy->save();

        $userInformation                        = new UserInformation();
        $userInformation->setConnection($db_connection);
        $userInformation->id                    = $userInformationCopy->id;
        $userInformation->is_initial            = $userInformationCopy->is_initial;
        $userInformation->is_tutorial_viewed    = $userInformationCopy->is_tutorial_viewed;
        $userInformation->is_habeas_data_viewed = $userInformationCopy->is_habeas_data_viewed;
        $userInformation->user_id               = $userCopy->id;
        $userInformation->created_at            = $userInformationCopy->created_at;
        $userInformation->updated_at            = $userInformationCopy->updated_at;

        if (in_array(intval($userCopy->rol_id), [$this->__MESSENGER_ROL])) { // Para mensajero se necesitan estos datos adicionales.
            $userInformation->plate                 = $userInformationCopy->plate;
            $userInformation->courier_company_id    = $userInformationCopy->courier_company_id;
            $userInformation->sucursal_id           = $userInformationCopy->sucursal_id;
            $userInformation->photo                 = $userInformationCopy->photo;
        }
        $userInformation->save();
        $data = array('status' => 'success', 'user' => $user);
        return response()->json($data, 200);
    }

    public function validateLogin(Request $request)
    {
$endpoint = 'https://alq-cali.bikenow.co/api/central/validate/login';
        $apiCall = Http::withToken(
            $request->bearerToken()
        )->withOptions([
            "verify" => false,
        ])->withHeaders(
            ["origin" => $this->getAppUrl()]
        )->post(
            $endpoint,
            $request->all()
        );
        return $apiCall->body();




        $user = User::where("email", $request["email"]);
        if (isset($request["validateRole"])) {
            $user = $user->where('rol_id', $request["validateRole"])->first();
        } else {
            $user = $user->first();
        }

        if (isset($user->id)) {
            $userHost = new User();
            $userHost->setConnection($request["name_database"]);
            $userValidate = $userHost->where('email', $request["email"])->withTrashed()->first();

            if (isset($userValidate->id)) {
                if ($user->remember_token != null) {
                    $userValidate->password = $user->password;
                    $userValidate->update();
                }
                $data = array('status' => 'success');
                return response()->json($data, 200);
            } else { // el usuario no existe en la ciudad
                if ($user->rol_id == $this->__MESSENGER_ROL) {
                    if ($request['change'] == 'client') { //Cambio la conexión a otro cliente?
                        $data = array('status' => 'user_not_exists');
                        return response()->json($data, 200);
                    } else if ($request['change'] == 'city') { //Cambio la conexión a otra ciudad?
                        $userTerms = TermClient::where("user_id", $user->id)->first();
                        $userInformation = UserInformation::where("user_id", $user->id)->first();
                        return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"]);
                    }
                } else {
                    $userTerms = TermClient::where("user_id", $user->id)->first();
                    $userInformation = UserInformation::where("user_id", $user->id)->first();
                    return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"]);
                }
            }
        } else {
            $data = array('status' => 'user_not_exists');
            return response()->json($data, 200);
        }
    }

    public function deleteUser($id)
    {
        UserInformation::find($id)->forceDelete();
        User::find($id)->forceDelete();
    }

    public function deleteSystemUser(Request $request)
    {
        $user = User::find($request->id);
        if ($user) {
            TermClient::where('user_id', $user->id)->delete();
            UserInformation::where('user_id', $user->id)->delete();
            User::where('id', $user->id)->delete();
        }
    }

    public function update(Request $request)
    {
        $user = User::find($request->id);
        if ($user) {
            $user->first_name = $request["first_name"];
            $user->last_name = $request["last_name"];
            $user->phone = $request["phone"];
            $user->email = $request["email"];
            $user->document = $request["document"];
            if ($request["password"])
                $user->password = \Hash::make($request["password"]);
            if ($request["rol_id"])
                $user->rol_id = $request["rol_id"];
            $user->update();
            return $user;
        }
        return false;
    }

    public function fixPassword($init, $end)
    {
        $users = User::where('id', '>=', $init)->where('id', '<=', $end)->get();
        foreach ($users as $key => $user) {
            $user->password = \Hash::make($user->password);
            $user->update();
        }
        return response()->json(200);
    }
}