<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
// firebase
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
// login action
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
// utils
use Symfony\Component\Console\Output\ConsoleOutput;
use AppBundle\AppInterfaces\InitializerInterface;
class DefaultController extends Controller implements InitializerInterface {
private $em;
private $active_user_name;
public function initialize(Request $request) {
// salida de datos en consola
$this->Output = new ConsoleOutput();
}
/* @Route("/{prefix}", requirements={"prefix": "quiniapp|quiniapp/"})
public function appAction(Request $request) {
return $this->render("@app/index.html");
}
*/
/**
* @Route("/", name="home")
*/ public function indexAction(Request $request) {
$device = $this->get('mobile_detect.mobile_detector');
$User = $this->getUser();
if($User) {
$userRoles = $User->getRoles();
$constants = $this->getParameter('constants');
$url = '';
// redirecció a la home del admin
if(in_array($constants['roles.admin'], $userRoles)) {
$url = $this->generateUrl('admin.home');
}
// redirección a la home del usuario
else if(in_array($constants['roles.standard_user'], $userRoles)) {
//$active_week = $this->get('quinibar.seasson')->getActive()->getActiveWeek();
/*
$template = ":webApp/pages:home.html.twig";
if($request->isXmlHttpRequest()){
$template = ":webApp/iphone:home.html.twig";
}
return $this->render($template,[
'user'=>$User,
'week'=>$active_week
]);
*/
return $this->render("@pwa/index.html");
} else if(in_array($constants['roles.establishment_owner'], $userRoles)) {
$url = $this->generateUrl('owner.home');
}
return new RedirectResponse($url);
}
// si no tenim usuari registrat enviem a la app de login
// return $this->render("@loginApp/index.html");
return $this->render(":webApp/pages:public.html.twig");
// return $this->render(':public:index.html.twig');
}
/**
* @Route("/firebase", name="firebase")
*/ public function firebase(Request $request) {
$serviceAccount = ServiceAccount::fromJsonFile($this->get('kernel')->getRootDir() . '/config/firebase-credentials.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->create();
$auth = $firebase->getAuth();
$firebase_id = $request->query->get('firebase_id');
// recuperem el usuari de firebase a partir de la id
$user = $auth->getUser('firebase-id');
/*
register a user
$userProperties = [
'email' => 'marc@topops.es',
'emailVerified' => false,
'phoneNumber' => '+34678768798',
'password' => 'andromed4',
'displayName' => 'Marc',
'photoUrl' => 'http://www.example.com/12345678/photo.png',
'disabled' => false,
];
$createdUser = $auth->createUser($userProperties);
*/
// recuperem un usuari per email un cop hem comprovat que està logejat a firebase:
$user = $this->getDoctrine()->getManager()->getRepository("AppBundle:User")->findOneBy(array('email' => $firebase_mail));
// creamos el token
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
// guardamos el token
$this->get('security.token_storage')->setToken($token);
// If the firewall name is not main, then the set value would be instead:
// $this->get('session')->set('_security_XXXFIREWALLNAMEXXX', serialize($token));
// establecemos la variable de sesión
$this->get('session')->set('_security_main', serialize($token));
// Fire the login event manually
$event = new InteractiveLoginEvent($request, $token);
// lanzamos el evento
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
return $this->render("::firebase.html.twig",[
'var'=>$auth]
);
// return $this->render(':public:index.html.twig');
}
}