Compare commits

...
Author SHA1 Message Date
wess c710987909 implementing updated utopia-messaging in messaging worker 2023-08-17 10:56:20 -04:00
3 changed files with 81 additions and 35 deletions
+1
View File
@@ -13,3 +13,4 @@ debug/
app/sdks
dev/yasd_init.php
.phpunit.result.cache
Makefile
+1 -1
View File
@@ -29,7 +29,7 @@ class MailsV1 extends Worker
return;
}
$recipient = $this->args['recipient'];
$subject = $this->args['subject'];
$name = $this->args['name'];
+79 -34
View File
@@ -5,6 +5,8 @@ use Appwrite\Resque\Worker;
use Utopia\App;
use Utopia\CLI\Console;
use Utopia\Messaging\Adapter;
use Utopia\Messaging\Adapters\SMS as SMSAdapter;
use Utopia\Messaging\Adapters\SMS\Mock;
use Utopia\Messaging\Adapters\SMS\Msg91;
use Utopia\Messaging\Adapters\SMS\Telesign;
@@ -13,6 +15,17 @@ use Utopia\Messaging\Adapters\SMS\Twilio;
use Utopia\Messaging\Adapters\SMS\Vonage;
use Utopia\Messaging\Messages\SMS;
use Utopia\Messaging\Adapters\Push as PushAdapter;
use Utopia\Messaging\Adapters\Push\APNS;
use Utopia\Messaging\Adapters\Push\FCM;
use Utopia\Messaging\Messages\Push;
use Utopia\Messaging\Adapters\Email as EmailAdapter;
use Utopia\Messaging\Adapters\Email\Mailgun;
use Utopia\Messaging\Adapters\Email\SendGrid;
use Utopia\Messaging\Messages\Email;
require_once __DIR__ . '/../init.php';
Console::title('Messaging V1 Worker');
@@ -20,7 +33,11 @@ Console::success(APP_NAME . ' messaging worker v1 has started' . "\n");
class MessagingV1 extends Worker
{
protected ?Adapter $sms = null;
protected ?SMSAdapter $sms = null;
protected ?PushAdapter $push = null;
protected ?EmailAdapter $email = null;
protected ?string $from = null;
public function getName(): string
@@ -28,48 +45,76 @@ class MessagingV1 extends Worker
return "mails";
}
public function sms($record): ?SMSAdapter
{
return match ($record->getAttribute('provider')) {
'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
};
}
}
function push($record): ?PushAdapter
{
return match ($record->getAttribute('provider')) {
'apns' => new APNS($user, $secret),
'fcm' => new FCM($user, $secret),
default => null
};
}
function email(): ?EmailAdapter
{
return match ($record->getAttribute('provider')) {
'mailgun' => new Mailgun($user, $secret),
'sendgrid' => new SendGrid($user, $secret),
default => null
};
}
public function init(): void
{
$dsn = new DSN(App::getEnv('_APP_SMS_PROVIDER'));
$user = $dsn->getUser();
$secret = $dsn->getPassword();
$this->sms = 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
};
$this->from = App::getEnv('_APP_SMS_FROM');
}
public function run(): void
{
if (empty(App::getEnv('_APP_SMS_PROVIDER'))) {
Console::info('Skipped sms processing. No Phone provider has been set.');
return;
}
$providerId = $this->args['providerId'];
$providerRecord =
$this
->getConsoleDB()
->getCollection('providers')
->getDocument($providerId);
if (empty($this->from)) {
Console::info('Skipped sms processing. No phone number has been set.');
return;
}
$provider = match ($providerRecord->getAttribute('type')) {//stubbbbbbed.
'sms' => $this->sms($providerRecord),
'push' => $this->push($providerRecord),
'email' => $this->email($providerRecord),
default => null
};
$message = new SMS(
to: [$this->args['recipient']],
content: $this->args['message'],
from: $this->from,
);
// Query for the provider
// switch on provider name
// call function passing needed credentials returns required provider.
try {
$this->sms->send($message);
} catch (\Exception $error) {
throw new Exception('Error sending message: ' . $error->getMessage(), 500);
}
$messageId = $this->args['messageId'];
$message =
$this
->getConsoleDB()
->getCollection('messages')
->getDocument($messageId);
// Get message
// set up message based on provider
// send a message.
$provider->send($message);
}
public function shutdown(): void