示例#1
0
 public function testCanSelectOptionWithCustomIndex()
 {
     fwrite($this->adapter->stream, "2");
     $select = new Select('Select an option :', array('2' => 'foo', '6' => 'bar'));
     $select->setConsole($this->adapter);
     ob_start();
     $response = $select->show();
     $text = ob_get_clean();
     $this->assertTrue((bool) preg_match('#2\\) foo#', $text));
     $this->assertTrue((bool) preg_match('#6\\) bar#', $text));
     $this->assertEquals('2', $response);
 }
示例#2
0
 public function createAction()
 {
     $emailValidator = new EmailAddress();
     $m = $this->message();
     $priorityList = ['urgent', 'high', 'normal', 'low'];
     $typeList = ['problem', 'incident', 'question', 'task'];
     $m->show('[info]What is you subject?[/info]');
     $subject = $this->getConsole()->readLine();
     $m->show('[info]Type[/info]');
     $select = new Select('Which type?', $typeList);
     $type = $typeList[$select->show()];
     $m->show('[info]What is your email?[/info]');
     $email = $this->getConsole()->readLine();
     $m->show('[info]What is your tags (separated by comma)?[/info]');
     $tags = explode(',', $this->getConsole()->readLine());
     $tags = array_map('trim', $tags);
     while (empty($description)) {
         $m->show('[info]What is your description[/info]');
         $description = $this->getConsole()->readLine();
     }
     $m->show('[info]Priority[/info]');
     $select = new Select('Which priority?', $priorityList);
     $priority = $priorityList[$select->show()];
     $extra = [];
     if ($emailValidator->isValid($email)) {
         $extra['requester'] = $email;
     }
     $extra['tags'] = is_array($tags) ? [] : $tags;
     $extra['priority'] = $priority;
     $extra['type'] = $type;
     $e = new Ticket();
     $e->setSubject($subject);
     $e->setDescription($description);
     $e->setExtraFields($extra);
     $result = $this->client->create($e->getArrayCopy());
     if ($result) {
         $e->exchangeArray((new ObjectProperty())->extract($result->ticket));
         return json_encode($e->getArrayCopy(), JSON_PRETTY_PRINT);
     }
     return 0;
 }
 public function createAction()
 {
     $applicationConfig = $this->getServiceLocator()->get('config');
     $config = $applicationConfig['zf-oauth2-doctrine']['default'];
     $console = $this->getServiceLocator()->get('console');
     $objectManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
     // Make sure that we are running in a console and the user has not tricked our
     // application into running this action from a public web server.
     $request = $this->getRequest();
     if (!$request instanceof ConsoleRequest) {
         throw new RuntimeException('You can only use this action from a console.');
     }
     if (!$client) {
         $console->write("Client not found", Color::RED);
         return;
     }
     $client = $objectManager->getRepository($config['mapping']['Client']['entity'])->find($this->getRequest()->getParam('id'));
     // Get public key path
     $publicKeyPath = '';
     while (!file_exists($publicKeyPath)) {
         $publicKeyPath = Prompt\Line::prompt("Public key path: ", false, 255);
     }
     $publicKey = file_get_contents($publicKeyPath);
     // Get private key path
     $privateKeyPath = '';
     while (!file_exists($privateKeyPath)) {
         $privateKeyPath = Prompt\Line::prompt("Private key path: ", false, 255);
     }
     $privateKey = file_get_contents($privateKeyPath);
     $options = array(0 => 'HS256', 1 => 'HS384', 2 => 'HS512', 3 => 'RS256', 4 => 'RS384', 5 => 'RS512');
     $encryptionAlgorithm = Prompt\Select::prompt("Encryption Algorithm: ", $options, false, false);
     $publicKeyEntity = new Entity\PublicKey();
     $publicKeyEntity->setClient($client);
     $publicKeyEntity->setPublicKey($publicKey);
     $publicKeyEntity->setPrivateKey($privateKey);
     $publicKeyEntity->setEncryptionAlgorithm($options[$encryptionAlgorithm]);
     $objectManager->persist($publicKeyEntity);
     $objectManager->flush();
     $console->write("Public key created\n", Color::GREEN);
 }
 public function addAction()
 {
     /** @var \Zend\Console\Request $request */
     $request = $this->getRequest();
     /** @var \Continuous\DeployAgent\Application\Application $application */
     $application = $this->getServiceLocator()->get('application/application');
     // provider param
     if ($request->getParam('provider')) {
         /** @var \Continuous\DeployAgent\Provider\Continuousphp $provider */
         $provider = $this->getServiceLocator()->get('provider/' . $request->getParam('provider'));
     } else {
         $providers = ["continuousphp"];
         $providerKey = Select::prompt("Select a provider:", $providers);
         /** @var \Continuous\DeployAgent\Provider\Continuousphp $provider */
         $provider = $this->getServiceLocator()->get('provider/' . $providers[$providerKey]);
     }
     $application->setProvider($provider);
     // token param
     if (!($token = $request->getParam('token'))) {
         $token = Line::prompt("Enter a valid continuousphp access token: ");
     }
     $provider->setToken($token);
     // project param
     if ($request->getParam('repository-provider') && $request->getParam('repository')) {
         $provider->setRepositoryProvider($request->getParam('repository-provider'))->setRepository($request->getParam('repository'));
     } else {
         $this->getConsole()->writeLine('Querying API for your projects...', ColorInterface::LIGHT_CYAN);
         $projects = $provider->getProjects();
         $projectOptions = [];
         foreach ($projects as $entry) {
             $projectOptions[] = $entry['_embedded']['provider']['uniqueIdentifier'] . '/' . $entry['url'];
         }
         if ($projectOptions) {
             $projectKey = Select::prompt("Select a project:", $projectOptions, false, true);
             $project = $projects[$projectKey];
             $provider->setProject($project);
         } else {
             $this->getConsole()->writeLine('There is no project to setup in your continuousphp account', ColorInterface::LIGHT_RED);
             return false;
         }
     }
     // pipeline param
     if (!($reference = $request->getParam('pipeline'))) {
         $this->getConsole()->writeLine('Querying API for your project pipelines...', ColorInterface::LIGHT_CYAN);
         $referenceOptions = $provider->getReferences();
         $referenceKey = Select::prompt("Select a pipeline:", $referenceOptions, false, true);
         $reference = $referenceOptions[$referenceKey];
     }
     $provider->setReference($reference);
     // name param
     if (!($name = $request->getParam('name'))) {
         $name = Line::prompt("Enter an application name: ");
     }
     $application->setName($name);
     // destination param
     if (!($path = $request->getParam('path'))) {
         $path = Line::prompt("Enter the application path: ");
     }
     $application->setPath($path);
     /** @var \Continuous\DeployAgent\Application\ApplicationManager $applicationManager */
     $applicationManager = $this->getServiceLocator()->get('application/application-manager');
     $applicationManager->persist($application);
     return false;
 }
 public function updateAction()
 {
     $applicationConfig = $this->getServiceLocator()->get('config');
     $config = $applicationConfig['zf-oauth2-doctrine']['default'];
     $console = $this->getServiceLocator()->get('console');
     $objectManager = $this->getServiceLocator()->get($config['object_manager']);
     // Make sure that we are running in a console and the user has not tricked our
     // application into running this action from a public web server.
     $request = $this->getRequest();
     if (!$request instanceof ConsoleRequest) {
         throw new RuntimeException('You can only use this action from a console.');
     }
     $clientEntity = $objectManager->getRepository($config['mapping']['Client']['entity'])->find($this->getRequest()->getParam('id'));
     if (!$clientEntity) {
         $console->write("Client not found", Color::RED);
         return;
     }
     // Get the User
     while (true) {
         if ($clientEntity->getUser()) {
             $console->write("Current Value: " . $clientEntity->getUser()->getId() . "\n", Color::CYAN);
         } else {
             $console->write("Current Value: none\n", Color::CYAN);
         }
         $userId = Prompt\Line::prompt("User ID.  Not required. ? for list: ", true, 255);
         if ($userId == '?') {
             $users = $objectManager->getRepository($config['mapping']['User']['entity'])->findAll();
             foreach ($users as $user) {
                 $console->write($user->getId() . "\t" . $user->getEmail() . "\n", Color::CYAN);
             }
             continue;
         }
         if ($userId) {
             $user = $objectManager->getRepository($config['mapping']['User']['entity'])->find($userId);
             if (!$user) {
                 $console->write("User ID {$userId} not found.\n", Color::RED);
                 continue;
             }
             $clientEntity->setUser($user);
         }
         break;
     }
     // Get the client id
     $clientId = '';
     while (!$clientId) {
         $console->write("Current Value: " . $clientEntity->getClientId() . "\n", Color::CYAN);
         $clientId = Prompt\Line::prompt("Client ID: ", false, 255);
         $client = $objectManager->getRepository($config['mapping']['Client']['entity'])->findOneBy(array('clientId' => $clientId));
         if ($client && $client->getId() !== $clientEntity->getId()) {
             $console->write('Client ID ' . $clientId . ' already exists', Color::RED);
             $clientId = '';
         }
     }
     $clientEntity->setClientId($clientId);
     // Get the client secret
     $secret = '';
     $secretVerify = false;
     while ($secret !== $secretVerify) {
         $secretPrompt = new Prompt\Password("Secret: ");
         $secret = $secretPrompt->show();
         $secretPrompt = new Prompt\Password("Verify Secret: ");
         $secretVerify = $secretPrompt->show();
         if ($secret !== $secretVerify) {
             $console->write("Password verification does not match.  Please try again.\n", Color::YELLOW);
             continue;
         }
         $bcrypt = new Bcrypt();
         $bcrypt->setCost(14);
         $clientEntity->setSecret($bcrypt->create($secret));
     }
     // Get the Redirect URI
     $console->write("Current Value: " . $clientEntity->getRedirectUri() . "\n", Color::CYAN);
     $redirectUri = Prompt\Line::prompt("Redirect URI.  Not required: ", true, 255);
     $clientEntity->setRedirectUri($redirectUri);
     // Get Grant Type(s)
     $console->write("Current Value: " . implode(',', $clientEntity->getGrantType()) . "\n", Color::CYAN);
     $console->write("Default Grant Types\n", Color::YELLOW);
     $console->write("authorization_code\n", Color::CYAN);
     $console->write("access_token\n", Color::CYAN);
     $console->write("refresh_token\n", Color::CYAN);
     $console->write("urn:ietf:params:oauth:grant-type:jwt-bearer\n", Color::CYAN);
     $grantType = Prompt\Line::prompt("Grant Types, comma delimited.  Not required: ", true, 255);
     $clientEntity->setGrantType(explode(',', $grantType));
     // Add scope(s)
     $clientScopes = new ArrayCollection();
     while (true) {
         if (sizeof($clientEntity->getScope())) {
             $console->write("Current Scope(s)\n", Color::YELLOW);
             foreach ($clientEntity->getScope() as $scope) {
                 $console->write($scope->getScope() . "\n", Color::CYAN);
             }
         }
         $scopeArray = $objectManager->getRepository($config['mapping']['Scope']['entity'])->findBy(array(), array('id' => 'ASC'));
         $scopes = new ArrayCollection();
         foreach ($scopeArray as $scope) {
             if (!$clientScopes->contains($scope)) {
                 $scopes->add($scope);
             }
         }
         $options = array(0 => 'Done Selecting Scopes');
         foreach ($scopes as $scope) {
             $options[$scope->getId()] = $scope->getScope();
         }
         if (!$options) {
             $console->write("No Scopes exist.\n", Color::RED);
             break;
         }
         if (sizeof($clientScopes)) {
             $console->write("Selected Scopes\n", Color::YELLOW);
             foreach ($clientScopes as $scope) {
                 $console->write($scope->getScope() . "\n", Color::CYAN);
             }
         }
         $answer = Prompt\Select::prompt('Select Scope(s): ', $options, false, false);
         if (!$answer) {
             foreach ($clientEntity->getScope() as $scope) {
                 $scope->removeClient($clientEntity);
                 $clientEntity->removeScope($scope);
             }
             foreach ($clientScopes as $scope) {
                 $scope->addClient($clientEntity);
                 $clientEntity->addScope($scope);
             }
             break;
         } else {
             foreach ($scopes as $scope) {
                 if ($scope->getId() == $answer) {
                     $clientScopes->add($scope);
                     echo "{$answer} selected\n";
                     break;
                 }
             }
         }
     }
     $objectManager->flush();
     $console->write("Client updated\n", Color::GREEN);
 }
