public function run(Request $request)
 {
     $token = $this->session->get(self::TOKEN_SESSION_KEY);
     $userId = $this->session->get(self::USER_ID_SESSION_KEY);
     if (!$token instanceof AccessToken) {
         return new RedirectResponse($this->router->generate('authenticate'));
     }
     $apiClient = $this->getApiClient($token);
     $selectedUsers = [];
     $message = null;
     $errors = [];
     if ($request->isMethod('POST')) {
         $selectedUsers = $request->request->get('users');
         $message = $request->request->get('message');
         $errors = $this->validate($selectedUsers, $message);
         if (count($errors) < 1) {
             $associatedUsers = (new Rudolph())->associateUsers($selectedUsers);
             $hash = md5(serialize($associatedUsers));
             $secretSanta = new SecretSanta($hash, $associatedUsers, $userId, str_replace('```', '', $message));
             (new SecretDispatcher($apiClient))->dispatchRemainingMessages($secretSanta);
             $request->getSession()->set($this->getSecretSantaSessionKey($secretSanta->getHash()), $secretSanta);
             return new RedirectResponse($this->router->generate('finish', ['hash' => $secretSanta->getHash()]));
         }
     }
     try {
         $userExtractor = new UserExtractor($apiClient);
         $users = $userExtractor->extractAll();
         $content = $this->twig->render('run.html.twig', ['users' => $users, 'selectedUsers' => $selectedUsers, 'message' => $message, 'errors' => $errors]);
         return new Response($content);
     } catch (\RuntimeException $e) {
         return new RedirectResponse($this->router->generate('authenticate'));
     }
 }
 public function run(Request $request)
 {
     $token = $this->session->get(self::TOKEN_SESSION_KEY);
     $userId = $this->session->get(self::USER_ID_SESSION_KEY);
     if (!$token instanceof AccessToken) {
         return new RedirectResponse($this->router->generate('authenticate'));
     }
     $apiClient = new ApiClient($token->getToken());
     $selectedUsers = [];
     $message = '';
     $errors = [];
     if ($request->isMethod('POST')) {
         $selectedUsers = $request->request->get('users');
         $message = $request->request->get('message');
         $errors = $this->validate($selectedUsers, $message);
         if (count($errors) < 1) {
             $secretDispatcher = new SecretDispatcher($apiClient);
             $result = $secretDispatcher->dispatchTo($selectedUsers, $message, $userId);
             $request->getSession()->set($this->getResultSessionKey($result->getHash()), $result);
             return new RedirectResponse($this->router->generate('finish', ['hash' => $result->getHash()]));
         }
     }
     try {
         $userExtractor = new UserExtractor($apiClient);
         $users = $userExtractor->extractAll();
         $content = $this->twig->render('run.html.twig', ['users' => $users, 'selectedUsers' => $selectedUsers, 'message' => $message, 'errors' => $errors]);
         return new Response($content);
     } catch (\RuntimeException $e) {
         return new RedirectResponse($this->router->generate('authenticate'));
     }
 }