use one module for the complete ES communication
This commit is contained in:
		
							
								
								
									
										52
									
								
								aman/com/Euroscope.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								aman/com/Euroscope.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import glob
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import zmq
 | 
				
			||||||
 | 
					from zmq.asyncio import Context
 | 
				
			||||||
 | 
					import zmq.auth
 | 
				
			||||||
 | 
					from zmq.auth.asyncio import AsyncioAuthenticator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from aman.config import Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# @brief Receives and sends messages to EuroScope plugins
 | 
				
			||||||
 | 
					class Euroscope:
 | 
				
			||||||
 | 
					    # @brief Initializes the ZMQ socket
 | 
				
			||||||
 | 
					    # @param[in] config The server configuration
 | 
				
			||||||
 | 
					    def __init__(self, config : Server.Server):
 | 
				
			||||||
 | 
					        self.context = Context.instance()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # initialize the authentication module
 | 
				
			||||||
 | 
					        authLocation = (
 | 
				
			||||||
 | 
					            str(config.ClientKeyPath)
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        self.auth = AsyncioAuthenticator(context = self.context)
 | 
				
			||||||
 | 
					        self.auth.configure_curve(domain='*', location = authLocation)
 | 
				
			||||||
 | 
					        self.auth.allow('127.0.0.1')
 | 
				
			||||||
 | 
					        self.auth.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # read the certificates
 | 
				
			||||||
 | 
					        keyPairPath = glob.glob(os.path.join(config.ServerKeyPath, '*.key_secret'))
 | 
				
			||||||
 | 
					        if 1 != len(keyPairPath):
 | 
				
			||||||
 | 
					            sys.stderr.write('No public-private keypair found for the server certificate')
 | 
				
			||||||
 | 
					            sys.exit(-1)
 | 
				
			||||||
 | 
					        keyPair = zmq.auth.load_certificate(keyPairPath[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # initialize the receiver
 | 
				
			||||||
 | 
					        self.receiverSocket = self.context.socket(zmq.ROUTER)
 | 
				
			||||||
 | 
					        self.receiverSocket.setsockopt(zmq.CURVE_PUBLICKEY, keyPair[0])
 | 
				
			||||||
 | 
					        self.receiverSocket.setsockopt(zmq.CURVE_SECRETKEY, keyPair[1])
 | 
				
			||||||
 | 
					        self.receiverSocket.setsockopt(zmq.CURVE_SERVER, True)
 | 
				
			||||||
 | 
					        self.receiverSocket.bind('tcp://' + config.Address + ':' + str(config.PortReceiver))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # initialize the notification
 | 
				
			||||||
 | 
					        self.notificationSocket = self.context.socket(zmq.DEALER)
 | 
				
			||||||
 | 
					        self.notificationSocket.setsockopt(zmq.CURVE_PUBLICKEY, keyPair[0])
 | 
				
			||||||
 | 
					        self.notificationSocket.setsockopt(zmq.CURVE_SECRETKEY, keyPair[1])
 | 
				
			||||||
 | 
					        self.notificationSocket.setsockopt(zmq.CURVE_SERVER, True)
 | 
				
			||||||
 | 
					        self.notificationSocket.bind('tcp://' + config.Address + ':' + str(config.PortNotification))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __exit__(self, *_exc):
 | 
				
			||||||
 | 
					        self.auth.stop()
 | 
				
			||||||
@@ -1,38 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env python
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import zmq
 | 
					 | 
				
			||||||
from zmq.asyncio import Context
 | 
					 | 
				
			||||||
import zmq.auth
 | 
					 | 
				
			||||||
from zmq.auth.asyncio import AsyncioAuthenticator
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from pathlib import Path
 | 
					 | 
				
			||||||
from typing import Union, Optional
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# @brief Receives the information of EuroScope
 | 
					 | 
				
			||||||
def EuroscopeReceiver():
 | 
					 | 
				
			||||||
    # @brief Initializes the ZMQ socket
 | 
					 | 
				
			||||||
    # @param[in] address The server address
 | 
					 | 
				
			||||||
    # @param[in] serverKeyPath Path to the server's keypair
 | 
					 | 
				
			||||||
    # @param[in] clientKeys Path to the client's keypairs
 | 
					 | 
				
			||||||
    def __init__(self, address: str, serverKeyPath: Union[str, Path], clientKeys: Union[str, Path]):
 | 
					 | 
				
			||||||
        self.context = Context.instance()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # initialize the authentication module
 | 
					 | 
				
			||||||
        authLocation = (
 | 
					 | 
				
			||||||
            str(clientKeys)
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        self.auth = AsyncioAuthenticator(context = self.context)
 | 
					 | 
				
			||||||
        self.auth.configure_curve(domain='*', location = authLocation)
 | 
					 | 
				
			||||||
        self.auth.allow('127.0.0.1')
 | 
					 | 
				
			||||||
        self.auth.start()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # initialize the socket
 | 
					 | 
				
			||||||
        self.socket = self.context.socket(zmq.REP)
 | 
					 | 
				
			||||||
        keys = zmq.auth.load_certificate(serverKeyPath)
 | 
					 | 
				
			||||||
        self.socket.setsockopt(zmq.CURVE_PUBLICKEY, keys[0])
 | 
					 | 
				
			||||||
        self.socket.setsockopt(zmq.CURVE_SECRETKEY, keys[1])
 | 
					 | 
				
			||||||
        self.socket.setsockopt(zmq.CURVE_SERVER, True)
 | 
					 | 
				
			||||||
        self.socket.bind(address)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __exit__(self, *_exc):
 | 
					 | 
				
			||||||
        self.auth.stop()
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user