diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index fc51b24f..526360a2 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -2,13 +2,12 @@ namespace App\Controller; -use App\Ramcar\BaseController; - use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; use Doctrine\DBAL\DBALException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; use App\Ramcar\APIResult; use App\Entity\MobileSession; @@ -16,8 +15,15 @@ use App\Entity\MobileSession; use DateTime; -class APIController extends BaseController +class APIController extends Controller { + protected $session; + + public function __construct() + { + $this->session = null; + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = []; @@ -44,16 +50,50 @@ class APIController extends BaseController return $missing; } + // TODO: type hint entity manager protected function checkAPIKey($em, $api_key) { // find the api key (session id) $session = $em->getRepository(MobileSession::class)->find($api_key); if ($session == null) - return false; + return null; return $session; } + protected function checkParamsAndKey(Request $req, $em, $params) + { + // returns APIResult object + $res = new APIResult(); + + // inject api_key in params + $params[] = 'api_key'; + + // check missing parameters + $missing = $this->checkMissingParameters($req, $params); + if (count($missing) > 0) + { + $miss_string = implode(', ', $missing); + $res->setError(true) + ->setErrorMessage('Missing parameter(s): ' . $miss_string); + return $res; + } + + // check api key + $sess = $this->checkAPIKey($em, $req->request->get('api_key')); + if ($sess == null) + { + $res->setError(true) + ->setErrorMessage('Invalid API Key'); + return $res; + } + + // store session + $this->session = $sess; + + return $res; + } + public function register(Request $req) { $res = new APIResult(); @@ -70,7 +110,7 @@ class APIController extends BaseController if (count($missing) > 0) { $params = implode(', ', $missing); - $res->setErrorFlag(true) + $res->setError(true) ->setErrorMessage('Missing parameter(s): ' . $params); return $this->json($res->getReturnResponse()); } @@ -126,33 +166,16 @@ class APIController extends BaseController public function confirmNumber(Request $req) { - $res = new APIResult(); - // check parameters $required_params = [ - 'api_key', 'phone_number', ]; - $missing = $this->checkMissingParameters($req, $required_params); - if (count($missing) > 0) - { - $params = implode(', ', $missing); - $res->setErrorFlag(true) - ->setErrorMessage('Missing parameter(s): ' . $params); - return $this->json($res->getReturnResponse()); - } - - - // check api key + // check required parameters and api key $em = $this->getDoctrine()->getManager(); - $sess = $this->checkAPIKey($em, $req->request->get('api_key')); - if (!$sess) - { - $res->setErrorFlag(true) - ->setErrorMessage('Invalid API Key'); + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) return $this->json($res->getReturnResponse()); - } // phone number $phone_number = $req->request->get('phone_number'); @@ -162,7 +185,7 @@ class APIController extends BaseController // TODO: generate code and save // use '123456' for now $code = '123456'; - $sess->setConfirmCode($code) + $this->session->setConfirmCode($code) ->setPhoneNumber($phone_number); $em->flush(); @@ -178,42 +201,27 @@ class APIController extends BaseController // check parameters $required_params = [ - 'api_key', 'code', ]; - $missing = $this->checkMissingParameters($req, $required_params); - if (count($missing) > 0) - { - $params = implode(', ', $missing); - $res->setErrorFlag(true) - ->setErrorMessage('Missing parameter(s): ' . $params); - return $this->json($res->getReturnResponse()); - } - - // check api key + // check required parameters and api key $em = $this->getDoctrine()->getManager(); - $sess = $this->checkAPIKey($em, $req->request->get('api_key')); - if (!$sess) - { - $res->setErrorFlag(true) - ->setErrorMessage('Invalid API Key'); + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) return $this->json($res->getReturnResponse()); - } - - $code = $req->request->get('code'); // code is wrong - if ($sess->getConfirmCode() != $code) + $code = $req->request->get('code'); + if ($this->session->getConfirmCode() != $code) { - $res->setErrorFlag(true) + $res->setError(true) ->setErrorMessage('Wrong confirm code'); return $this->json($res->getReturnResponse()); } // set confirm date $date = new DateTime(); - $sess->setDateConfirmed($date) + $this->session->setDateConfirmed($date) ->setConfirmed(); $em->flush(); diff --git a/src/Ramcar/APIResult.php b/src/Ramcar/APIResult.php index 51e1fef4..dce4cf36 100644 --- a/src/Ramcar/APIResult.php +++ b/src/Ramcar/APIResult.php @@ -15,7 +15,7 @@ class APIResult $this->data = []; } - public function setErrorFlag($flag = true) + public function setError($flag = true) { $this->err_flag = $flag; return $this;