fixing various bugs
This commit is contained in:
parent
24eb11bef3
commit
73e1eba43a
3 changed files with 37 additions and 16 deletions
30
clientsdb.py
30
clientsdb.py
|
@ -21,15 +21,17 @@ def addclient(vmid, vmname, clientid, clientname, clientemail, vmpass):
|
|||
ioconfig.logger.info('client[{}]> does not exist. creating...'.format(clientid))
|
||||
#generate password and send it to the client
|
||||
newpass = utils.genpassword(30)
|
||||
ioconfig.logger.info('client[{}]> initial password is: {}'.format(clientid, newpass))
|
||||
salt = bcrypt.gensalt()
|
||||
b_newpass = newpass.encode('utf-8')
|
||||
encpasswd = bcrypt.hashpw(b_newpass, salt).decode('utf-8')
|
||||
vcard = { 'name':str(clientname), 'email':str(clientemail), 'encpasswd':str(encpasswd) }
|
||||
newclient = { str(clientid):vcard }
|
||||
clientsdb.update(newclient)
|
||||
#TODO: 1. Send initial email to the user as we will use the internal auth from now on.
|
||||
#TODO: 2. Sync with proxmaster-admin database (shell command could be used for this one)
|
||||
ioconfig.logger.info('client[{}]> vmid {} is now owned by {} ({})'.format(clientemail, vmid, clientid, clientname))
|
||||
#Send initial email to the user as we will use the internal auth from now on.
|
||||
###utils.sendmail(clientemail, 'W{} logged in.'.format)
|
||||
#TODO: Sync with proxmaster-admin database (shell command could be used for this one)
|
||||
ioconfig.logger.info('client[{}]> vmid {} is now owned by {} ({})'.format(clientid, vmid, clientemail, clientname))
|
||||
|
||||
#create initial vm template
|
||||
vmdata = { 'hostname':str(vmname), 'vmid':str(vmid), 'ownerid':str(clientid) }
|
||||
|
@ -49,16 +51,16 @@ def setencpasswd(clientemail, newpass):
|
|||
c_id = str(path[0])
|
||||
#check the returned path with forward query
|
||||
query = clientsdb[c_id]['email']
|
||||
ioconfig.logger.info('client[{}]> found. path={}'.format(clientemail, str(path)))
|
||||
#ioconfig.logger.info('client[{}]> path={}'.format(c_id, str(path)))
|
||||
except:
|
||||
raise
|
||||
|
||||
if query != clientemail:
|
||||
ioconfig.logger.critical('clients.db> test query returns different vmname! check clients db for consistency!')
|
||||
ioconfig.logger.critical('clients> test query returns different vmname! check clients db for consistency!')
|
||||
raise
|
||||
else:
|
||||
clientsdb[c_id]['encpasswd'] = encpasswd
|
||||
ioconfig.logger.info('client[{}]> password changed!'.format(clientemail))
|
||||
ioconfig.logger.info('client[{}]> {} password changed!'.format(c_id, clientemail))
|
||||
writeclientsdb(clientsdb)
|
||||
#TODO: Send new email to the client to notify the password change. This time sending the password in plain text is not needed.
|
||||
|
||||
|
@ -71,11 +73,10 @@ def validate(clientemail, password):
|
|||
clientsdb = readclientsdb()
|
||||
path = utils.get_path(clientsdb, clientemail)
|
||||
c_id = str(path[0])
|
||||
#check the returned path with forward query
|
||||
ioconfig.logger.info('client[{}]> found. path={}'.format(clientemail, str(path)))
|
||||
#ioconfig.logger.info('client[{}]> path={}'.format(c_id, str(path)))
|
||||
except:
|
||||
raise
|
||||
ioconfig.logger.warning('clients.db> {} was not found in the database!'.format(clientemail))
|
||||
ioconfig.logger.warning('clients> {} was not found in the database!'.format(clientemail))
|
||||
#log bad ips here...
|
||||
return False
|
||||
|
||||
|
@ -86,12 +87,12 @@ def validate(clientemail, password):
|
|||
|
||||
if (hmac.compare_digest(bcrypt.hashpw(b_srvpass, b_encpass), b_encpass)):
|
||||
#login successful
|
||||
ioconfig.logger.info('client[{}]> logged in successfully'.format(clientemail))
|
||||
ioconfig.logger.info('client[{}]> {} logged in successfully'.format(c_id, clientemail))
|
||||
#TODO: Notify admin
|
||||
#3. generate vmlist to return the owned ids to the client.
|
||||
return clientvms(clientsdb[c_id])
|
||||
else:
|
||||
ioconfig.logger.warning('clients> {} ACCESS DENIED!'.format(vmid))
|
||||
ioconfig.logger.warning('clients> {} ACCESS DENIED!'.format(clientemail))
|
||||
#cant compare password
|
||||
#TODO: Log attempts and block.
|
||||
return {}
|
||||
|
@ -102,8 +103,9 @@ def clientvms(vmlist):
|
|||
#clear unused objects. perhaps there is a better way to do this but im kinda anxious today...
|
||||
vmlist.pop('name')
|
||||
vmlist.pop('email')
|
||||
vmlist.pop('encpasswd')
|
||||
|
||||
response = []
|
||||
response = {}
|
||||
for vmid,data in vmlist.items():
|
||||
response = { str(vmid):data }
|
||||
return response
|
||||
|
@ -120,7 +122,7 @@ def vmowner(vmid, vmname, verbose):
|
|||
clientid = '0' #unknown owner
|
||||
clientname = 'unknown'
|
||||
if verbose:
|
||||
ioconfig.logger.info('clients> the owner of ' + str(vmid) + ' (' + vmname + ') is ' + str(clientid) + ' (' + clientname + ')')
|
||||
ioconfig.logger.info('client[{}]> {} is the owner of {} ({})'.fotmat(str(clientid), clientname, str(vmid), vmname))
|
||||
return clientid
|
||||
|
||||
|
||||
|
@ -145,5 +147,7 @@ def writeclientsdb(clientsdb):
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
#setencpasswd('abc@xyz.com', 'todos')
|
||||
setencpasswd('daniel@deflax.net', 'todos')
|
||||
print(validate('daniel@deflax.net', 'todos'))
|
||||
|
||||
|
|
6
grid.py
6
grid.py
|
@ -50,7 +50,7 @@ def sync(cached=True):
|
|||
real_slave = { "id":slave_id, "slave":slave_name, "masterip":slave_masterip, "password":decoded_password }
|
||||
optional_slave = {}
|
||||
cache_file = 'cache-slave-' + slave_id + '.json'
|
||||
prefix = 'cache> [' + slave_id + '] '
|
||||
prefix = 'cache> [' + slave_name + '] '
|
||||
|
||||
# check if slave is in current region and include it in current dict if it is
|
||||
if slave_regionid == region_id:
|
||||
|
@ -168,7 +168,7 @@ def query_region(region_name):
|
|||
|
||||
for region in all_regions:
|
||||
if grid_data[region]['region'] == region_name:
|
||||
logger.info('region[{}]> found: id={}'.format(region_name, region))
|
||||
logger.info('region[{}]> region id={}'.format(region_name, region))
|
||||
return grid_data[region]['id']
|
||||
break
|
||||
logger.error('grid> cant find region ' + region_name)
|
||||
|
@ -342,7 +342,7 @@ def query_vm(req_vmid):
|
|||
logger.error('vm[{}]> type is unknown!'.format(vm_id))
|
||||
raise
|
||||
|
||||
logger.info('vm[{}]> type {} found. path={} '.format(target, vm_type, str(path)))
|
||||
logger.info('vm[{}]> type={} path={}'.format(target, vm_type, str(path)))
|
||||
|
||||
return slave_id, vm_type
|
||||
|
||||
|
|
17
utils.py
17
utils.py
|
@ -89,3 +89,20 @@ def chained_get(dct, *keys):
|
|||
return functools.reduce(getter, keys, dct)
|
||||
|
||||
|
||||
def sendmail(FROM,TO,SUBJECT,TEXT,SERVER):
|
||||
import smtplib
|
||||
"""this is some test documentation in the function"""
|
||||
message = """\
|
||||
From: %s
|
||||
To: %s
|
||||
Subject: %s
|
||||
%s
|
||||
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
|
||||
# Send the mail
|
||||
server = smtplib.SMTP(SERVER)
|
||||
"New part"
|
||||
server.starttls()
|
||||
#server.login('username', 'password')
|
||||
server.sendmail(FROM, TO, message)
|
||||
server.quit()
|
||||
|
||||
|
|
Loading…
Reference in a new issue