403Webshell
Server IP : 65.108.144.40  /  Your IP : 216.73.217.165
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ubuntu-8gb-hel1-1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User : dev ( 1000)
PHP Version : 8.2.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/project-slim/app/Controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/project-slim/app/Controllers/AuthController.php
<?php

namespace App\Controllers;

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use App\Services\AuthService;
use App\Messages\MessageConstants;
use App\Messages\MessageHelper;

class AuthController extends BaseController
{
    private AuthService $authService;

    public function __construct()
    {
        $this->authService = $this->getService(AuthService::class);
    }

    /**
     * User login
     */
    public function login(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['email']) || !isset($data['password'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_EMAIL => MessageHelper::required(MessageConstants::FIELD_EMAIL),
                    MessageConstants::FIELD_PASSWORD => MessageHelper::required(MessageConstants::FIELD_PASSWORD)
                ]);
            }

            $result = $this->authService->login($data['email'], $data['password']);

            if (!$result) {
                return $this->unauthorizedResponse($response, MessageConstants::AUTH_INVALID_CREDENTIALS);
            }

            return $this->successResponse($response, $result, MessageConstants::AUTH_LOGIN_SUCCESSFUL);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * User registration
     */
    public function register(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            // Pre-validation for required fields
            $requiredFields = [
                'first_name' => MessageConstants::FIELD_FIRST_NAME,
                'last_name' => MessageConstants::FIELD_LAST_NAME,
                'email' => MessageConstants::FIELD_EMAIL,
                'company_name' => MessageConstants::FIELD_COMPANY_NAME,
                'company_domain' => MessageConstants::FIELD_COMPANY_DOMAIN,
                'password' => MessageConstants::FIELD_PASSWORD,
                'confirm_password' => MessageConstants::FIELD_CONFIRM_PASSWORD
            ];

            $validationErrors = [];

            // Check for missing fields
            foreach ($requiredFields as $field => $fieldConstant) {
                if (!isset($data[$field]) || empty(trim($data[$field]))) {
                    $validationErrors[$field] = MessageHelper::required($fieldConstant);
                }
            }

            // Additional validations if fields are present
            if (isset($data['email']) && !empty($data['email'])) {
                if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
                    $validationErrors['email'] = MessageHelper::invalid(MessageConstants::FIELD_EMAIL);
                }
            }

            if (isset($data['company_domain']) && !empty($data['company_domain'])) {
                // Basic domain validation (can be enhanced)
                if (!preg_match('/^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?(\.[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]?)*$/', $data['company_domain'])) {
                    $validationErrors['company_domain'] = MessageHelper::invalid(MessageConstants::FIELD_COMPANY_DOMAIN);
                }
            }

            // Password confirmation validation
            if (isset($data['password']) && isset($data['confirm_password'])) {
                if ($data['password'] !== $data['confirm_password']) {
                    $validationErrors['confirm_password'] = MessageHelper::mismatch('passwords');
                }
            }

            // Password strength validation (basic)
            if (isset($data['password']) && !empty($data['password'])) {
                if (strlen($data['password']) < 8) {
                    $validationErrors['password'] = 'Password must be at least 8 characters long';
                }
            }

            // Return validation errors if any
            if (!empty($validationErrors)) {
                return $this->validationErrorResponse($response, $validationErrors);
            }

            $user = $this->authService->register($data);

            return $this->successResponse($response, $user, MessageConstants::AUTH_REGISTRATION_SUCCESSFUL, 201);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * User logout
     */
    public function logout(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $this->authService->logout($userEmail);

            return $this->successResponse($response, null, MessageConstants::AUTH_LOGOUT_SUCCESSFUL);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Refresh token
     */
    public function refreshToken(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['refresh_token'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_REFRESH_TOKEN => MessageHelper::required('refresh token')
                ]);
            }

            $result = $this->authService->refreshToken($data['refresh_token']);

            if (!$result) {
                return $this->unauthorizedResponse($response, MessageHelper::invalid('refresh token'));
            }

            return $this->successResponse($response, $result, MessageConstants::AUTH_TOKEN_REFRESHED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Forgot password
     */
    public function forgotPassword(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['email'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_EMAIL => MessageHelper::required(MessageConstants::FIELD_EMAIL)
                ]);
            }

            $result = $this->authService->forgotPassword($data['email']);

            return $this->successResponse($response, null, MessageConstants::AUTH_RESET_LINK_SENT);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Reset password
     */
    public function resetPassword(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['token']) || !isset($data['password'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_TOKEN => MessageHelper::required('reset token'),
                    MessageConstants::FIELD_PASSWORD => MessageHelper::required('new password')
                ]);
            }

            $result = $this->authService->resetPassword($data['token'], $data['password']);

            if (!$result) {
                return $this->badRequestResponse($response, MessageHelper::invalid('reset token') . ' or ' . MessageHelper::expired('reset token'));
            }

            return $this->successResponse($response, null, MessageConstants::AUTH_PASSWORD_RESET_SUCCESSFUL);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Verify email
     */
    public function verifyEmail(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['token'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_TOKEN => MessageHelper::required('verification token')
                ]);
            }

            $result = $this->authService->verifyEmail($data['token']);

            if (!$result) {
                return $this->badRequestResponse($response, MessageHelper::invalid('verification token') . ' or ' . MessageHelper::expired('verification token'));
            }

            return $this->successResponse($response, null, MessageConstants::AUTH_EMAIL_VERIFIED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Resend verification email
     */
    public function resendVerification(Request $request, Response $response): Response
    {
        try {
            $data = $request->getParsedBody();
            
            if (!isset($data['email'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_EMAIL => MessageHelper::required(MessageConstants::FIELD_EMAIL)
                ]);
            }

            $result = $this->authService->resendVerification($data['email']);

            return $this->successResponse($response, null, MessageConstants::AUTH_VERIFICATION_SENT);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Get current user
     */
    public function me(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $user = $this->authService->getCurrentUserByEmail($userEmail);

            if (!$user) {
                return $this->notFoundResponse($response, MessageConstants::USER_NOT_FOUND);
            }

            return $this->successResponse($response, $user);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Change password
     */
    public function changePassword(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $data = $request->getParsedBody();
            
            if (!isset($data['current_password']) || !isset($data['new_password'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_CURRENT_PASSWORD => MessageHelper::required('current password'),
                    MessageConstants::FIELD_NEW_PASSWORD => MessageHelper::required('new password')
                ]);
            }

            $result = $this->authService->changePasswordByEmail($userEmail, $data['current_password'], $data['new_password']);

            if (!$result) {
                return $this->badRequestResponse($response, MessageHelper::incorrect('current password'));
            }

            return $this->successResponse($response, null, MessageConstants::AUTH_PASSWORD_CHANGED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Enable two-factor authentication
     */
    public function enableTwoFactor(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $data = $request->getParsedBody();
            
            if (!isset($data['password'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_PASSWORD => MessageHelper::required(MessageConstants::FIELD_PASSWORD)
                ]);
            }

            $result = $this->authService->enableTwoFactorByEmail($userEmail, $data['password']);

            if (!$result) {
                return $this->badRequestResponse($response, MessageHelper::incorrect(MessageConstants::FIELD_PASSWORD));
            }

            return $this->successResponse($response, $result, MessageConstants::AUTH_TWO_FACTOR_ENABLED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Disable two-factor authentication
     */
    public function disableTwoFactor(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $data = $request->getParsedBody();
            
            if (!isset($data['password'])) {
                return $this->validationErrorResponse($response, [
                    MessageConstants::FIELD_PASSWORD => MessageHelper::required(MessageConstants::FIELD_PASSWORD)
                ]);
            }

            $result = $this->authService->disableTwoFactorByEmail($userEmail, $data['password']);

            if (!$result) {
                return $this->badRequestResponse($response, MessageHelper::incorrect(MessageConstants::FIELD_PASSWORD));
            }

            return $this->successResponse($response, null, MessageConstants::AUTH_TWO_FACTOR_DISABLED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Check authentication status
     */
    public function check(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $user = $this->authService->getAuthenticatedUserByEmail($userEmail);
            
            return $this->successResponse($response, ['user' => $user], MessageConstants::AUTH_AUTHENTICATION_VALID);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Refresh token (matches route name)
     */
    public function refresh(Request $request, Response $response): Response
    {
        return $this->refreshToken($request, $response);
    }

    /**
     * Get user sessions
     */
    public function getSessions(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $sessions = $this->authService->getUserSessionsByEmail($userEmail);
            
            return $this->successResponse($response, $sessions, MessageConstants::AUTH_SESSIONS_RETRIEVED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Revoke all sessions
     */
    public function revokeAllSessions(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $result = $this->authService->revokeAllSessionsByEmail($userEmail);
            
            return $this->successResponse($response, null, MessageConstants::AUTH_SESSIONS_REVOKED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Revoke specific session
     */
    public function revokeSession(Request $request, Response $response, array $args): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $publicSessionId = $args['session_id'] ?? null;
            if (!$publicSessionId) {
                return $this->badRequestResponse($response, MessageHelper::required('Session ID'));
            }

            $result = $this->authService->revokeSessionByEmail($userEmail, $publicSessionId);
            
            return $this->successResponse($response, null, MessageConstants::AUTH_SESSION_REVOKED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Get user profile
     */
    public function getProfile(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $profile = $this->authService->getUserProfileByEmail($userEmail);
            
            return $this->successResponse($response, $profile, MessageConstants::AUTH_PROFILE_RETRIEVED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }

    /**
     * Update user profile
     */
    public function updateProfile(Request $request, Response $response): Response
    {
        try {
            $userEmail = $this->getUserEmail($request);
            if (!$userEmail) {
                return $this->unauthorizedResponse($response);
            }

            $data = $request->getParsedBody();
            $result = $this->authService->updateUserProfileByEmail($userEmail, $data);
            
            return $this->successResponse($response, $result, MessageConstants::AUTH_PROFILE_UPDATED);

        } catch (\Exception $e) {
            return $this->handleException($response, $e);
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit