2020-05-10 23:59:30 +00:00
|
|
|
|
|
|
|
from nanoid import generate
|
|
|
|
|
|
|
|
|
|
|
|
class DBModel:
|
|
|
|
def __init__(self, connection, cursor):
|
|
|
|
self.connection = connection
|
|
|
|
self.cursor = cursor
|
|
|
|
|
|
|
|
def login(self, email):
|
|
|
|
self.cursor.execute("SELECT * FROM accounts WHERE email = %s", (email, ))
|
|
|
|
if len(self.cursor.fetchall()) == 0:
|
|
|
|
self.cursor.execute("INSERT INTO accounts (email) VALUES (%s)", (email, ))
|
|
|
|
|
|
|
|
self.cursor.execute("SELECT token FROM login_tokens WHERE email = %s", (email, ))
|
|
|
|
if len(self.cursor.fetchall()) > 2:
|
|
|
|
return None
|
|
|
|
|
|
|
|
token = generate()
|
|
|
|
self.cursor.execute("INSERT INTO login_tokens (email, token) VALUES (%s, %s)", (email, token))
|
|
|
|
self.connection.commit()
|
|
|
|
|
|
|
|
return token
|
|
|
|
|
2020-05-11 06:47:14 +00:00
|
|
|
def consume_token(self, token):
|
2020-05-10 23:59:30 +00:00
|
|
|
self.cursor.execute("SELECT email FROM login_tokens WHERE token = %s", (token, ))
|
|
|
|
rows = self.cursor.fetchall()
|
|
|
|
if len(rows) > 0:
|
|
|
|
email = rows[0][0]
|
|
|
|
self.cursor.execute("DELETE FROM login_tokens WHERE email = %s", (email, ))
|
|
|
|
self.connection.commit()
|
|
|
|
return email
|
2020-05-11 01:23:00 +00:00
|
|
|
return None
|
|
|
|
|
2020-05-11 06:47:14 +00:00
|
|
|
def all_vm_ids(self,):
|
2020-05-11 01:23:00 +00:00
|
|
|
self.cursor.execute("SELECT id FROM vms")
|
2020-05-11 20:13:20 +00:00
|
|
|
return list(map(lambda x: x[0], self.cursor.fetchall()))
|
2020-05-11 06:47:14 +00:00
|
|
|
|
|
|
|
def operating_systems_dict(self,):
|
|
|
|
self.cursor.execute("SELECT id, template_image_file_name, description FROM os_images")
|
|
|
|
|
|
|
|
operatingSystems = dict()
|
|
|
|
for row in self.cursor.fetchall():
|
|
|
|
operatingSystems[row[0]] = dict(template_image_file_name=row[1], description=row[2])
|
|
|
|
|
|
|
|
return operatingSystems
|
|
|
|
|
|
|
|
def vm_sizes_dict(self,):
|
|
|
|
self.cursor.execute("SELECT id, dollars_per_month, vcpus, memory_mb, bandwidth_gb_per_month FROM vm_sizes")
|
|
|
|
|
|
|
|
vmSizes = dict()
|
|
|
|
for row in self.cursor.fetchall():
|
|
|
|
vmSizes[row[0]] = dict(dollars_per_month=row[1], vcpus=row[2], memory_mb=row[3], bandwidth_gb_per_month=row[4])
|
|
|
|
|
|
|
|
return vmSizes
|
|
|
|
|
|
|
|
def list_ssh_public_keys_for_account(self, email):
|
2020-05-11 16:57:39 +00:00
|
|
|
self.cursor.execute("SELECT name, content, created FROM ssh_public_keys WHERE email = %s", (email, ))
|
2020-05-11 20:13:20 +00:00
|
|
|
return list(map(
|
2020-05-11 16:57:39 +00:00
|
|
|
lambda x: dict(name=x[0], content=x[1], created=x[2]),
|
2020-05-11 06:47:14 +00:00
|
|
|
self.cursor.fetchall()
|
2020-05-11 20:13:20 +00:00
|
|
|
))
|
2020-05-11 06:47:14 +00:00
|
|
|
|
2020-05-11 16:57:39 +00:00
|
|
|
def ssh_public_key_name_exists(self, email, name):
|
|
|
|
self.cursor.execute( "SELECT name FROM ssh_public_keys where email = %s AND name = %s", (email, name) )
|
|
|
|
return len(self.cursor.fetchall()) > 0
|
|
|
|
|
|
|
|
def create_ssh_public_key(self, email, name, content):
|
|
|
|
self.cursor.execute("""
|
|
|
|
INSERT INTO ssh_public_keys (email, name, content)
|
|
|
|
VALUES (%s, %s, %s)
|
|
|
|
""",
|
|
|
|
(email, name, content)
|
|
|
|
)
|
|
|
|
self.connection.commit()
|
|
|
|
|
|
|
|
def delete_ssh_public_key(self, email, name):
|
|
|
|
self.cursor.execute( "DELETE FROM ssh_public_keys where email = %s AND name = %s", (email, name) )
|
|
|
|
self.connection.commit()
|
|
|
|
|
2020-05-11 06:47:14 +00:00
|
|
|
def list_vms_for_account(self, email):
|
|
|
|
self.cursor.execute("""
|
2020-05-11 20:13:20 +00:00
|
|
|
SELECT vms.id, vms.last_seen_ipv4, vms.last_seen_ipv6, vms.size, vms.os, vms.created, vms.deleted
|
|
|
|
FROM vms WHERE vms.email = %s""",
|
2020-05-11 06:47:14 +00:00
|
|
|
(email, )
|
|
|
|
)
|
2020-05-11 20:13:20 +00:00
|
|
|
return list(map(
|
2020-05-11 06:47:14 +00:00
|
|
|
lambda x: dict(id=x[0], ipv4=x[1], ipv6=x[2], size=x[3], os=x[4], created=x[5], deleted=x[6]),
|
|
|
|
self.cursor.fetchall()
|
2020-05-11 20:13:20 +00:00
|
|
|
))
|
2020-05-11 06:47:14 +00:00
|
|
|
|
|
|
|
def create_vm(self, email, id, size, os):
|
|
|
|
self.cursor.execute("""
|
|
|
|
INSERT INTO vms (email, id, size, os)
|
|
|
|
VALUES (%s, %s, %s, %s)
|
|
|
|
""",
|
|
|
|
(email, id, size, os)
|
|
|
|
)
|
|
|
|
self.connection.commit()
|