public function authenticateAsGuest(PhraseaApplication $app, Request $request) { if (!$app->isGuestAllowed()) { $app->abort(403, $app->trans('Phraseanet guest-access is disabled')); } $context = new Context(Context::CONTEXT_GUEST); $app['dispatcher']->dispatch(PhraseaEvents::PRE_AUTHENTICATE, new PreAuthenticate($request, $context)); $user = $app['manipulator.user']->createUser(uniqid('guest'), \random::generatePassword(24)); $invite_user = $app['manipulator.user']->getRepository()->findByLogin(User::USER_GUEST); $usr_base_ids = array_keys($app['acl']->get($user)->get_granted_base()); $app['acl']->get($user)->revoke_access_from_bases($usr_base_ids); $invite_base_ids = array_keys($app['acl']->get($invite_user)->get_granted_base()); $app['acl']->get($user)->apply_model($invite_user, $invite_base_ids); $this->postAuthProcess($app, $user); $response = $this->generateAuthResponse($app, $app['browser'], $request->request->get('redirect')); $response->headers->setCookie(new Cookie('invite-usr-id', $user->getId())); $event = new PostAuthenticate($request, $response, $user, $context); $app['dispatcher']->dispatch(PhraseaEvents::POST_AUTHENTICATE, $event); return $response; }