public function authorizeAction(Request $request)
{
if (!$request->get('client_id')) {
throw new NotFoundHttpException("Client id parameter {$request->get('client_id')} is missing.");
}
$clientManager = $this->container->get('fos_oauth_server.client_manager.default');
$client = $clientManager->findClientByPublicId($request->get('client_id'));
if (!$client instanceof Client) {
throw new NotFoundHttpException("Client {$request->get('client_id')} is not found.");
}
$user = $this->container->get('security.context')->getToken()->getUser();
$form = $this->container->get('newscoop.gimme.authorize.form');
$formHandler = $this->container->get('newscoop.gimme.authorize.form_handler');
$event = $this->container->get('event_dispatcher')->dispatch(OAuthEvent::PRE_AUTHORIZATION_PROCESS, new OAuthEvent($user, $this->getClient()));
if ($event->isAuthorizedClient()) {
$scope = $this->container->get('request')->get('scope', null);
return $this->container->get('fos_oauth_server.server')->finishClientAuthorization(true, $user, $request, $scope);
}
if (($response = $formHandler->process()) !== false) {
if (true === $this->container->get('session')->get('_fos_oauth_server.ensure_logout')) {
$this->container->get('security.context')->setToken(null);
$this->container->get('session')->invalidate();
}
$this->container->get('event_dispatcher')->dispatch(OAuthEvent::POST_AUTHORIZATION_PROCESS, new OAuthEvent($user, $this->getClient(), $formHandler->isAccepted()));
}
$templatesService = $this->container->get('newscoop.templates.service');
$smarty = $templatesService->getSmarty();
$smarty->assign('client', $client);
return new Response($templatesService->fetchTemplate('oauth_authorize.tpl'));
}