Skip to content

Commit a17358e

Browse files
committed
RDBC-790 Working Secured RavenDB Embedded Server
1 parent 170ae9a commit a17358e

File tree

5 files changed

+49
-6
lines changed

5 files changed

+49
-6
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/.idea
22
/test.py
33
/dist
4-
/ravendb-embedded.egg-info
4+
/ravendb_embedded.egg-info
55
/ravendb_embedded/target
66
*.pyc
77
*.log

ravendb_embedded/embedded_server.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def start_server(self, options_param: ServerOptions = None) -> None:
6767

6868
if options.security is not None:
6969
self.client_pem_certificate_path = options.security.client_pem_certificate_path
70-
self.trust_store_path = options.security.trust_store_path
70+
self.trust_store_path = options.security.ca_certificate_path
7171

7272
start_server.get_value()
7373

@@ -78,8 +78,9 @@ def _initialize_document_store(self, database_name, options):
7878
server_url = self.get_server_uri()
7979

8080
store = DocumentStore(server_url, database_name)
81-
store.certificate = self.client_pem_certificate_path
82-
store.trust_store = self.trust_store_path
81+
if self.client_pem_certificate_path:
82+
store.certificate_pem_path = self.client_pem_certificate_path
83+
store.trust_store_path = self.trust_store_path
8384
store.conventions = options.conventions
8485

8586
store.add_after_close(lambda: self.document_stores.pop(database_name))

ravendb_embedded/options.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def __init__(self):
2727
self.server_pfx_certificate_path: Optional[str] = None
2828
self.server_pfx_certificate_password: Optional[str] = None
2929
self.client_pem_certificate_path: Optional[str] = None
30-
self.trust_store_path: Optional[str] = None
30+
self.ca_certificate_path: Optional[str] = None
3131
self.certificate_exec: Optional[str] = None
3232
self.certificate_arguments: Optional[str] = None
3333

ravendb_embedded/raven_server_runner.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ def run(options: ServerOptions) -> subprocess.Popen:
8585
f"{CommandLineArgumentEscaper.escape_single_arg(options.security.certificate_arguments)}",
8686
]
8787
)
88-
# todo : test this case
8988
if options.security.client_pem_certificate_path:
9089
with open(options.security.client_pem_certificate_path, "rb") as cert_file:
9190
cert_data = cert_file.read()

tests/test_secured_basic.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import shutil
2+
import tempfile
3+
from pathlib import Path
4+
from unittest import TestCase
5+
6+
from ravendb_embedded.embedded_server import EmbeddedServer
7+
from ravendb_embedded.options import ServerOptions, DatabaseOptions
8+
from ravendb_embedded.provide import CopyServerFromNugetProvider
9+
from tests import Person
10+
11+
12+
class TestSecuredBasic(TestCase):
13+
def test_secured_embedded(self):
14+
SERVER_CERTIFICATE_LOCATION = "C:\\RavenDB Clients\\Https\\server.pfx"
15+
CA_CERTIFICATE_LOCATION = "C:\\RavenDB Clients\\Https\\ca.crt"
16+
CLIENT_CERTIFICATE_LOCATION = "C:\\RavenDB Clients\\Https\\python.pem"
17+
temp_dir = tempfile.mkdtemp()
18+
try:
19+
with EmbeddedServer() as embedded:
20+
server_options = ServerOptions()
21+
server_options.secured(
22+
SERVER_CERTIFICATE_LOCATION,
23+
CLIENT_CERTIFICATE_LOCATION,
24+
ca_certificate_path=CA_CERTIFICATE_LOCATION,
25+
)
26+
27+
server_options.target_server_location = str(Path(temp_dir, "RavenDBServer"))
28+
server_options.data_directory = str(Path(temp_dir, "RavenDB"))
29+
server_options.logs_path = str(Path(temp_dir, "Logs"))
30+
server_options.provider = CopyServerFromNugetProvider()
31+
embedded.start_server(server_options)
32+
33+
database_options = DatabaseOptions.from_database_name("Test")
34+
35+
with embedded.get_document_store_from_options(database_options) as store:
36+
with store.open_session() as session:
37+
person = Person()
38+
person.name = "Gracjan"
39+
40+
session.store(person, "people/1")
41+
session.save_changes()
42+
finally:
43+
shutil.rmtree(temp_dir)

0 commit comments

Comments
 (0)