def initialize_rabbitmq_user(user): """ This function is used when a new provider registers in the network. It adds a new user in RabbitMQ and sets their permissions. :param user: The newly registered user """ # TODO: passwords have a pattern for all users. This needs to be changed. password = user.username + '_mqtt' api = AdminAPI(url='http://' + RABBITMQ_HOST + ':' + RABBITMQ_MANAGEMENT_PORT, auth=(RABBITMQ_USER, RABBITMQ_PASS)) api.create_user(user.username, password) # process = subprocess.Popen(['sudo', 'rabbitmqctl', 'add_user', user.username, password], # stdout=subprocess.PIPE, universal_newlines=True) # stdout, stderr = process.communicate() # print(stdout) permission = "^(" + user.username + ".*|amq.default)$" api.create_user_permission(user.username, '/', permission, permission, permission)
class RecSystemsManager: def __init__(self, host='localhost', username='******', password='******', queuename='testqueue'): self.api = AdminAPI(url='http://' + host + ':15672', auth=('guest', 'guest')) self.host = host self.cr = pika.PlainCredentials(username=username, password=password) self.conn = pika.BlockingConnection(pika.ConnectionParameters(self.host, credentials=self.cr)) self.chann = self.conn.channel() self.queue = self.chann.queue_declare(queuename, durable=True) self.routing_key = queuename def subscribeSystem(self, teamname, system, passwd): self.api.create_vhost('second_vhost', tracing=True) self.api.create_user(teamname, passwd) self.api.create_user_permission(teamname, 'second_vhost') # Include SQL Database authentication here self.chann.queue_declare(teamname + '_' + system + '_' + 'rec_requests', durable=True) self.chann.queue_declare(teamname + '_' + system + '_' + 'user_assign', durable=True) self.chann.queue_declare(teamname + '_' + system + '_' + 'news_recs', durable=True) self.chann.queue_declare(teamname + '_' + system + '_' + 'user_data', durable=True) self.chann.queue_declare(teamname + '_' + system + '_' + 'news_request', durable=True) def createQueue(self, name, durable): self.chann.queue_declare(name, durable)
def create_project_user_and_vhost(project_id): secrets = get_project_secrets(project_id) hidden_secrets = get_project_hidden_secrets(project_id) # connect to RabbitMQ management api rabbit_api = AdminAPI(url=f'http://carrier-rabbit:15672', auth=(hidden_secrets["rabbit_user"], hidden_secrets["rabbit_password"])) # prepare user credentials user = f"rabbit_user_{project_id}" password = password_generator() vhost = f"project_{project_id}_vhost" # create project user and vhost rabbit_api.create_vhost(vhost) rabbit_api.create_user(user, password) rabbit_api.create_user_permission(user, vhost) # set project secrets secrets["rabbit_project_user"] = user secrets["rabbit_project_password"] = password secrets["rabbit_project_vhost"] = vhost set_project_secrets(project_id, secrets)