BlacklistController.class.php 3 KB
Newer Older
Zohten's avatar
Zohten committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
<?php

class BlacklistController extends Controller
{
    public function __construct($name, $request)
    {
        parent::__construct($name, $request);
    }

    /**
    * Process incoming request for the /blacklist endpoint
    *
    * @return    Response
    */
    public function processRequest()
    {
        $httpMethod=$this->request->getHttpMethod();
        $uriParams=$this->request->getUriParams();

        switch ($httpMethod) {
            case 'GET':
                // If there is a uriParams, it is the /blacklist/{ip} endpoint
                if ($uriParams) {
                    return $this->checkBlacklist($uriParams[0]);
                }
                // Else, it is the /blacklist endpoint
                return $this->getAllBlacklistedIP();
                break;
            case 'POST':
                $body=$this->request->getData();
                return $this->addBlacklist($body);
                break;
            case 'DELETE':
                if ($uriParams) {
                    return $this->deleteBlacklist($uriParams[0]);
                }
                break;
        }
        $message = json_encode(["message" => "unsupported parameters or method in blacklists"]);
        return Response::errorResponse($message);
    }

    /**
    * (GET) Get all IP in BLACKLIST table
    *
    * @return    Response
    */
    protected function getAllBlacklistedIP()
    {
        $blacklists = Blacklist::getList();
        $response = Response::okResponse(json_encode($blacklists, JSON_PRETTY_PRINT));
        return $response;
    }

    /**
    * (GET) Check if a specific IP is in BLACKLIST table
    *
    * @param    int    $id    id of the Blacklist
    * @return    Response
    */
    protected function checkBlacklist($ip)
    {
        $isblacklisted = Blacklist::isBannedIP($ip);
        $response = Response::okResponse(json_encode(['isBlacklisted'=>$isblacklisted]));
        return $response;
    }

    /**
    * (POST) Add a specific IP in BLACKLIST table
    *
    * @param    array    $array    array containing
    * @return    Response
    */
    protected function addBlacklist($array)
    {
        $ip = $array['ip'];
        // Filter if it is not valid IP
        if(filter_var($ip, FILTER_VALIDATE_IP)){
            Blacklist::addIP($ip);
            $message = json_encode(["message" => 'IP succesfully blacklisted!']);
            $response = Response::createdResponse($message);
        }else{
            $message = json_encode(["message" => 'IP is not in valid format']);
            $response = Response::errorResponse($message);
        }
        return $response;
    }

    /**
    * (DELETE) Delete a specific IP in BLACKLIST
    *
    * @param    int    $ip    ip to delete
    * @return    Response
    */
    protected function deleteBlacklist($ip)
    {
        // Delete phase
        Blacklist::removeIP($ip);

        $message = json_encode(["message" => 'Blacklist succesfully deleted!']);
        $response = Response::okResponse($message);

        return $response;
    }
}