1
1
import sys
2
+ import ssl
2
3
from src .version import __version__
3
4
import redis
4
5
from redis import Redis
7
8
from src .common .config import REDIS_CFG
8
9
9
10
11
+ def _get_ssl_cert_reqs (cert_reqs_str : str ):
12
+ """Convert string SSL certificate requirements to SSL constants."""
13
+ if cert_reqs_str == 'required' :
14
+ return ssl .CERT_REQUIRED
15
+ elif cert_reqs_str == 'optional' :
16
+ return ssl .CERT_OPTIONAL
17
+ elif cert_reqs_str == 'none' :
18
+ return ssl .CERT_NONE
19
+ else :
20
+ # Default to required for safety
21
+ return ssl .CERT_REQUIRED
22
+
23
+
10
24
class RedisConnectionManager :
11
25
_instance : Optional [Redis ] = None
12
26
@@ -22,15 +36,22 @@ def get_connection(cls, decode_responses=True) -> Redis:
22
36
"username" : REDIS_CFG ["username" ],
23
37
"password" : REDIS_CFG ["password" ],
24
38
"ssl" : REDIS_CFG ["ssl" ],
25
- "ssl_ca_path" : REDIS_CFG ["ssl_ca_path" ],
26
- "ssl_keyfile" : REDIS_CFG ["ssl_keyfile" ],
27
- "ssl_certfile" : REDIS_CFG ["ssl_certfile" ],
28
- "ssl_cert_reqs" : REDIS_CFG ["ssl_cert_reqs" ],
29
- "ssl_ca_certs" : REDIS_CFG ["ssl_ca_certs" ],
30
39
"decode_responses" : decode_responses ,
31
40
"lib_name" : f"redis-py(mcp-server_v{ __version__ } )" ,
32
- "max_connections_per_node" : 10
41
+ "max_connections_per_node" : 10
33
42
}
43
+
44
+ # Add SSL parameters only if they are not None
45
+ if REDIS_CFG ["ssl_ca_path" ]:
46
+ connection_params ["ssl_ca_path" ] = REDIS_CFG ["ssl_ca_path" ]
47
+ if REDIS_CFG ["ssl_keyfile" ]:
48
+ connection_params ["ssl_keyfile" ] = REDIS_CFG ["ssl_keyfile" ]
49
+ if REDIS_CFG ["ssl_certfile" ]:
50
+ connection_params ["ssl_certfile" ] = REDIS_CFG ["ssl_certfile" ]
51
+ if REDIS_CFG ["ssl_ca_certs" ]:
52
+ connection_params ["ssl_ca_certs" ] = REDIS_CFG ["ssl_ca_certs" ]
53
+ if REDIS_CFG ["ssl_cert_reqs" ]:
54
+ connection_params ["ssl_cert_reqs" ] = _get_ssl_cert_reqs (REDIS_CFG ["ssl_cert_reqs" ])
34
55
else :
35
56
redis_class : Type [Union [Redis , RedisCluster ]] = redis .Redis
36
57
connection_params = {
@@ -40,15 +61,22 @@ def get_connection(cls, decode_responses=True) -> Redis:
40
61
"username" : REDIS_CFG ["username" ],
41
62
"password" : REDIS_CFG ["password" ],
42
63
"ssl" : REDIS_CFG ["ssl" ],
43
- "ssl_ca_path" : REDIS_CFG ["ssl_ca_path" ],
44
- "ssl_keyfile" : REDIS_CFG ["ssl_keyfile" ],
45
- "ssl_certfile" : REDIS_CFG ["ssl_certfile" ],
46
- "ssl_cert_reqs" : REDIS_CFG ["ssl_cert_reqs" ],
47
- "ssl_ca_certs" : REDIS_CFG ["ssl_ca_certs" ],
48
64
"decode_responses" : decode_responses ,
49
65
"lib_name" : f"redis-py(mcp-server_v{ __version__ } )" ,
50
66
"max_connections" : 10
51
67
}
68
+
69
+ # Add SSL parameters only if they are not None
70
+ if REDIS_CFG ["ssl_ca_path" ]:
71
+ connection_params ["ssl_ca_path" ] = REDIS_CFG ["ssl_ca_path" ]
72
+ if REDIS_CFG ["ssl_keyfile" ]:
73
+ connection_params ["ssl_keyfile" ] = REDIS_CFG ["ssl_keyfile" ]
74
+ if REDIS_CFG ["ssl_certfile" ]:
75
+ connection_params ["ssl_certfile" ] = REDIS_CFG ["ssl_certfile" ]
76
+ if REDIS_CFG ["ssl_ca_certs" ]:
77
+ connection_params ["ssl_ca_certs" ] = REDIS_CFG ["ssl_ca_certs" ]
78
+ if REDIS_CFG ["ssl_cert_reqs" ]:
79
+ connection_params ["ssl_cert_reqs" ] = _get_ssl_cert_reqs (REDIS_CFG ["ssl_cert_reqs" ])
52
80
53
81
cls ._instance = redis_class (** connection_params )
54
82
0 commit comments