diff --git a/src/Auth.php b/src/Auth.php index ca0aa59..eb24efa 100644 --- a/src/Auth.php +++ b/src/Auth.php @@ -283,6 +283,6 @@ private function generateCnonce(): string */ public static function encodeCredentials($username, $password): string { - return \md5(\utf8_encode($username . ':mongo:' . $password)); + return \md5($username . ':mongo:' . $password); } } diff --git a/src/Client.php b/src/Client.php index 164a700..9f7ef2e 100644 --- a/src/Client.php +++ b/src/Client.php @@ -7,6 +7,7 @@ use Swoole\Client as SwooleClient; use Swoole\Coroutine\Client as CoroutineClient; use stdClass; +use Swoole\Coroutine; class Client { @@ -78,13 +79,25 @@ public function __construct( int $port, string $user, string $password, - bool $useCoroutine = true + bool $useCoroutine = false ) { $this->id = uniqid('utopia.mongo.client'); $this->database = $database; $this->host = $host; $this->port = $port; + // Only use coroutines if explicitly requested and we're in a coroutine context + if ($useCoroutine) { + try { + $cid = \Swoole\Coroutine::getCid(); + if ($cid === false || $cid < 0) { + $useCoroutine = false; + } + } catch (\Throwable $e) { + $useCoroutine = false; + } + } + $this->client = $useCoroutine ? new CoroutineClient(SWOOLE_SOCK_TCP | SWOOLE_KEEP) : new SwooleClient(SWOOLE_SOCK_TCP | SWOOLE_KEEP);