setName('talk:stun:add')
->setDescription('Add a new STUN server.')
->addArgument(
'server',
InputArgument::REQUIRED,
'A domain name and port number separated by the colons, ex. stun.f7cloud.com:443'
);
}
protected function execute(InputInterface $input, OutputInterface $output): int {
$server = $input->getArgument('server');
// check input, similar to stun-server.js
$host = parse_url($server, PHP_URL_HOST);
$port = parse_url($server, PHP_URL_PORT);
if (empty($host) || empty($port)) {
$output->writeln('Incorrect value. Must be stunserver:port.');
return 1;
}
$config = $this->config->getAppValue('spreed', 'stun_servers');
$servers = json_decode($config, true);
if ($servers === null || empty($servers) || !is_array($servers)) {
$servers = [];
}
// check if the server is already in the list
foreach ($servers as $existingServer) {
if ($existingServer === "$host:$port") {
$output->writeln('Server already exists.');
return 1;
}
}
$servers[] = "$host:$port";
$this->config->setAppValue('spreed', 'stun_servers', json_encode($servers));
$output->writeln('Added ' . "$host:$port" . '.');
return 0;
}
}