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/BaseController.php
<?php

namespace App\Controllers;

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use App\Response\ApiResponse;
use App\Container\ServiceContainer;

abstract class BaseController
{
    /**
     * Get service from container
     */
    protected function getService(string $serviceClass)
    {
        return ServiceContainer::get($serviceClass);
    }

    /**
     * Create JSON response
     */
    protected function jsonResponse(Response $response, array $data, int $status = 200): Response
    {
        return ApiResponse::json($response, $data, $status);
    }

    /**
     * Create success response
     */
    protected function successResponse(Response $response, $data = null, string $message = 'Success', int $status = 200): Response
    {
        $responseData = $data ?? [];
        $body = json_encode(ApiResponse::success($responseData, $status));
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus($status);
    }

    /**
     * Create error response
     */
    protected function errorResponse(Response $response, string $message = 'Error', int $status = 400, array $errors = []): Response
    {
        $body = json_encode(ApiResponse::error($message, $status));
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus($status);
    }

    /**
     * Create validation error response
     */
    protected function validationErrorResponse(Response $response, array $errors, string $message = 'Validation failed'): Response
    {
        $body = json_encode([
            'status' => 422,
            'success' => false,
            'error' => $message,
            'errors' => $errors
        ]);
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus(422);
    }

    /**
     * Create not found response
     */
    protected function notFoundResponse(Response $response, string $message = 'Resource not found'): Response
    {
        $body = json_encode(ApiResponse::error($message, 404));
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus(404);
    }

    /**
     * Create unauthorized response
     */
    protected function unauthorizedResponse(Response $response, string $message = 'Unauthorized'): Response
    {
        $body = json_encode(ApiResponse::error($message, 401));
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus(401);
    }

    /**
     * Create forbidden response
     */
    protected function forbiddenResponse(Response $response, string $message = 'Forbidden'): Response
    {
        $body = json_encode(ApiResponse::error($message, 403));
        $response->getBody()->write($body);
        return $response
            ->withHeader('Content-Type', 'application/json')
            ->withStatus(403);
    }

    /**
     * Get pagination parameters from request
     */
    protected function getPaginationParams(Request $request): array
    {
        $params = $request->getQueryParams();
        
        return [
            'page' => max(1, (int) ($params['page'] ?? 1)),
            'limit' => min(100, max(1, (int) ($params['limit'] ?? 20)))
        ];
    }

    /**
     * Get filter parameters from request
     */
    protected function getFilterParams(Request $request, array $allowedFilters = []): array
    {
        $params = $request->getQueryParams();
        $filters = [];

        foreach ($allowedFilters as $filter) {
            if (isset($params[$filter])) {
                $filters[$filter] = $params[$filter];
            }
        }

        return $filters;
    }

    /**
     * Get search term from request
     */
    protected function getSearchTerm(Request $request): ?string
    {
        $params = $request->getQueryParams();
        return isset($params['search']) && !empty($params['search']) ? $params['search'] : null;
    }

    /**
     * Get user email from request attributes (set by middleware)
     */
    protected function getUserEmail(Request $request): ?string
    {
        return $request->getAttribute('user_email');
    }

    /**
     * Get user ID from request attributes (set by middleware)
     * @deprecated Use getUserEmail() instead for security
     */
    protected function getUserId(Request $request): ?int
    {
        // For backward compatibility, get user by email
        $email = $this->getUserEmail($request);
        if (!$email) {
            return null;
        }
        
        $user = \App\Models\User::where('email', $email)->first();
        return $user ? $user->id : null;
    }

    /**
     * Get user from request attributes (set by middleware)
     */
    protected function getUser(Request $request)
    {
        $user = $request->getAttribute('user');
        if ($user) {
            return $user;
        }
        
        // Fallback: get user by email from token
        $email = $this->getUserEmail($request);
        if ($email) {
            return \App\Models\User::where('email', $email)->first();
        }
        
        return null;
    }

    /**
     * Check if user has permission for a module
     */
    protected function hasPermission(Request $request, string $moduleName): bool
    {
        $user = $this->getUser($request);
        if (!$user) {
            return false;
        }

        // If user object has hasModulePermission method (Eloquent model)
        if (method_exists($user, 'hasModulePermission')) {
            return $user->hasModulePermission($moduleName);
        }

        // Fallback for legacy user objects
        return false;
    }

    /**
     * Handle exceptions and return appropriate response
     */
    protected function handleException(Response $response, \Exception $e): Response
    {
        if ($e instanceof \App\Exceptions\ValidationException) {
            return $this->validationErrorResponse($response, $e->getErrors(), $e->getMessage());
        }

        if ($e instanceof \App\Exceptions\UnauthorizedException) {
            return $this->unauthorizedResponse($response, $e->getMessage());
        }

        if ($e instanceof \App\Exceptions\ApiException) {
            return $this->errorResponse($response, $e->getMessage(), $e->getStatusCode());
        }

        // Log unexpected errors
        error_log('Unexpected error: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());

        return $this->errorResponse($response, 'Internal server error', 500);
    }

    /**
     * Transform paginated results for API response
     */
    protected function transformPaginatedResults($paginatedResults): array
    {
        return [
            'data' => $paginatedResults->items(),
            'pagination' => [
                'current_page' => $paginatedResults->currentPage(),
                'last_page' => $paginatedResults->lastPage(),
                'per_page' => $paginatedResults->perPage(),
                'total' => $paginatedResults->total(),
                'from' => $paginatedResults->firstItem(),
                'to' => $paginatedResults->lastItem(),
                'has_more_pages' => $paginatedResults->hasMorePages()
            ]
        ];
    }

    /**
     * Validate required fields in request data
     */
    protected function validateRequiredFields(array $data, array $requiredFields): array
    {
        $errors = [];
        
        foreach ($requiredFields as $field) {
            if (!isset($data[$field]) || empty($data[$field])) {
                $errors[$field] = "The {$field} field is required.";
            }
        }

        return $errors;
    }

    /**
     * Sanitize input data
     */
    protected function sanitizeInput(array $data, array $allowedFields = []): array
    {
        if (empty($allowedFields)) {
            return $data;
        }

        return array_intersect_key($data, array_flip($allowedFields));
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit