def form_init(cls): cls.configure_relationships("users") keys = ("get_requests", "post_requests", "delete_requests", "upper_menu") for key in keys: values = [(k, k) for k, v in app.rbac[key].items() if v == "access"] field_name = " ".join(key.split("_")).capitalize() setattr(cls, key, SelectMultipleField(field_name, choices=values)) menus, pages = [], [] for category, values in app.rbac["menu"].items(): if values["rbac"] == "admin": continue if values["rbac"] == "access": menus.append(category) for page, page_values in values["pages"].items(): if page_values["rbac"] == "admin": continue if page_values["rbac"] == "access": pages.append(page) subpages = page_values.get("subpages", {}) for subpage, subpage_values in subpages.items(): if subpage_values["rbac"] == "admin": continue if subpage_values["rbac"] == "access": pages.append(subpage) setattr(cls, "menu", SelectMultipleField("Menu", choices=choices(menus))) setattr(cls, "pages", SelectMultipleField("Pages", choices=choices(pages)))
class DeviceForm(ObjectForm): template = "object" form_type = HiddenField(default="device") id = HiddenField() icon = SelectField( "Icon", choices=( ("antenna", "Antenna"), ("firewall", "Firewall"), ("host", "Host"), ("optical_switch", "Optical switch"), ("regenerator", "Regenerator"), ("router", "Router"), ("server", "Server"), ("switch", "Switch"), ), ) ip_address = StringField("IP address") port = IntegerField("Port", default=22) operating_system = StringField("Operating System") os_version = StringField("OS Version") longitude = StringField("Longitude", default=0.0) latitude = StringField("Latitude", default=0.0) username = StringField("Username") password = PasswordField("Password") enable_password = PasswordField("'Enable' Password") napalm_driver = SelectField("NAPALM Driver", choices=app.NAPALM_DRIVERS, default="ios") netmiko_driver = SelectField("Netmiko Driver", choices=app.NETMIKO_DRIVERS, default="cisco_ios") scrapli_driver = SelectField("Scrapli Driver", choices=choices(app.SCRAPLI_DRIVERS), default="cisco_iosxe")
class RbacForm(BaseForm): template = "object" form_type = HiddenField(default="rbac") id = HiddenField() name = StringField("Name", [InputRequired()]) email = StringField("Email") menu = SelectMultipleField("Menu", choices=choices(list(rbac["menu"]))) pages = SelectMultipleField("Pages", choices=choices(rbac["pages"])) upper_menu = SelectMultipleField("Upper Menu", choices=choices(rbac["upper_menu"])) get_requests = SelectMultipleField("GET requests", choices=choices( rbac["get_requests"])) post_requests = SelectMultipleField("POST requests", choices=choices( rbac["post_requests"]))
class AccessForm(RbacForm): template = "access" form_type = HiddenField(default="access") description = StringField("Description") menu = SelectMultipleField("Menu", choices=choices(list(app.rbac["menu"]))) pages = SelectMultipleField("Pages", choices=choices(app.rbac["pages"])) upper_menu = SelectMultipleField("Upper Menu", choices=choices( app.rbac["upper_menu"])) get_requests = SelectMultipleField("GET requests", choices=choices( app.rbac["get_requests"])) post_requests = SelectMultipleField("POST requests", choices=choices( app.rbac["post_requests"])) relations = ["pools", "services"]
class ScrapliForm(ConnectionForm): form_type = HiddenField(default="scrapli_service") commands = StringField(substitution=True, widget=TextArea(), render_kw={"rows": 5}) is_configuration = BooleanField() driver = SelectField(choices=choices(app.SCRAPLI_DRIVERS)) transport = SelectField(choices=choices(("system", "paramiko", "ssh2"))) use_device_driver = BooleanField(default=True) groups = { "Main Parameters": { "commands": [ "commands", "is_configuration", "driver", "transport", "use_device_driver", ], "default": "expanded", }, **ConnectionForm.groups, }
def configure_access_form(cls): cls.models = app.rbac["models"] for model, access_rights in cls.models.items(): setattr(cls, model, MultipleInstanceField()) form_properties["access"][model] = {"type": "object-list"} access_field = SelectMultipleStringField( choices=choices(access_rights)) form_properties["access"][f"{model}_access"] = { "type": "multiselect-string" } setattr(cls, f"{model}_access", access_field) return cls
class AccessForm(RbacForm): template = "access" form_type = HiddenField(default="access") user_pools = MultipleInstanceField("pool") access_pools = MultipleInstanceField("pool") access_type = SelectMultipleStringField( "Access Type", choices=choices( ["Read", "Edit", "Run", "Schedule", "Connect", "Use as target"]), ) relations = ["pools", "services"] @classmethod def form_init(cls): cls.configure_relationships("users") keys = ("get_requests", "post_requests", "delete_requests", "upper_menu") for key in keys: values = [(k, k) for k, v in app.rbac[key].items() if v == "access"] field_name = " ".join(key.split("_")).capitalize() setattr(cls, key, SelectMultipleField(field_name, choices=values)) menus, pages = [], [] for category, values in app.rbac["menu"].items(): if values["rbac"] == "admin": continue if values["rbac"] == "access": menus.append(category) for page, page_values in values["pages"].items(): if page_values["rbac"] == "admin": continue if page_values["rbac"] == "access": pages.append(page) subpages = page_values.get("subpages", {}) for subpage, subpage_values in subpages.items(): if subpage_values["rbac"] == "admin": continue if subpage_values["rbac"] == "access": pages.append(subpage) setattr(cls, "menu", SelectMultipleField("Menu", choices=choices(menus))) setattr(cls, "pages", SelectMultipleField("Pages", choices=choices(pages)))