コード例 #1
0
    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")
コード例 #2
0
    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
コード例 #3
0
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
コード例 #4
0
    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")
コード例 #5
0
#!/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"])
コード例 #6
0
#!/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