Coverage for rdak/connection.py: 100%
13 statements
« prev ^ index » next coverage.py v7.6.0, created at 2026-08-03 16:46 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2026-08-03 16:46 +0000
1# SPDX-License-Identifier: GPL-2.0-or-later
2# © 2026, Ansgar 🙀 <ansgar@debian.org>
4"""
5Build authenticated gRPC channels to a dak RPC server.
6"""
8import grpc
10from rdak.config import InstanceConfig
13def tls_options(instance: InstanceConfig) -> list[tuple[str, str]]:
14 """Channel options for TLS, applying the server-name override if set."""
15 if instance.server_name is None:
16 return []
17 return [
18 ("grpc.ssl_target_name_override", instance.server_name),
19 ("grpc.default_authority", instance.server_name),
20 ]
23def channel_credentials(instance: InstanceConfig) -> grpc.ChannelCredentials:
24 """Transport credentials: TLS when enabled, else local (unix socket)."""
25 if instance.use_tls:
26 return grpc.ssl_channel_credentials(
27 root_certificates=instance.ca_certificates()
28 )
29 return grpc.local_channel_credentials(grpc.LocalConnectionType.UDS)
32def connect(instance: InstanceConfig) -> grpc.Channel:
33 """Create a ready-to-use channel with the bearer token attached."""
34 credentials = grpc.composite_channel_credentials(
35 channel_credentials(instance),
36 grpc.access_token_call_credentials(instance.get_token()),
37 )
38 return grpc.secure_channel(
39 instance.address, credentials, options=tls_options(instance)
40 )