/** * @param $username * @param $password * @param array $roles * @param bool|true $enabled * @param bool|true $userNonExpired * @param bool|true $credentialsNonExpired * @param bool|true $userNonLocked */ public function __construct($username, $password, array $roles = array(), $enabled = true, $userNonExpired = true, $credentialsNonExpired = true, $userNonLocked = true) { parent::__construct(); if (empty($username)) { throw new \InvalidArgumentException('The username cannot be empty.'); } $this->accountNonExpired = $userNonExpired; $this->accountNonLocked = $userNonLocked; $this->credentialsNonExpired = $credentialsNonExpired; $this->enabled = $enabled; $this->locked = false; $this->password = $password; $this->positionInHierarchy = 0; $this->salt = null; $this->username = $username; if (count($roles) > 0) { foreach ($roles as $userRole) { if (is_string($userRole)) { $role = new Role(); $role->setRole($userRole); $role->setName($userRole); $roleCandidate = $role; } else { $roleCandidate = $userRole; } if (!$this->roles->contains($roleCandidate)) { $this->roles->add($roleCandidate); } } } }
/** * @param InputInterface $input * @param OutputInterface $output * @return int|null|void */ public function execute(InputInterface $input, OutputInterface $output) { $producerKey = $input->getOption('producer'); /** @var \OldSound\RabbitMqBundle\RabbitMq\Producer $producer */ $producer = $this->getContainer()->get(sprintf('old_sound_rabbit_mq.weaving_the_web_amqp.%s_producer', $producerKey)); if ($input->hasOption('routing_key') && !is_null($input->getOption('routing_key'))) { $routingKey = $input->getOption('routing_key'); } else { $routingKey = ''; } $tokens = $this->getTokens($input); $this->setUpLogger(); $this->setupAccessor($tokens); /** @var \WTW\UserBundle\Repository\UserRepository $userRepository */ $userRepository = $this->getContainer()->get('wtw_user.repository.user'); /** @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager = $this->getContainer()->get('doctrine.orm.entity_manager'); /** @var \Symfony\Bundle\FrameworkBundle\Translation\Translator $translator */ $translator = $this->getContainer()->get('translator'); try { $friends = $this->accessor->showUserFriends($input->getOption('screen_name')); } catch (UnavailableResourceException $exception) { $outputMessage = $translator->trans('amqp.error.unavailable_host', ['{{ host }}' => $this->accessor->getApiHost()], 'messages'); $output->writeln($outputMessage); return $exception->getCode(); } $messageBody = $tokens; $invalidUsers = 0; foreach ($friends->ids as $friend) { $result = $userRepository->findOneBy(['twitterID' => $friend]); if (count($result) === 1) { $user = $result; } else { try { $twitterUser = $this->accessor->showUser($friend); if (isset($twitterUser->protected) && $twitterUser->protected) { $protectedAccount = $translator->trans('logs.info.account_protected', ['{{ user }}' => $twitterUser->screen_name], 'logs'); throw new ProtectedAccountException($protectedAccount); } if (isset($twitterUser->screen_name)) { $user = new User(); $user->setTwitterUsername($twitterUser->screen_name); $user->setTwitterID($friend); $user->setEnabled(false); $user->setLocked(false); $user->setEmail('@' . $twitterUser->screen_name); $user->setStatus(0); $entityManager->persist($user); $entityManager->flush(); $publishedMessage = $translator->trans('amqp.info.user_persisted', ['{{ user }}' => $twitterUser->screen_name], 'messages'); $this->logger->info($publishedMessage); } else { $this->logger->info(serialize($twitterUser)); } } catch (SuspendedAccountException $exception) { $suspendedAccount = $translator->trans('amqp.output.suspended_account', ['{{ user }}' => $friend], 'messages'); $this->sendMessage($suspendedAccount, 'info', $output, $exception); $invalidUsers++; // TODO Flag suspended accounts // Skip suspended accounts continue; } catch (ProtectedAccountException $exception) { $protectedAccount = $translator->trans('amqp.output.protected_account', ['{{ user }}' => $friend], 'messages'); $this->sendMessage($protectedAccount, 'info', $output, $exception); $invalidUsers++; // TODO Flag protected accounts // Skip protected accounts continue; } catch (UnavailableResourceException $exception) { $unavailableResource = $translator->trans('amqp.output.unavailable_resource', ['{{ user }}' => $friend], 'messages'); $this->sendMessage($unavailableResource, 'error', $output, $exception); return $exception->getCode(); } } if (isset($user)) { $messageBody['screen_name'] = $user->getTwitterUsername(); $producer->setContentType('application/json'); $producer->publish(serialize(json_encode($messageBody)), $routingKey); $publishedMessage = $translator->trans('amqp.info.message_published', ['{{ user }}' => $messageBody['screen_name']], 'messages'); $this->logger->info($publishedMessage); } } $output->writeln($translator->trans('amqp.production.friendlist.success', ['{{ count }}' => count($friends->ids) - $invalidUsers], 'messages')); }
/** * @param InputInterface $input * @param OutputInterface $output * @return int|null|void */ public function execute(InputInterface $input, OutputInterface $output) { /** * @var \OldSound\RabbitMqBundle\RabbitMq\Producer $producer */ $producer = $this->getContainer()->get('old_sound_rabbit_mq.weaving_the_web_amqp.twitter.user_status_producer'); $tokens = $this->getTokens($input); $this->setUpLogger(); $this->setupAccessor($tokens); $lists = $this->accessor->getUserLists($input->getOption('screen_name')); $messageBody = $tokens; /** * @var \WTW\UserBundle\Repository\UserRepository $userRepository */ $userRepository = $this->getContainer()->get('wtw_user.repository.user'); /** * @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager = $this->getContainer()->get('doctrine.orm.entity_manager'); if ($input->hasOption('list') && !is_null($input->getOption('list'))) { $listRestriction = $input->getOption('list'); } else { $listRestriction = null; } foreach ($lists as $list) { if (is_null($listRestriction) || $list->name === $listRestriction) { $members = $this->accessor->getListMembers($list->id); foreach ($members->users as $friend) { $result = $userRepository->findOneBy(['twitterID' => $friend->id]); if (count($result) === 1) { $user = $result; } else { /** * TODO Handle errors with exception */ $twitterUser = $this->accessor->showUser($friend->screen_name); if (isset($twitterUser->screen_name)) { $message = '[publishing new message produced for "' . $twitterUser->screen_name . '"]'; $this->logger->info($message); $user = new User(); $user->setTwitterUsername($twitterUser->screen_name); $user->setTwitterID($friend->id); $user->setEnabled(false); $user->setLocked(false); $user->setEmail('@' . $twitterUser->screen_name); $user->setStatus(0); $entityManager->persist($user); $entityManager->flush(); } elseif (isset($twitterUser->errors) && is_array($twitterUser->errors) && isset($twitterUser->errors[0])) { $message = print_r($twitterUser->errors[0]->message, true); $this->logger->error($message); break; } } $messageBody['screen_name'] = $user->getTwitterUsername(); $producer->setContentType('application/json'); $producer->publish(serialize(json_encode($messageBody))); } /** * @var \Symfony\Bundle\FrameworkBundle\Translation\Translator $translator */ $translator = $this->getContainer()->get('translator'); $output->writeln($translator->trans('amqp.production.list_members.success', ['{{ count }}' => count($members->users), '{{ list }}' => $list->name])); } } }