2022-06-09 01:57:34 +12:00
|
|
|
<?php
|
|
|
|
|
2022-12-18 09:45:58 +13:00
|
|
|
require_once __DIR__ . '/../worker.php';
|
|
|
|
|
2022-06-09 01:57:34 +12:00
|
|
|
use Utopia\App;
|
2022-12-18 09:45:58 +13:00
|
|
|
use Utopia\Database\Validator\Authorization;
|
2022-06-09 01:57:34 +12:00
|
|
|
use Utopia\CLI\Console;
|
2022-11-18 21:51:28 +13:00
|
|
|
use Utopia\DSN\DSN;
|
|
|
|
use Utopia\Messaging\Adapter;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\Mock;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\Msg91;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\Telesign;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\TextMagic;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\Twilio;
|
|
|
|
use Utopia\Messaging\Adapters\SMS\Vonage;
|
|
|
|
use Utopia\Messaging\Messages\SMS;
|
2022-12-18 09:45:58 +13:00
|
|
|
use Utopia\Queue\Message;
|
|
|
|
use Utopia\Queue\Server;
|
|
|
|
|
|
|
|
Authorization::disable();
|
|
|
|
Authorization::setDefaultStatus(false);
|
|
|
|
|
|
|
|
$dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER'));
|
|
|
|
$user = $dsn->getUser();
|
|
|
|
$secret = $dsn->getPassword();
|
|
|
|
|
2022-12-18 09:46:34 +13:00
|
|
|
Server::setResource('sms', function () use ($dsn, $user, $secret) {
|
2022-12-18 09:45:58 +13:00
|
|
|
return match ($dsn->getHost()) {
|
|
|
|
'mock' => new Mock($user, $secret), // used for tests
|
|
|
|
'twilio' => new Twilio($user, $secret),
|
|
|
|
'text-magic' => new TextMagic($user, $secret),
|
|
|
|
'telesign' => new Telesign($user, $secret),
|
|
|
|
'msg91' => new Msg91($user, $secret),
|
|
|
|
'vonage' => new Vonage($user, $secret),
|
|
|
|
default => null
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
Server::setResource('execute', function () {
|
|
|
|
return function (string $recipient, string $message, Adapter $sms) {
|
|
|
|
$from = App::getEnv('_APP_SMS_FROM');
|
2022-06-09 01:57:34 +12:00
|
|
|
|
2022-08-15 01:43:41 +12:00
|
|
|
if (empty(App::getEnv('_APP_SMS_PROVIDER'))) {
|
2022-06-09 01:57:34 +12:00
|
|
|
Console::info('Skipped sms processing. No Phone provider has been set.');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-12-18 09:45:58 +13:00
|
|
|
if (empty($from)) {
|
2022-06-29 01:32:59 +12:00
|
|
|
Console::info('Skipped sms processing. No phone number has been set.');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-11-18 21:51:28 +13:00
|
|
|
$message = new SMS(
|
2022-12-18 09:45:58 +13:00
|
|
|
to: [$recipient],
|
|
|
|
content: $message,
|
|
|
|
from: $from,
|
2022-11-18 21:51:28 +13:00
|
|
|
);
|
2022-06-09 01:57:34 +12:00
|
|
|
|
|
|
|
try {
|
2022-12-18 09:45:58 +13:00
|
|
|
$sms->send($message);
|
2022-06-09 01:57:34 +12:00
|
|
|
} catch (\Exception $error) {
|
|
|
|
throw new Exception('Error sending message: ' . $error->getMessage(), 500);
|
|
|
|
}
|
2022-12-18 09:45:58 +13:00
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
$server->job()
|
|
|
|
->inject('message')
|
|
|
|
->inject('execute')
|
|
|
|
->inject('sms')
|
|
|
|
->action(function (Message $message, callable $execute, Adapter $sms) {
|
|
|
|
$payload = $message->getPayload() ?? [];
|
|
|
|
|
|
|
|
if (empty($payload)) {
|
|
|
|
throw new Exception('Missing payload');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($payload['recipient'])) {
|
|
|
|
throw new Exception('Missing recipient');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($payload['message'])) {
|
|
|
|
throw new Exception('Missing message');
|
|
|
|
}
|
|
|
|
|
|
|
|
$execute($payload['recipient'], $payload['message'], $sms);
|
|
|
|
});
|
2022-06-09 01:57:34 +12:00
|
|
|
|
2022-12-18 09:45:58 +13:00
|
|
|
$server->workerStart();
|
|
|
|
$server->start();
|