示例#6
0
 public function select($promptText, array $options, $allowEmpty = false)
 {
     $prompt = new SelectPrompt($promptText, $options, $allowEmpty);
     $prompt->setConsole($this->console);
     return $prompt->show();
 }
示例#7
0
 /**
  * Write a customizable prompt
  *
  * @param $message
  * @param $options
  *
  * @return string
  */
 public function writeSelectPrompt($message, &$options)
 {
     $this->writeLine();
     // translate options
     foreach ($options as $optionKey => $optionValue) {
         $options[$optionKey] = $this->translator->translate($optionValue);
     }
     // write prompt badge
     $this->writeBadge('badge_pick', Color::RED);
     // output prompt
     $prompt = new Select($this->translator->translate($message), $options, false, false);
     $answer = $prompt->show();
     $this->writeLine();
     return strtolower($answer);
 }
 public function createAction()
 {
     $request = $this->getRequest();
     if (!$request instanceof ConsoleRequest) {
         throw new \RuntimeException('This action can only be used from a console!');
     }
     try {
         $console = Console::getInstance();
     } catch (ConsoleException $e) {
         throw new \RuntimeException('This action can only be used from a console!');
     }
     $this->setValidatorService($this->getServiceLocator()->get('loslicense.validator'));
     $outputFile = $request->getParam('outputFile', null);
     $writer = new \LosLicense\Config\Writer\PhpArray();
     $writer->setUseBracketArraySyntax(true);
     $options = ['Trial', 'Personal', 'Standard'];
     $type = Select::prompt('License type?', $options, false, true);
     $valid_from = Line::prompt("\nValid from (Enter to not set one) YYYY-MM-DD HH:II:SS ? ", true, 20);
     $valid_until = Line::prompt("\nValid until (Enter to not set one) YYYY-MM-DD HH:II:SS ? ", true, 20);
     $customer = Line::prompt("\nCustomer? ", true, 100);
     $options = $this->getServiceLocator()->get('loslicense.options');
     $features = $options->getFeatures();
     $checked = Checkbox::prompt("\nFeatures? (Enter to finish) ", array_keys($features), true, true);
     $sign = false;
     if (Confirm::prompt("\nSign the license? [y/n] ", 'y', 'n')) {
         $sign = true;
     }
     if (Confirm::prompt("\nConfirm the license creation? [y/n] ", 'y', 'n')) {
         $config = new \Zend\Config\Config([], true);
         if ($type == 0) {
             $config->type = License::LICENSE_TRIAL;
             $license = new TrialLicense();
         } elseif ($type == 1) {
             $config->type = License::LICENSE_PERSONAL;
             $license = new PersonalLicense();
         } else {
             $config->type = License::LICENSE_STANDARD;
             $license = new StandardLicense();
         }
         $license->setType($config->type);
         if (!empty($valid_from)) {
             $from = new \DateTime($valid_from);
             $config->valid_from = $from->format('Y-m-d H:i:s');
             $license->setValidFrom($config->valid_from);
         }
         if (!empty($valid_until)) {
             $until = new \DateTime($valid_until);
             $config->valid_until = $until->format('Y-m-d H:i:s');
             $license->setValidUntil($config->valid_until);
         }
         if (!empty($customer)) {
             $config->customer = $customer;
             $license->setCustomer($config->customer);
         }
         if (!empty($checked)) {
             $config->features = [];
             $licenseFeatures = [];
             foreach ($features as $feature => $value) {
                 if (in_array($feature, $checked)) {
                     if ($value === null) {
                         $config->features->{$feature} = null;
                         $licenseFeatures[$feature] = null;
                     } else {
                         $config->features->{$feature} = $value;
                         $licenseFeatures[$feature] = $value;
                     }
                 }
             }
             $license->setFeatures($licenseFeatures);
         }
         if ($sign) {
             $signature = $this->getValidatorService()->signLicense($license);
             $config->signature = $signature;
         }
         if ($outputFile) {
             $writer->toFile($outputFile, $config);
         } else {
             echo $writer->toString($config);
         }
         $console->writeLine("License created", Color::GREEN);
     }
 }
示例#9
0
 protected function getCacheName()
 {
     $caches = $this->getCaches();
     if (count($caches) === 0) {
         throw new \Exception('No abstract caches registerd to select');
     }
     if (count($caches) === 1) {
         return key($caches);
     }
     $options = array_keys($caches);
     // Increase the keys by 1 since arrays are zero-based keys
     array_unshift($options, null);
     unset($options[0]);
     $answer = ConsoleSelect::prompt('You have multiple caches defined, please select one', $options);
     return $options[$answer];
 }