Add login and logout features for rider api #119

This commit is contained in:
Kendrick Chan 2018-05-23 03:03:56 +08:00
parent 9d8a3fe6e4
commit 5b94b1a592
3 changed files with 68 additions and 1 deletions

View file

@ -10,6 +10,11 @@ rapi_login:
controller: App\Controller\RAPIController::login
methods: [POST]
rapi_logout:
path: /rapi/logout
controller: App\Controller\RAPIController::logout
methods: [POST]
rapi_get_status:
path: /rapi/status
controller: App\Controller\RAPIController::getStatus

View file

@ -9,6 +9,7 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use CrEOF\Spatial\PHP\Types\Geometry\Point;
@ -32,6 +33,8 @@ use App\Entity\JobOrder;
use App\Entity\Promo;
use App\Entity\Battery;
use App\Entity\RiderRating;
use App\Entity\Rider;
use App\Entity\User;
use DateTime;
@ -191,7 +194,7 @@ class RAPIController extends Controller
return $res->getReturnResponse();
}
public function login(Request $req)
public function login(Request $req, EncoderFactoryInterface $ef)
{
$required_params = [
'user',
@ -202,6 +205,57 @@ class RAPIController extends Controller
if ($res->isError())
return $res->getReturnResponse();
// check if session has a rider already
if ($this->session->hasRider())
{
$res->setError(true)
->setErrorMessage('Another rider is already logged in. Please logout first.');
return $res->getReturnResponse();
}
// look for rider with username
$rider = $em->getRepository(Rider::class)->findOneBy(['username' => $req->request->get('user')]);
if ($rider == null)
{
$res->setError(true)
->setErrorMessage('Invalid username or password.');
return $res->getReturnResponse();
}
// check if rider password is correct
$encoder = $ef->getEncoder(new User());
if (!$encoder->isPasswordValid($rider->getPassword(), $req->request->get('pass'), ''))
{
$res->setError(true)
->setErrorMessage('Invalid username or password.');
return $res->getReturnResponse();
}
// assign rider to session
$this->session->setRider($rider);
// TODO: log rider logging in
$em->flush();
return $res->getReturnResponse();
}
public function logout(Request $req)
{
$required_params = [];
$em = $this->getDoctrine()->getManager();
$res = $this->checkParamsAndKey($req, $em, $required_params);
if ($res->isError())
return $res->getReturnResponse();
// remove rider from session
$this->session->setRider(null);
// TODO: log rider logging out
$em->flush();
return $res->getReturnResponse();
}

View file

@ -106,4 +106,12 @@ class RiderSession
{
return $this->is_active;
}
public function hasRider()
{
if ($this->rider == null)
return false;
return true;
}
}