Add login and logout features for rider api #119
This commit is contained in:
parent
9d8a3fe6e4
commit
5b94b1a592
3 changed files with 68 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,4 +106,12 @@ class RiderSession
|
|||
{
|
||||
return $this->is_active;
|
||||
}
|
||||
|
||||
public function hasRider()
|
||||
{
|
||||
if ($this->rider == null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue