From 881449a1702b5a49905500364e5abc6c9122e56f Mon Sep 17 00:00:00 2001 From: Deon George Date: Fri, 1 Nov 2024 13:01:55 +1100 Subject: [PATCH] Force posting to matrix to use IPv4 resolution --- app/Notifications/Matrix/Echomail.php | 18 ++++++++++++------ composer.json | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/Notifications/Matrix/Echomail.php b/app/Notifications/Matrix/Echomail.php index 2beb611..eef8f0b 100644 --- a/app/Notifications/Matrix/Echomail.php +++ b/app/Notifications/Matrix/Echomail.php @@ -45,12 +45,18 @@ class Echomail extends Matrix $user = sprintf('@%s:%s',$username,config('matrix.server')); + // @todo We need to force IP4 as running clrghouz in a container without a proper IPv6 address is problematic + $matrix = Http::withToken(config('matrix.as_token')) + ->withOptions([ + CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4, + ]); + // Set topic if it is different: - $subject = Http::withToken(config('matrix.as_token')) + $subject = $matrix ->get(sprintf('https://%s/_matrix/client/v3/rooms/%s/state/m.room.topic',config('matrix.server'),$room)); if (($x=preg_replace('/^RE:\s*/i','',$this->o->subject)) !== $subject->json('topic','Message from Matrix')) { - $topic = Http::withToken(config('matrix.as_token')) + $topic = $matrix ->put(sprintf('https://%s/_matrix/client/v3/rooms/%s/state/m.room.topic',config('matrix.server'),$room),[ 'topic'=>$x, ]); @@ -61,7 +67,7 @@ class Echomail extends Matrix $omsg = preg_replace("/\r---.*$/U",'',$this->o->msg); - $msg = Http::withToken(config('matrix.as_token')) + $msg = $matrix ->withQueryParameters(['user_id'=>$user]) ->post(sprintf('https://%s/_matrix/client/v3/rooms/%s/send/m.room.message',config('matrix.server'),$room),[ 'msgtype'=>'m.text', @@ -81,7 +87,7 @@ class Echomail extends Matrix // If the user doesnt exist in matrix yet if (str_starts_with($msg->json('error'),'Application service has not registered this user')) { // Register user - $msg = Http::withToken(config('matrix.as_token')) + $msg = $matrix ->post(sprintf('https://%s/_matrix/client/v3/register',config('matrix.server')),[ 'type'=>'m.login.application_service', 'username'=>$username, @@ -94,7 +100,7 @@ class Echomail extends Matrix // @todo Test that the user has been invited // Invite user - $msg = Http::withToken(config('matrix.as_token')) + $msg = $matrix //->withQueryParameters(['user_id'=>$user]) ->post(sprintf('https://%s/_matrix/client/v3/rooms/%s/invite',config('matrix.server'),$room),[ 'user_id'=>$user, @@ -106,7 +112,7 @@ class Echomail extends Matrix } // Join as user - $msg = Http::withToken(config('matrix.as_token')) + $msg = $matrix ->withQueryParameters(['user_id'=>$user]) ->post(sprintf('https://%s/_matrix/client/v3/rooms/%s/join',config('matrix.server'),$room),[ 'user_id'=>$user, diff --git a/composer.json b/composer.json index b69c651..7819077 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "require": { "php": "^8.2|8.3", "ext-bz2": "*", + "ext-curl": "*", "ext-pcntl": "*", "ext-sockets": "*", "ext-zip": "*",