diff options
author | Jeroen de Jong <26439440+JdeJongATS@users.noreply.github.com> | 2020-09-02 12:38:12 +0300 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2020-09-02 14:40:52 +0300 |
commit | a6909c2ac5f3e67e1bf0659bad1e0dbe8feff5ad (patch) | |
tree | a5e2c33729628b3fdc3ee8fda46459fceccdc1a8 /lib | |
parent | 0fc82a15666ee03e8b44509e44deec884649ff39 (diff) |
Added Voipbuster SMS provider
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Command/Configure.php | 23 | ||||
-rw-r--r-- | lib/Service/Gateway/SMS/Provider/ProviderFactory.php | 2 | ||||
-rw-r--r-- | lib/Service/Gateway/SMS/Provider/Voipbuster.php | 78 | ||||
-rw-r--r-- | lib/Service/Gateway/SMS/Provider/VoipbusterConfig.php | 81 |
4 files changed, 183 insertions, 1 deletions
diff --git a/lib/Command/Configure.php b/lib/Command/Configure.php index dc7b95f..aa5ae45 100644 --- a/lib/Command/Configure.php +++ b/lib/Command/Configure.php @@ -39,6 +39,7 @@ use OCA\TwoFactorGateway\Service\Gateway\SMS\Provider\PuzzelSMSConfig; use OCA\TwoFactorGateway\Service\Gateway\SMS\Provider\HuaweiE3531Config; use OCA\TwoFactorGateway\Service\Gateway\SMS\Provider\SpryngSMSConfig; use OCA\TwoFactorGateway\Service\Gateway\SMS\Provider\ClickatellCentralConfig; +use OCA\TwoFactorGateway\Service\Gateway\SMS\Provider\VoipbusterConfig; use OCA\TwoFactorGateway\Service\Gateway\Telegram\Gateway as TelegramGateway; use OCA\TwoFactorGateway\Service\Gateway\Telegram\GatewayConfig as TelegramConfig; use Symfony\Component\Console\Command\Command; @@ -109,7 +110,7 @@ class Configure extends Command { private function configureSms(InputInterface $input, OutputInterface $output) { $helper = $this->getHelper('question'); - $providerQuestion = new Question('Please choose a SMS provider (websms, playsms, clockworksms, puzzelsms, ecallsms, voipms, huawei_e3531, spryng, sms77io, ovh, clickatellcentral, clicksend): ', 'websms'); + $providerQuestion = new Question('Please choose a SMS provider (websms, playsms, clockworksms, puzzelsms, ecallsms, voipms, voipbuster, huawei_e3531, spryng, sms77io, ovh, clickatellcentral, clicksend): ', 'websms'); $provider = $helper->ask($input, $output, $providerQuestion); /** @var SMSConfig $config */ @@ -217,6 +218,26 @@ class Configure extends Command { $providerConfig->setDid($did); break; + case 'voipbuster': + $config->setProvider($provider); + + /** @var VoipbusterConfig $providerConfig */ + $providerConfig = $config->getProvider()->getConfig(); + + $usernameQuestion = new Question('Please enter your Voipbuster API username: '); + $username = $helper->ask($input, $output, $usernameQuestion); + + $passwordQuestion = new Question('Please enter your Voipbuster API password: '); + $password = $helper->ask($input, $output, $passwordQuestion); + + $didQuestion = new Question('Please enter your Voipbuster DID: '); + $did = $helper->ask($input, $output, $didQuestion); + + $providerConfig->setUser($username); + $providerConfig->setPassword($password); + $providerConfig->setDid($did); + break; + case 'huawei_e3531': $config->setProvider($provider); /** @var HuaweiE3531Config $providerConfig */ diff --git a/lib/Service/Gateway/SMS/Provider/ProviderFactory.php b/lib/Service/Gateway/SMS/Provider/ProviderFactory.php index ec49964..7977bde 100644 --- a/lib/Service/Gateway/SMS/Provider/ProviderFactory.php +++ b/lib/Service/Gateway/SMS/Provider/ProviderFactory.php @@ -49,6 +49,8 @@ class ProviderFactory { return $this->container->query(EcallSMS::class); case VoipMs::PROVIDER_ID: return $this->container->query(VoipMs::class); + case Voipbuster::PROVIDER_ID: + return $this->container->query(Voipbuster::class); case HuaweiE3531::PROVIDER_ID: return $this->container->query(HuaweiE3531::class); case Sms77Io::PROVIDER_ID: diff --git a/lib/Service/Gateway/SMS/Provider/Voipbuster.php b/lib/Service/Gateway/SMS/Provider/Voipbuster.php new file mode 100644 index 0000000..628e8ea --- /dev/null +++ b/lib/Service/Gateway/SMS/Provider/Voipbuster.php @@ -0,0 +1,78 @@ +<?php + +declare(strict_types=1); + +/** + * @author Francois Blackburn <blackburnfrancois@gmail.com> + * + * Nextcloud - Two-factor Gateway + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\TwoFactorGateway\Service\Gateway\SMS\Provider; + +use Exception; +use OCA\TwoFactorGateway\Exception\SmsTransmissionException; +use OCP\Http\Client\IClient; +use OCP\Http\Client\IClientService; + +class Voipbuster implements IProvider { + public const PROVIDER_ID = 'voipbuster'; + + /** @var IClient */ + private $client; + + /** @var VoipbusterConfig */ + private $config; + + public function __construct(IClientService $clientService, + VoipbusterConfig $config) { + $this->client = $clientService->newClient(); + $this->config = $config; + } + + /** + * @param string $identifier + * @param string $message + * + * @throws SmsTransmissionException + */ + public function send(string $identifier, string $message) { + $config = $this->getConfig(); + $user = $config->getUser(); + $password = $config->getPassword(); + $did = $config->getDid(); + try { + $this->client->get('https://www.voipbuster.com/myaccount/sendsms.php', [ + 'query' => [ + 'username' => $user, + 'password' => $password, + 'from' => $did, + 'to' => $identifier, + 'text' => $message, + ], + ]); + } catch (Exception $ex) { + throw new SmsTransmissionException(); + } + } + + /** + * @return VoipMsConfig + */ + public function getConfig(): IProviderConfig { + return $this->config; + } +} diff --git a/lib/Service/Gateway/SMS/Provider/VoipbusterConfig.php b/lib/Service/Gateway/SMS/Provider/VoipbusterConfig.php new file mode 100644 index 0000000..49dc867 --- /dev/null +++ b/lib/Service/Gateway/SMS/Provider/VoipbusterConfig.php @@ -0,0 +1,81 @@ +<?php + +declare(strict_types=1); + +/** + * @author Francois Blackburn <blackburnfrancois@gmail.com> + * + * Nextcloud - Two-factor Gateway for Telegram + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\TwoFactorGateway\Service\Gateway\SMS\Provider; + +use function array_intersect; +use OCA\TwoFactorGateway\AppInfo\Application; +use OCA\TwoFactorGateway\Exception\ConfigurationException; +use OCP\IConfig; + +class VoipbusterConfig implements IProviderConfig { + + /** @var IConfig */ + private $config; + + public function __construct(IConfig $config) { + $this->config = $config; + } + + private function getOrFail(string $key): string { + $val = $this->config->getAppValue(Application::APP_NAME, $key, null); + if (is_null($val)) { + throw new ConfigurationException(); + } + return $val; + } + + public function getUser(): string { + return $this->getOrFail('voipbuster_api_username'); + } + + public function setUser(string $user) { + $this->config->setAppValue(Application::APP_NAME, 'voipbuster_api_username', $user); + } + + public function getPassword(): string { + return $this->getOrFail('voipbuster_api_password'); + } + + public function setPassword(string $password) { + $this->config->setAppValue(Application::APP_NAME, 'voipbuster_api_password', $password); + } + + public function getDid(): string { + return $this->getOrFail('voipbuster_did'); + } + + public function setDid(string $did) { + $this->config->setAppValue(Application::APP_NAME, 'voipbuster_did', $did); + } + + public function isComplete(): bool { + $set = $this->config->getAppKeys(Application::APP_NAME); + $expected = [ + 'voipbuster_api_username', + 'voipbuster_api_password', + 'voipbuster_did', + ]; + return count(array_intersect($set, $expected)) === count($expected); + } +} |