def get(self, username, conn): parser = reqparse.RequestParser() parser.add_argument("password", type=str, help="This is the password of the user") args = parser.parse_args() user = r.table("users").get(username).run(conn) api_settings = read_settings('api') protocol = api_settings['protocol'] domain_name = api_settings['domain_name'] if len(user["organizations"]) > 1: raw_menu = "item --gap -- ---- Organizations ----\n" entries_menu = "" for organization_id in user["organizations"]: organization = r.table("organizations").get(organization_id).run(conn) normalized_name = normalize_string(organization["name"]) raw_menu += f"item {normalized_name} {organization['name']} -->\n" entries_menu += f":{normalized_name}\n" entries_menu += f"chain {protocol}://{domain_name}/boot/{username}/{organization_id}" + "?username=${username:uristring}&password=${password:uristring}\n" ipxe_script = generate_menu(username, args['password'], "Choose organization", raw_menu, entries_menu) else: ipxe_script = f"#!ipxe\nset username={username}\nset password={args['password']}\nchain {protocol}://{domain_name}/boot/{username}/{user['organizations'][0]}" + "?username=${username:uristring}&password=${password:uristring}\n" return Response(ipxe_script, mimetype="text/plain")
def get(self, username, organization_id, group_id, image_id): images_directory = read_settings("storage")["path"] if image_id == "memdisk": return send_from_directory(os.path.abspath(images_directory), "memdisk") return {"response": "Error 404! Image not found!"}, 404
def connect(): # Read the DB settings rethinkdb_settings = read_settings("rethinkdb") # Connect to the DB conn = r.connect(rethinkdb_settings["host"], rethinkdb_settings["port"], rethinkdb_settings["db_name"]) return conn
def get(self, username, organization_id, group_id, conn): parser = reqparse.RequestParser() parser.add_argument("password", type=str, help="This is the password of the user") args = parser.parse_args() menu_id = r.table("groups").get(group_id).run(conn)["menu_id"] menu = r.table("menus").get(menu_id).run(conn) api_settings = read_settings('api') protocol = api_settings['protocol'] domain_name = api_settings['domain_name'] raw_menu = "" entries_menu = "" for entry in menu["entries"]: if entry["type"] == "separator": raw_menu += f"item\nitem --gap -- ---- {entry['content']} ----\n" elif entry["type"] == "image": image = r.table("images").get(entry["image_id"]).run(conn) normalized_title = normalize_string(image["title"]) raw_menu += f"item {normalized_title} {image['title']} -->\n" if image["type"] == "iso": entries_menu += f":{normalized_title}\n" entries_menu += f"kernel {protocol}://{domain_name}/boot/{username}/{organization_id}/{group_id}/memdisk" + "?username=${username:uristring}&password=${password:uristring}\n" entries_menu += f"initrd {image['image_source']}\n" entries_menu += f"imgargs memdisk iso raw {' '.join([key + '=' + value if value else key for key, value in image['boot_args'].items()])}\n" elif image["type"] == "kernel_initrd": entries_menu += f":{normalized_title}\n" entries_menu += f"kernel {image['kernel_source']} " entries_menu += f"{' '.join([key + '=' + value if value else key for key, value in image['boot_args'].items()])}\n" entries_menu += f"initrd {image['image_source']}\n" entries_menu += "boot\n" ipxe_script = generate_menu(username, args["password"], menu["title"], raw_menu, entries_menu, menu["background"]) print(ipxe_script) return Response(ipxe_script, mimetype="text/plain")
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Imports from api.app import app # Methods imports from api.methods.files_methods import read_settings # Run the app if __name__ == "__main__": network_settings = read_settings("network") app.run(debug=True, host=network_settings["host_ip"], port=network_settings["api_port"])
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Imports import rethinkdb as r # Methods imports from api.methods.files_methods import read_settings # Read the settings related to RethinkDB rethink_settings = read_settings("rethinkdb") # Connect to the DB def connect(): # Read the DB settings rethinkdb_settings = read_settings("rethinkdb") # Connect to the DB conn = r.connect(rethinkdb_settings["host"], rethinkdb_settings["port"], rethinkdb_settings["db_name"]) return conn # Close the DB connection def close(conn): conn.close() del conn return True