/** * @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>"); } } }
/** * @see \Symfony\Component\Console\Command\Command::execute() */ protected function execute(InputInterface $input, OutputInterface $output) { /** @var \Bolt\Storage\Repository\UsersRepository $repo */ $repo = $this->app['storage']->getRepository('Bolt\\Storage\\Entity\\Users'); $user = new Entity\Users(['username' => $input->getArgument('username'), 'password' => $input->getArgument('password'), 'email' => $input->getArgument('email'), 'displayname' => $input->getArgument('displayname'), 'roles' => (array) $input->getArgument('role')]); $message = []; $valid = true; if ($repo->getUser($user->getEmail())) { $valid = false; $message[] = "<error> * Email address '{$user->getEmail()}' already exists</error>"; } if ($repo->getUser($user->getUsername())) { $valid = false; $message[] = "<error> * User name '{$user->getUsername()}' already exists</error>"; } if ($valid === false) { $message[] = "<error>Error creating user:</error>"; $output->write(array_reverse($message), true); return; } try { // Boot all service providers manually as, we're not handling a request $this->app->boot(); $this->app['storage']->getRepository('Bolt\\Storage\\Entity\\Users')->save($user); $this->auditLog(__CLASS__, "User created: {$user->getUsername()}"); $output->writeln("<info>Successfully created user: {$user->getUsername()}</info>"); } catch (\Exception $e) { $output->writeln("<error>Error creating user: {$user->getUsername()}</error>"); } }
/** * Save changes to a user to the database. (re)hashing the password, if needed. * * @param Entity\Users|array $user * * @return integer The number of affected rows. */ public function saveUser($user) { if (is_array($user)) { $user = new Entity\Users($user); } // Make sure the username is slug-like $user->setUsername($this->app['slugify']->slugify($user->getUsername())); // Save the entity return $this->repository->save($user); }
/** * Handle a POST from user edit or first user creation. * * @param Request $request * @param Form $form A Symfony form * @param boolean $firstuser If this is a first user set up * * @return Entity\Users|false */ private function validateUserForm(Request $request, Form $form, $firstuser = false) { $form->submit($request->get($form->getName())); if (!$form->isValid()) { return false; } $userEntity = new Entity\Users($form->getData()); $userEntity->setUsername($this->app['slugify']->slugify($userEntity->getUsername())); if (!$firstuser) { $userEntity->setRoles($this->users()->filterManipulatableRoles($userEntity->getId(), $userEntity->getRoles())); } if ($this->getRepository('Bolt\\Storage\\Entity\\Users')->save($userEntity)) { $this->flashes()->success(Trans::__('page.edit-users.message.user-saved', ['%user%' => $userEntity->getDisplayname()])); $this->notifyUserSave($request, $userEntity->getDisplayname(), $userEntity->getEmail(), $firstuser); } else { $this->flashes()->error(Trans::__('page.edit-users.message.saving-user', ['%user%' => $userEntity->getDisplayname()])); } return $userEntity; }
/** * Set the Authtoken cookie and DB-entry. If it's already present, update it. * * @param Entity\Users $userEntity * * @return Entity\Authtoken */ protected function updateAuthToken($userEntity) { $username = $userEntity->getUsername(); $cookieLifetime = (int) $this->cookieOptions['lifetime']; $tokenEntity = $this->getRepositoryAuthtoken()->getUserToken($userEntity->getUsername(), $this->getClientIp(), $this->getClientUserAgent()); if ($tokenEntity) { $token = $tokenEntity->getToken(); } else { $salt = $this->randomGenerator->generateString(32); $token = $this->getAuthToken($username, $salt); $tokenEntity = new Entity\Authtoken(); $tokenEntity->setUsername($userEntity->getUsername()); $tokenEntity->setToken($token); $tokenEntity->setSalt($salt); } $tokenEntity->setValidity(Carbon::create()->addSeconds($cookieLifetime)); $tokenEntity->setIp($this->getClientIp()); $tokenEntity->setLastseen(Carbon::now()); $tokenEntity->setUseragent($this->getClientUserAgent()); $this->getRepositoryAuthtoken()->save($tokenEntity); $this->systemLogger->debug("Saving new login token '{$token}' for user ID '{$username}'", ['event' => 'authentication']); return $tokenEntity; }
/** * Set the Authtoken cookie and DB-entry. If it's already present, update it. * * @param Entity\Users $userEntity * * @return Entity\Authtoken */ protected function updateAuthToken($userEntity) { $salt = $this->randomGenerator->generateString(32); if (!($tokenEntity = $this->repositoryAuthtoken->getUserToken($userEntity->getUsername(), $this->remoteIP, $this->userAgent))) { $tokenEntity = new Entity\Authtoken(); } $username = $userEntity->getUsername(); $token = $this->getAuthToken($username, $salt); $validityPeriod = $this->cookieOptions['lifetime']; $validityDate = new \DateTime(); $validityInterval = new \DateInterval("PT{$validityPeriod}S"); $tokenEntity->setUsername($userEntity->getUsername()); $tokenEntity->setToken($token); $tokenEntity->setSalt($salt); $tokenEntity->setValidity($validityDate->add($validityInterval)); $tokenEntity->setIp($this->remoteIP); $tokenEntity->setLastseen(new \DateTime()); $tokenEntity->setUseragent($this->userAgent); $this->repositoryAuthtoken->save($tokenEntity); $this->systemLogger->debug("Saving new login token '{$token}' for user ID '{$username}'", ['event' => 'authentication']); return $tokenEntity; }
/** * Delete any save authtokens for a user. * * @param Entity\Users $user */ private function deleteAuthtokens(Entity\Users $user) { /** @var \Bolt\Storage\Repository\AuthtokenRepository $repo */ $repo = $this->em->getRepository('Bolt\\Storage\\Entity\\Authtoken'); $repo->deleteTokens($user->getUsername()); }