-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBroker.py
executable file
·66 lines (53 loc) · 2.12 KB
/
Broker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
import json
import os
# import psycopg2
import re
import subprocess
import time
# from psycopg2 import sql
# Load env vars
with open('config.json') as confFile:
config = json.load(confFile)
# Used to extract JSON output
def capture_command_output(command):
stream = os.popen(command)
output = stream.read().strip()
return output
# Get requesting user
rUser = str(input('What is the username of the person requesting this session?: '))
# XO connection vars
xo = config['xoSettings']['xo']
svcBrokerUser = config['xoSettings']['svcCreds']['svcBrokerUser']
svcBrokerPass = config['xoSettings']['svcCreds']['svcBrokerPass']
vmToClone = config['xoSettings']['vmToClone']
slowClone = config['xoSettings']['slowClone']
# Register service user to XO(A)
subprocess.run('xo-cli register --au --url ' + xo + ' ' + xo + ' ' + svcBrokerUser + ' ' + svcBrokerPass, shell=True)
print(" ")
# Clone VM and change its name to include the username of the requestor
sessionUUID = capture_command_output('xo-cli vm.clone id=' + vmToClone + ' name=vds-' + rUser + ' full_copy=' + slowClone)
subprocess.run('xo-cli vm.start id=' + sessionUUID, shell=True)
sessionVMName = "vds-" + rUser
time.sleep(45)
# Gets the IP Address for the VM
getMainIP = capture_command_output('xo-cli list-objects uuid=' + sessionUUID + ' | grep mainIpAddress')
sessionIP = re.search(r'"mainIpAddress":\s*"([\d.]+)"', getMainIP).group(1)
print(sessionIP)
# vdsRegister = 2 # add VDS to instance to user's Authentik/guac/openrport
# # Connect to postgres db and add entry to user's connections
# conn = psycopg2.connect(
# database = config['dbSettigs']['dbName'],
# user = config['dbSettigs']['dbUser'],
# password = config['dbSettigs']['dbPass'],
# host = config['dbSettings']['dbHost'],
# port = config['dbSettings']['dbPort']
# )
# cur = conn.cursor()
# insertQRY = sql.SQL("""
# INSERT INTO guacamole_connection (connection_name, protocol)
# VALUES (%s, %s)
# RETURNING connection_id;
# """)
# cur.execute(insertQRY, (sessionVMName, config['sessionSettings']['protocol']))
# connection_id = cur.fetchone()[0]