/** * @param string $property * @param string $value * @param Environment $environment * * @return int */ protected function setProperty($property, $value, Environment $environment) { if (!$this->validateValue($property, $value)) { return 1; } $type = $this->getType($property); if ($type === 'boolean' && $value === 'false') { $value = false; } settype($value, $type); $currentValue = $environment->getProperty($property, false); if ($currentValue === $value) { $this->stdErr->writeln("Property <info>{$property}</info> already set as: " . $this->formatter->format($environment->getProperty($property, false), $property)); return 0; } $environment->update(array($property => $value)); $this->stdErr->writeln("Property <info>{$property}</info> set to: " . $this->formatter->format($environment[$property], $property)); $rebuildProperties = array('enable_smtp', 'restrict_robots'); if (in_array($property, $rebuildProperties) && !$environment->getLastActivity()) { $this->rebuildWarning(); } // Refresh the stored environments. $this->getEnvironments($this->getSelectedProject(), true); return 0; }
protected function execute(InputInterface $input, OutputInterface $output) { $info = $this->api()->getMyAccount((bool) $input->getOption('refresh')); $formatter = new PropertyFormatter($input); $propertyWhitelist = ['id', 'uuid', 'display_name', 'username', 'mail', 'has_key']; $info = array_intersect_key($info, array_flip($propertyWhitelist)); $property = $input->getArgument('property'); if ($input->getOption('property')) { if ($property) { throw new InvalidArgumentException(sprintf('You cannot use both the <%s> argument and the --%s option', 'property', 'property')); } $property = $input->getOption('property'); } if ($property) { if (!isset($info[$property])) { throw new \InvalidArgumentException('Property not found: ' . $property); } $output->writeln($formatter->format($info[$property], $property)); return 0; } unset($info['uuid']); $values = []; $header = []; foreach ($propertyWhitelist as $property) { if (isset($info[$property])) { $values[] = $formatter->format($info[$property], $property); $header[] = $property; } } $table = new Table($input, $output); $table->renderSimple($values, $header); return 0; }
/** * Display domain information. * * @param Domain $domain * @param OutputInterface $output * @param int $indent */ protected function displayDomain(Domain $domain, OutputInterface $output, $indent = 2) { $formatter = new PropertyFormatter(); $indent = str_repeat(' ', $indent); $output->writeln($indent . "Name: {$domain->name}"); $output->writeln($indent . "Has SSL certificate: " . $formatter->format(!empty($domain->ssl['has_certificate']))); $output->writeln($indent . "Added: " . $formatter->format($domain->created_at, 'created_at')); }
/** * Recursively build rows of the domain table. * * @param Domain[] $tree * * @return array */ protected function buildDomainRows(array $tree) { $rows = array(); $formatter = new PropertyFormatter(); foreach ($tree as $domain) { $rows[] = array($domain['id'], $formatter->format((bool) $domain['has_certificate']), $formatter->format($domain['created_at'], 'created_at')); } return $rows; }
/** * @param Environment $environment * @param OutputInterface $output * * @return int */ protected function listProperties(Environment $environment, OutputInterface $output) { $this->stdErr->writeln("Metadata for the environment <info>" . $environment['id'] . "</info>:"); $table = new Table($output); $table->setHeaders(array("Property", "Value")); foreach ($environment->getProperties() as $key => $value) { $table->addRow(array($key, $this->formatter->format($value, $key))); } $table->render(); return 0; }
/** * @param Subscription $subscription * @param Table $table * * @return int */ protected function listProperties(Subscription $subscription, Table $table) { $headings = []; $values = []; foreach ($subscription->getProperties() as $key => $value) { $headings[] = new AdaptiveTableCell($key, ['wrap' => false]); $values[] = $this->formatter->format($value, $key); } $table->renderSimple($values, $headings); return 0; }
/** * @param Integration $integration * @param InputInterface $input * @param OutputInterface $output */ protected function displayIntegration(Integration $integration, InputInterface $input, OutputInterface $output) { $table = new Table($input, $output); $info = []; foreach ($integration->getProperties() as $property => $value) { $info[$property] = $this->propertyFormatter->format($value, $property); } if ($integration->hasLink('#hook')) { $info['hook_url'] = $this->propertyFormatter->format($integration->getLink('#hook')); } $table->renderSimple(array_values($info), array_keys($info)); }
/** * @param Subscription $subscription * @param Table $table * * @return int */ protected function listProperties(Subscription $subscription, Table $table) { $headings = []; $values = []; foreach ($subscription->getProperties() as $key => $value) { $value = $this->formatter->format($value, $key); $value = wordwrap($value, 50, "\n", true); $headings[] = $key; $values[] = $value; } $table->renderSimple($values, $headings); return 0; }
/** * @param Subscription $subscription * * @return int */ protected function listProperties(Subscription $subscription) { $this->stdErr->writeln("Metadata for the subscription <info>" . $subscription->id . "</info>:"); $table = new Table($this->output); $table->setHeaders(array("Property", "Value")); foreach ($subscription->getProperties() as $key => $value) { $value = $this->formatter->format($value, $key); $value = wordwrap($value, 50, "\n", true); $table->addRow(array($key, $value)); } $table->render(); return 0; }
/** * @param string $property * @param string $value * @param Environment $environment * @param bool $noWait * * @return int */ protected function setProperty($property, $value, Environment $environment, $noWait) { if (!$this->validateValue($property, $value)) { return 1; } $type = $this->getType($property); if ($type === 'boolean' && $value === 'false') { $value = false; } settype($value, $type); $currentValue = $environment->getProperty($property, false); if ($currentValue === $value) { $this->stdErr->writeln("Property <info>{$property}</info> already set as: " . $this->formatter->format($environment->getProperty($property, false), $property)); return 0; } $result = $environment->update([$property => $value]); $this->stdErr->writeln("Property <info>{$property}</info> set to: " . $this->formatter->format($environment->{$property}, $property)); $this->api()->clearEnvironmentsCache($environment->project); $rebuildProperties = ['enable_smtp', 'restrict_robots']; $success = true; if ($result->countActivities() && !$noWait) { $success = ActivityUtil::waitMultiple($result->getActivities(), $this->stdErr, $this->getSelectedProject()); } elseif (!$result->countActivities() && in_array($property, $rebuildProperties)) { $this->rebuildWarning(); } return $success ? 0 : 1; }
/** * @param string $property * @param string $value * @param Project $project * @param bool $noWait * * @return int */ protected function setProperty($property, $value, Project $project, $noWait) { if (!$this->validateValue($property, $value)) { return 1; } $type = $this->getType($property); if ($type === 'boolean' && $value === 'false') { $value = false; } settype($value, $type); $currentValue = $project->getProperty($property); if ($currentValue === $value) { $this->stdErr->writeln("Property <info>{$property}</info> already set as: " . $this->formatter->format($value, $property)); return 0; } $project->ensureFull(); $result = $project->update([$property => $value]); $this->stdErr->writeln("Property <info>{$property}</info> set to: " . $this->formatter->format($value, $property)); $this->api()->clearProjectsCache(); $success = true; if (!$noWait) { $success = ActivityUtil::waitMultiple($result->getActivities(), $this->stdErr, $project); } return $success ? 0 : 1; }
protected function execute(InputInterface $input, OutputInterface $output) { $this->validateInput($input); $app = $this->selectApp($input); $environment = $this->getSelectedEnvironment(); $cacheKey = implode('-', ['relationships', $environment->id . $environment->project . $app]); $cache = CacheUtil::getCache(); $relationships = $cache->fetch($cacheKey); if (empty($relationships) || $input->getOption('refresh')) { $util = new RelationshipsUtil($this->stdErr); $sshUrl = $environment->getSshUrl($app); $relationships = $util->getRelationships($sshUrl); if (empty($relationships)) { $this->stdErr->writeln('No relationships found'); return 1; } $cache->save($cacheKey, $relationships, 3600); } $value = $relationships; $key = null; if ($property = $input->getOption('property')) { $parents = explode('.', $property); $key = end($parents); $value = Util::getNestedArrayValue($relationships, $parents, $key_exists); if (!$key_exists) { $this->stdErr->writeln("Relationship property not found: <error>{$property}</error>"); return 1; } } $formatter = new PropertyFormatter(); $formatter->yamlInline = 10; $output->writeln($formatter->format($value, $key)); return 0; }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $this->validateInput($input); $shellHelper = $this->getHelper('shell'); $shellHelper->setOutput($this->stdErr); $sshUrl = $this->getSelectedEnvironment()->getSshUrl($this->selectApp($input)); $args = ['ssh', $sshUrl, 'echo $PLATFORM_APPLICATION']; $result = $shellHelper->execute($args, null, true); $appConfig = json_decode(base64_decode($result), true); $value = $appConfig; $key = null; if ($property = $input->getOption('property')) { $parents = explode('.', $property); $key = end($parents); $value = Util::getNestedArrayValue($appConfig, $parents, $key_exists); if (!$key_exists) { $this->stdErr->writeln("Configuration property not found: <error>{$property}</error>"); return 1; } } $formatter = new PropertyFormatter(); $formatter->yamlInline = 10; $output->writeln($formatter->format($value, $key)); return 0; }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $this->validateInput($input); $project = $this->getSelectedProject(); $domainName = $input->getArgument('name'); if (empty($domainName)) { if (!$input->isInteractive()) { $this->stdErr->writeln('The domain name is required.'); return 1; } $domains = $project->getDomains(); $options = []; foreach ($domains as $domain) { $options[$domain->name] = $domain->name; } /** @var QuestionHelper $questionHelper */ $questionHelper = $this->getHelper('question'); $domainName = $questionHelper->choose($options, 'Enter a number to choose a domain:'); } $domain = $project->getDomain($domainName); if (!$domain) { $this->stdErr->writeln('Domain not found: <error>' . $domainName . '</error>'); return 1; } $propertyFormatter = new PropertyFormatter($input); if ($property = $input->getOption('property')) { $value = $this->api()->getNestedProperty($domain, $property); $output->writeln($propertyFormatter->format($value, $property)); return 0; } $values = []; $properties = []; foreach ($domain->getProperties() as $name => $value) { // Hide the deprecated (irrelevant) property 'wildcard'. if ($name === 'wildcard') { continue; } $properties[] = $name; $values[] = $propertyFormatter->format($value, $name); } $table = new Table($input, $output); $table->renderSimple($values, $properties); $this->stdErr->writeln(''); $this->stdErr->writeln('To update a domain, run: <info>' . self::$config->get('application.executable') . ' domain:update [domain-name]</info>'); $this->stdErr->writeln('To delete a domain, run: <info>' . self::$config->get('application.executable') . ' domain:delete [domain-name]</info>'); return 0; }
protected function execute(InputInterface $input, OutputInterface $output) { $this->validateInput($input); $project = $this->getSelectedProject(); $environment = $this->getSelectedEnvironment(); $appName = $this->selectApp($input); $tunnels = $this->getTunnelInfo(); $relationships = []; foreach ($this->filterTunnels($tunnels, $input) as $key => $tunnel) { $service = $tunnel['service']; // Overwrite the service's address with the local tunnel details. $service['host'] = self::LOCAL_IP; $service['ip'] = self::LOCAL_IP; $service['port'] = $tunnel['localPort']; $relationships[$tunnel['relationship']][$tunnel['serviceKey']] = $service; } if (!count($relationships)) { $this->stdErr->writeln('No tunnels found.'); if (count($tunnels) > count($relationships)) { $this->stdErr->writeln("List all tunnels with: <info>platform tunnels --all</info>"); } return 1; } if ($input->getOption('encode')) { if ($input->getOption('property')) { $this->stdErr->writeln('You cannot combine --encode with --property.'); return 1; } $output->writeln(base64_encode(json_encode($relationships))); return 0; } $value = $relationships; $key = null; if ($property = $input->getOption('property')) { $parents = explode('.', $property); $key = end($parents); $value = Util::getNestedArrayValue($relationships, $parents, $key_exists); if (!$key_exists) { $this->stdErr->writeln("Property not found: <error>{$property}</error>"); return 1; } } $formatter = new PropertyFormatter(); $formatter->yamlInline = 10; $output->writeln($formatter->format($value, $key)); return 0; }
/** * @param string $property * @param string $value * @param Project $project * * @return int */ protected function setProperty($property, $value, Project $project) { if (!$this->validateValue($property, $value)) { return 1; } $type = $this->getType($property); if ($type === 'boolean' && $value === 'false') { $value = false; } settype($value, $type); $currentValue = $project->getProperty($property); if ($currentValue === $value) { $this->stdErr->writeln("Property <info>{$property}</info> already set as: " . $this->formatter->format($value, $property)); return 0; } $project->ensureFull(); $project->update(array($property => $value)); $this->stdErr->writeln("Property <info>{$property}</info> set to: " . $this->formatter->format($value, $property)); $this->getProjects(true); return 0; }
protected function execute(InputInterface $input, OutputInterface $output) { $this->checkSupport(); $this->validateInput($input); $tunnels = $this->getTunnelInfo(); $relationships = []; foreach ($this->filterTunnels($tunnels, $input) as $key => $tunnel) { $service = $tunnel['service']; // Overwrite the service's address with the local tunnel details. $service = array_merge($service, array_intersect_key(['host' => self::LOCAL_IP, 'ip' => self::LOCAL_IP, 'port' => $tunnel['localPort']], $service)); $relationships[$tunnel['relationship']][$tunnel['serviceKey']] = $service; } if (!count($relationships)) { $this->stdErr->writeln('No tunnels found.'); if (count($tunnels) > count($relationships)) { $this->stdErr->writeln("List all tunnels with: <info>" . self::$config->get('application.executable') . " tunnels --all</info>"); } return 1; } if ($input->getOption('encode')) { if ($input->getOption('property')) { $this->stdErr->writeln('You cannot combine --encode with --property.'); return 1; } $output->writeln(base64_encode(json_encode($relationships))); return 0; } $value = $relationships; if ($property = $input->getOption('property')) { $value = Util::getNestedArrayValue($relationships, explode('.', $property), $keyExists); if (!$keyExists) { $this->stdErr->writeln("Property not found: <error>{$property}</error>"); return 1; } } $formatter = new PropertyFormatter(); $formatter->yamlInline = 10; $output->writeln($formatter->format($value, $property)); return 0; }
protected function execute(InputInterface $input, OutputInterface $output) { $this->validateInput($input); $auth = $input->getOption('auth'); $access = $input->getOption('access'); $accessOpts = []; $enabled = $input->getOption('enabled'); if ($enabled !== null) { $accessOpts['is_enabled'] = !in_array($enabled, ['0', 'false']); } if ($access) { $accessOpts['addresses'] = []; foreach (array_filter($access) as $access) { $accessOpts["addresses"][] = $this->parseAccess($access); } } if ($auth) { $accessOpts['basic_auth'] = []; foreach (array_filter($auth) as $auth) { $parsed = $this->parseAuth($auth); $accessOpts["basic_auth"][$parsed["username"]] = $parsed["password"]; } } // Ensure the environment is refreshed. $selectedEnvironment = $this->getSelectedEnvironment(); $selectedEnvironment->ensureFull(); $environmentId = $selectedEnvironment->id; $formatter = new PropertyFormatter(); if (!empty($accessOpts)) { $current = (array) $selectedEnvironment->getProperty('http_access'); // Merge existing settings. Not using a reference here, as that // would affect the comparison with $current later. foreach ($current as $key => $value) { if (!isset($accessOpts[$key])) { $accessOpts[$key] = $value; } } if ($current != $accessOpts) { // The API only accepts {} for an empty "basic_auth" value, // rather than []. if (isset($accessOpts['basic_auth']) && $accessOpts['basic_auth'] === []) { $accessOpts['basic_auth'] = (object) []; } // Patch the environment with the changes. $result = $selectedEnvironment->update(['http_access' => $accessOpts]); $this->clearEnvironmentsCache(); $this->stdErr->writeln("Updated HTTP access settings for the environment <info>{$environmentId}</info>:"); $output->writeln($formatter->format($selectedEnvironment->getProperty('http_access'), 'http_access')); $success = true; if (!$result->countActivities()) { $this->rebuildWarning(); } elseif (!$input->getOption('no-wait')) { $success = ActivityUtil::waitMultiple($result->getActivities(), $this->stdErr); } return $success ? 0 : 1; } } $this->stdErr->writeln("HTTP access settings for the environment <info>{$environmentId}</info>:"); $output->writeln($formatter->format($selectedEnvironment->getProperty('http_access'), 'http_access')); return 0; }