Skip to content

Commit 371db68

Browse files
orgnized codes and add dynamic recv
1 parent 29804ca commit 371db68

File tree

1 file changed

+30
-32
lines changed

1 file changed

+30
-32
lines changed

charon/pkgs/radas_signature_handler.py

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919
import os
2020
import asyncio
2121
import sys
22+
import tempfile
2223
import uuid
2324
from typing import List, Any, Tuple, Callable, Dict
2425
from charon.config import get_config, RadasConfig
2526
from charon.pkgs.oras_client import OrasClient
26-
from proton import SSLDomain, SSLException, Message, Event
27+
from proton import SSLDomain, Message, Event
2728
from proton.handlers import MessagingHandler
28-
from proton.utils import BlockingConnection
29+
from proton.reactor import Container
2930

3031
logger = logging.getLogger(__name__)
3132

@@ -43,6 +44,8 @@ def __init__(self, sign_result_loc: str, request_id: str) -> None:
4344
super().__init__()
4445
self.sign_result_loc = sign_result_loc
4546
self.request_id = request_id
47+
self.conn = None
48+
self.timer_task = None
4649

4750
def on_start(self, event: Event) -> None:
4851
"""
@@ -56,8 +59,21 @@ def on_start(self, event: Event) -> None:
5659
# explicit check to pass the type checker
5760
if rconf is None:
5861
sys.exit(1)
59-
conn = event.container.connect(rconf.umb_target())
60-
event.container.create_receiver(conn, rconf.result_queue())
62+
63+
ssl_domain = SSLDomain(SSLDomain.MODE_CLIENT)
64+
ssl_domain.set_credentials(
65+
rconf.client_ca(),
66+
rconf.client_key(),
67+
rconf.client_key_password()
68+
)
69+
ssl_domain.set_trusted_ca_db(rconf.root_ca())
70+
ssl_domain.set_peer_authentication(SSLDomain.VERIFY_PEER)
71+
72+
self.conn = event.container.connect(
73+
url = rconf.umb_target(),
74+
ssl_domain=ssl_domain
75+
)
76+
self.receiver = event.container.create_receiver(self.conn, rconf.result_queue(), dynamic=True)
6177
logger.info("Listening on %s, queue: %s", rconf.umb_target(), rconf.result_queue())
6278

6379
def on_message(self, event: Event) -> None:
@@ -126,8 +142,8 @@ def sign_in_radas(repo_url: str,
126142
logger.debug("params. repo_url: %s, requester: %s, sign_key: %s, result_path: %s,"
127143
"radas_config: %s", repo_url, requester, sign_key, result_path, radas_config)
128144
request_id = str(uuid.uuid4())
129-
exclude = list(ignore_patterns) if ignore_patterns else []
130-
145+
exclude = ignore_patterns if ignore_patterns else []
146+
131147
payload = {
132148
"request_id": request_id,
133149
"requested_by": requester,
@@ -137,33 +153,15 @@ def sign_in_radas(repo_url: str,
137153
"exclude": exclude
138154
}
139155

140-
try:
141-
ssl_domain = SSLDomain(SSLDomain.MODE_CLIENT)
142-
ssl_domain.set_credentials(
143-
radas_config.client_ca(),
144-
radas_config.client_key(),
145-
radas_config.client_key_password()
146-
)
147-
ssl_domain.set_trusted_ca_db(radas_config.root_ca())
148-
ssl_domain.set_peer_authentication(SSLDomain.VERIFY_PEER)
156+
temp_dir = tempfile.mktemp()
157+
listener = RadasReceiver(temp_dir, json.dumps(payload))
149158

150-
conn = BlockingConnection(radas_config.umb_target(), ssl_domain=ssl_domain)
151-
try:
152-
sender = conn.create_sender(radas_config.request_queue())
153-
message = Message(body=json.dumps(payload))
154-
sender.send(message)
155-
logger.info("Successfully sent signing request ID: %s", request_id)
156-
finally:
157-
conn.close()
158-
159-
except SSLException as e:
160-
logger.error("SSL connection failed: %s", str(e))
161-
sys.exit(1)
162-
except Exception as e:
163-
logger.error("Failed to send signing request: %s", str(e))
164-
sys.exit(1)
165-
166-
# wait for AMQP message to be consumed then get response message from UMB
159+
try:
160+
Container(listener).run()
161+
logger.info("Successfully sent signing request ID: %s", request_id)
162+
finally:
163+
if listener.conn and not listener.conn.closed:
164+
listener.conn.close()
167165

168166

169167
def generate_radas_sign(top_level: str, sign_result_loc: str) -> Tuple[List[str], List[str]]:

0 commit comments

Comments
 (0)