protected function execute(InputInterface $input, OutputInterface $output) { $userService = new UserService($this->getSlim()); $helper = $this->getHelper('question'); if (null === $input->getOption('email')) { $question = new Question('Please enter an e-mail: ', 'untitled'); $email = $helper->ask($input, $output, $question); } else { $email = $input->getOption('email'); } if (null === $input->getOption('password')) { $question = new Question('Please enter a password: '******''); $password = $helper->ask($input, $output, $question); } else { $password = $input->getOption('password'); } $userService->fetchAvailablePermissions(); $permissionsDictionary = []; foreach ($userService->getCursor() as $permission) { $permissionsDictionary[$permission->getName()] = $permission; } if (null === $input->getOption('permissions')) { $question = new ChoiceQuestion('Please select which permissions you would like to enable (defaults to super). Separate multiple values with commas (without spaces). If you select super, all other permissions are also inherited: ', array_keys($permissionsDictionary), '0'); $question->setMultiselect(true); $selectedPermissionNames = $helper->ask($input, $output, $question); } else { $selectedPermissionNames = explode(',', $input->getOption('permissions')); } $selectedPermissions = []; foreach ($selectedPermissionNames as $selectedPermissionName) { $selectedPermissions[] = $permissionsDictionary[$selectedPermissionName]; } $user = $userService->addUser($email, $password, $selectedPermissions); $text = json_encode($user, JSON_PRETTY_PRINT); $output->writeln('<info>User successfully created!</info>'); $output->writeln('<info>Info:</info>'); $output->writeln($text); }
/** * Tries to create a new access token. */ public function accessTokenPost($request) { $body = $request->getBody(); $body = json_decode($body, true); // Some clients escape the JSON - handle them if (is_string($body)) { $body = json_decode($body, true); } if (json_last_error() !== JSON_ERROR_NONE) { throw new \Exception('Invalid JSON posted. Cannot continue!', Resource::STATUS_BAD_REQUEST); } $requestParams = new Set($body); if ($requestParams->get('user')['email'] === null) { throw new \Exception('Invalid request, user.email property not present!', Resource::STATUS_BAD_REQUEST); } $currentDate = new \DateTime(); $defaultParams = new Set(['user' => ['password' => 'password', 'permissions' => ['all']], 'scopes' => ['all'], 'name' => 'Token for ' . $requestParams->get('user')['email'], 'description' => 'Token generated at ' . Util\Date::dateTimeToISO8601($currentDate), 'expiresAt' => null]); $params = new Set(array_replace_recursive($defaultParams->all(), $requestParams->all())); $scopeDocuments = []; $scopes = $params->get('scopes'); foreach ($scopes as $scope) { $scopeDocument = $this->getScopeByName($scope); $scopeDocuments[] = $scopeDocument; } $permissionDocuments = []; $permissions = $params->get('user')['permissions']; foreach ($permissions as $permission) { $permissionDocument = $this->getScopeByName($permission); $permissionDocuments[] = $permissionDocument; } if (is_numeric($params->get('expiresAt'))) { $expiresAt = $params->get('expiresAt'); } else { if (null === $params->get('expiresAt')) { $expiresAt = null; } else { $expiresAt = new \DateTime($params->get('expiresAt')); $expiresAt = $expiresAt->getTimestamp(); } } $userService = new UserService($this->getSlim()); $user = $userService->addUser($params->get('user')['email'], $params->get('user')['password'], $permissionDocuments); $user->save(); $this->addToken($params->get('name'), $params->get('description'), $expiresAt, $user, $scopeDocuments); return $this; }