Skip to content

Commit 048b4bf

Browse files
committed
setup connectionpool to correctly configure ssl based on driver config
1 parent 0a627d9 commit 048b4bf

File tree

5 files changed

+30
-12
lines changed

5 files changed

+30
-12
lines changed

src/Bolt/BoltConnectionPool.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Laudis\Neo4j\Databags\DriverConfiguration;
2929
use Laudis\Neo4j\Databags\SessionConfiguration;
3030
use Laudis\Neo4j\Enum\ConnectionProtocol;
31+
use Laudis\Neo4j\Enum\SslMode;
3132
use Laudis\Neo4j\Neo4j\RoutingTable;
3233
use Psr\Http\Message\UriInterface;
3334
use Throwable;
@@ -44,6 +45,9 @@ final class BoltConnectionPool implements ConnectionPoolInterface
4445
private static array $connectionCache = [];
4546
private DriverConfiguration $driverConfig;
4647

48+
/**
49+
* @psalm-external-mutation-free
50+
*/
4751
public function __construct(DriverConfiguration $driverConfig)
4852
{
4953
$this->driverConfig = $driverConfig;
@@ -98,9 +102,17 @@ public function acquire(
98102

99103
private function configureSsl(UriInterface $uri, UriInterface $server, StreamSocket $socket, ?RoutingTable $table): void
100104
{
101-
$scheme = $uri->getScheme();
102-
$explosion = explode('+', $scheme, 2);
103-
$sslConfig = $explosion[1] ?? '';
105+
$sslMode = $this->driverConfig->getSslConfiguration()->getMode();
106+
$sslConfig = '';
107+
if ($sslMode === SslMode::FROM_URL()) {
108+
$scheme = $uri->getScheme();
109+
$explosion = explode('+', $scheme, 2);
110+
$sslConfig = $explosion[1] ?? '';
111+
} elseif ($sslMode === SslMode::ENABLE()) {
112+
$sslConfig = 's';
113+
} elseif ($sslMode === SslMode::ENABLE_WITH_SELF_SIGNED()) {
114+
$sslConfig = 'ssc';
115+
}
104116

105117
if (str_starts_with($sslConfig, 's')) {
106118
// We have to pass a different host when working with ssl on aura.
@@ -118,7 +130,7 @@ private function configureSsl(UriInterface $uri, UriInterface $server, StreamSoc
118130
private function enableSsl(string $host, string $sslConfig, StreamSocket $sock): void
119131
{
120132
$options = [
121-
'verify_peer' => true,
133+
'verify_peer' => $this->driverConfig->getSslConfiguration()->isVerifyPeer(),
122134
'peer_name' => $host,
123135
];
124136
if (!filter_var($host, FILTER_VALIDATE_IP)) {

src/Bolt/BoltDriver.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,14 @@ public static function create($uri, ?DriverConfiguration $configuration = null,
9191
}
9292

9393
$socketTimeout ??= TransactionConfiguration::DEFAULT_TIMEOUT;
94+
$configuration ??= DriverConfiguration::default();
9495

9596
if ($formatter !== null) {
9697
return new self(
9798
$uri,
9899
$authenticate ?? Authenticate::fromUrl(),
99-
new BoltConnectionPool(),
100-
$configuration ?? DriverConfiguration::default(),
100+
new BoltConnectionPool($configuration),
101+
$configuration,
101102
$formatter,
102103
$socketTimeout
103104
);
@@ -106,8 +107,8 @@ public static function create($uri, ?DriverConfiguration $configuration = null,
106107
return new self(
107108
$uri,
108109
$authenticate ?? Authenticate::fromUrl(),
109-
new BoltConnectionPool(),
110-
$configuration ?? DriverConfiguration::default(),
110+
new BoltConnectionPool($configuration),
111+
$configuration,
111112
OGMFormatter::create(),
112113
$socketTimeout
113114
);

src/Enum/SslMode.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
* @method static self ENABLE()
2727
* @method static self DISABLE()
2828
* @method static self FROM_URL()
29+
* @method static self ENABLE_WITH_SELF_SIGNED()
2930
*
3031
* @extends TypedEnum<string>
3132
*
@@ -36,6 +37,7 @@
3637
final class SslMode extends TypedEnum implements JsonSerializable
3738
{
3839
private const ENABLE = 'enable';
40+
private const ENABLE_WITH_SELF_SIGNED = 'enable_with_self_signed';
3941
private const DISABLE = 'disable';
4042
private const FROM_URL = 'from_url';
4143

src/Neo4j/Neo4jDriver.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,14 @@ public static function create($uri, ?DriverConfiguration $configuration = null,
9292
}
9393

9494
$socketTimeout ??= TransactionConfiguration::DEFAULT_TIMEOUT;
95+
$configuration ??= DriverConfiguration::default();
9596

9697
if ($formatter !== null) {
9798
return new self(
9899
$uri,
99100
$authenticate ?? Authenticate::fromUrl(),
100-
new Neo4jConnectionPool(new BoltConnectionPool()),
101-
$configuration ?? DriverConfiguration::default(),
101+
new Neo4jConnectionPool(new BoltConnectionPool($configuration)),
102+
$configuration,
102103
$formatter,
103104
$socketTimeout
104105
);
@@ -107,8 +108,8 @@ public static function create($uri, ?DriverConfiguration $configuration = null,
107108
return new self(
108109
$uri,
109110
$authenticate ?? Authenticate::fromUrl(),
110-
new Neo4jConnectionPool(new BoltConnectionPool()),
111-
$configuration ?? DriverConfiguration::default(),
111+
new Neo4jConnectionPool(new BoltConnectionPool($configuration)),
112+
$configuration,
112113
OGMFormatter::create(),
113114
$socketTimeout
114115
);

tests/Unit/BoltCypherFormatterTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Bolt\structures\UnboundRelationship;
2121
use Laudis\Neo4j\Common\BoltConnection;
2222
use Laudis\Neo4j\Databags\DatabaseInfo;
23+
use Laudis\Neo4j\Databags\DriverConfiguration;
2324
use Laudis\Neo4j\Enum\AccessMode;
2425
use Laudis\Neo4j\Enum\ConnectionProtocol;
2526
use Laudis\Neo4j\Formatter\BasicFormatter;
@@ -95,6 +96,7 @@ private function getConnection(): BoltConnection
9596
ConnectionProtocol::BOLT_V43(),
9697
AccessMode::READ(),
9798
new DatabaseInfo(''),
99+
DriverConfiguration::default(),
98100
static fn () => new Bolt($connection),
99101
);
100102
}

0 commit comments

Comments
 (0)