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);
 }
Beispiel #2
0
 /**
  * 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;
 }