/** * @see \Symfony\Component\Console\Command\Command::execute() */ protected function execute(InputInterface $input, OutputInterface $output) { $username = $input->getArgument('username'); $password = $input->getArgument('password'); $email = $input->getArgument('email'); $displayname = $input->getArgument('displayname'); $role = $input->getArgument('role'); $data = ['username' => $username, 'password' => $password, 'email' => $email, 'displayname' => $displayname, 'roles' => [$role]]; $user = new Entity\Users($data); $valid = true; if (!$this->app['users']->checkAvailability('username', $user->getUsername())) { $valid = false; $output->writeln("<error>Error creating user: username {$user->getUsername()} already exists</error>"); } if (!$this->app['users']->checkAvailability('email', $user->getEmail())) { $valid = false; $output->writeln("<error>Error creating user: email {$user->getEmail()} exists</error>"); } if (!$this->app['users']->checkAvailability('displayname', $user->getDisplayname())) { $valid = false; $output->writeln("<error>Error creating user: display name {$user->getDisplayname()} already exists</error>"); } if ($valid) { $res = $this->app['users']->saveUser($user); if ($res) { $this->auditLog(__CLASS__, "User created: {$user['username']}"); $output->writeln("<info>Successfully created user: {$user['username']}</info>"); } else { $output->writeln("<error>Error creating user: {$user['username']}</error>"); } } }
/** * Send the password reset link notification to the user. * * @param Entity\Users $userEntity * @param string $shadowpassword * @param string $shadowtoken */ private function resetPasswordNotification(Entity\Users $userEntity, $shadowpassword, $shadowtoken) { $shadowlink = sprintf('%s%sresetpassword?token=%s', $this->app['resources']->getUrl('hosturl'), $this->app['resources']->getUrl('bolt'), urlencode($shadowtoken)); // Compile the email with the shadow password and reset link. $mailhtml = $this->app['render']->render('@bolt/mail/passwordreset.twig', ['user' => $userEntity, 'shadowpassword' => $shadowpassword, 'shadowtoken' => $shadowtoken, 'shadowvalidity' => date('Y-m-d H:i:s', strtotime('+2 hours')), 'shadowlink' => $shadowlink]); $subject = sprintf('[ Bolt / %s ] Password reset.', $this->app['config']->get('general/sitename')); $name = $this->app['config']->get('general/mailoptions/senderName', $this->app['config']->get('general/sitename')); $email = $this->app['config']->get('general/mailoptions/senderMail', $userEntity->getEmail()); $from = [$email => $name]; $message = $this->app['mailer']->createMessage('message')->setSubject($subject)->setFrom($from)->setReplyTo($from)->setTo([$userEntity->getEmail() => $userEntity->getDisplayname()])->setBody(strip_tags($mailhtml))->addPart($mailhtml, 'text/html'); $failed = true; $failedRecipients = []; try { $recipients = $this->app['mailer']->send($message, $failedRecipients); // Try and send immediately $this->app['swiftmailer.spooltransport']->getSpool()->flushQueue($this->app['swiftmailer.transport']); if ($recipients) { $this->app['logger.system']->info("Password request sent to '" . $userEntity->getDisplayname() . "'.", ['event' => 'authentication']); $failed = false; } } catch (\Exception $e) { // Notify below } if ($failed) { $this->app['logger.system']->error("Failed to send password request sent to '" . $userEntity['displayname'] . "'.", ['event' => 'authentication']); $this->app['logger.flash']->error(Trans::__('general.phrase.error-send-password-request')); } }
/** * Add errormessages to logs and update the user * * @param Entity\Users $userEntity */ protected function loginFailed(Entity\Users $userEntity) { $this->flashLogger->error(Trans::__('Username or password not correct. Please check your input.')); $this->systemLogger->info("Failed login attempt for '" . $userEntity->getDisplayname() . "'.", ['event' => 'authentication']); // Update the failed login attempts, and perhaps throttle the logins. $userEntity->setFailedlogins($userEntity->getFailedlogins() + 1); $userEntity->setThrottleduntil($this->throttleUntil($userEntity->getFailedlogins() + 1)); unset($userEntity->password); $this->repositoryUsers->save($userEntity); }
/** * Add error messages to logs and update the user. * * @param Entity\Users $userEntity * * @return false */ protected function loginFailed(Entity\Users $userEntity) { $this->flashLogger->error(Trans::__('general.phrase.error-user-name-password-incorrect')); $this->systemLogger->info("Failed login attempt for '" . $userEntity->getDisplayname() . "'.", ['event' => 'authentication']); // Update the failed login attempts, and perhaps throttle the logins. $userEntity->setFailedlogins($userEntity->getFailedlogins() + 1); $userEntity->setThrottleduntil($this->throttleUntil($userEntity->getFailedlogins() + 1)); $userEntity->setPassword(null); $this->getRepositoryUsers()->save($userEntity); return false; }
/** * Send the password reset link notification to the user. * * @param Entity\Users $userEntity * @param string $shadowPassword * @param string $shadowToken */ private function resetPasswordNotification(Entity\Users $userEntity, $shadowPassword, $shadowToken) { $config = $this->app['config']; $flash = $this->app['logger.flash']; $mailer = $this->app['mailer']; $logger = $this->app['logger.system']; $twig = $this->app['twig']; $urlGenerator = $this->app['url_generator']; $shadowLink = $urlGenerator->generate('resetpassword', ['token' => $shadowToken], UrlGeneratorInterface::ABSOLUTE_URL); // Compile the email with the shadow password and reset link. $mailHtml = $twig->render('@bolt/mail/passwordreset.twig', ['user' => $userEntity, 'shadowpassword' => $shadowPassword, 'shadowtoken' => $shadowToken, 'shadowvalidity' => Carbon::now()->addHours(2)->format('Y-m-d H:i:s'), 'shadowlink' => $shadowLink]); $subject = sprintf('[ Bolt / %s ] Password reset.', $config->get('general/sitename')); $name = $config->get('general/mailoptions/senderName', $config->get('general/sitename')); $email = $config->get('general/mailoptions/senderMail', $userEntity->getEmail()); $from = [$email => $name]; $message = $mailer->createMessage('message')->setSubject($subject)->setFrom($from)->setReplyTo($from)->setTo([$userEntity->getEmail() => $userEntity->getDisplayname()])->setBody(strip_tags($mailHtml))->addPart($mailHtml, 'text/html'); $failed = true; $failedRecipients = []; try { $recipients = $mailer->send($message, $failedRecipients); // Try and send immediately $this->app['swiftmailer.spooltransport']->getSpool()->flushQueue($this->app['swiftmailer.transport']); if ($recipients) { $logger->info("Password request sent to '" . $userEntity->getDisplayname() . "'.", ['event' => 'authentication']); $failed = false; } } catch (\Exception $e) { // Notify below } if ($failed) { $logger->error("Failed to send password request sent to '" . $userEntity['displayname'] . "'.", ['event' => 'authentication']); $flash->error(Trans::__('general.phrase.error-send-password-request')); } }