def __init__(self): super().__init__() # TODO: Inappropriate Intimacy: custom host attributes should not now about # custom user attributes and vice versa. The only reason they now about # each other now is that they are stored in one file. self._all_attrs = load_custom_attrs_from_mk_file( lock=transactions.is_transaction())
def page_handler() -> None: initialize_wato_html_head() if not config.wato_enabled: raise MKGeneralException( _("WATO is disabled. Please set <tt>wato_enabled = True</tt>" " in your <tt>multisite.mk</tt> if you want to use WATO.")) # config.current_customer can not be checked with CRE repos if cmk_version.is_managed_edition() and not managed.is_provider( config.current_customer): # type: ignore[attr-defined] raise MKGeneralException( _("Check_MK can only be configured on " "the managers central site.")) current_mode = request.var("mode") or "main" mode_permissions, mode_class = _get_mode_permission_and_class(current_mode) display_options.load_from_html(request, html) if display_options.disabled(display_options.N): html.add_body_css_class("inline") # If we do an action, we aquire an exclusive lock on the complete WATO. if transactions.is_transaction(): with store.lock_checkmk_configuration(): _wato_page_handler(current_mode, mode_permissions, mode_class) else: _wato_page_handler(current_mode, mode_permissions, mode_class)
def _from_vars(self): self._connection_id = request.get_ascii_input("id") self._connection_cfg = {} self._connections = load_connection_config(lock=transactions.is_transaction()) if self._connection_id is None: clone_id = request.var("clone") if clone_id is not None: self._connection_cfg = self._get_connection_cfg_and_index(clone_id)[0] self._new = True return self._new = False self._connection_cfg, self._connection_nr = self._get_connection_cfg_and_index( self._connection_id )
def _from_vars(self): self._name = request.get_ascii_input( "edit") # missing -> new custom attr self._new = self._name is None # TODO: Inappropriate Intimacy: custom host attributes should not now about # custom user attributes and vice versa. The only reason they now about # each other now is that they are stored in one file. self._all_attrs = load_custom_attrs_from_mk_file( lock=transactions.is_transaction()) if not self._new: matching_attrs = [ a for a in self._attrs if a["name"] == self._name ] if not matching_attrs: raise MKUserError(None, _("The attribute does not exist.")) self._attr: Dict[str, Any] = matching_attrs[0] else: self._attr = {}
def _wato_page_handler(current_mode: str, mode_permissions: Optional[List[PermissionName]], mode_class: Type[WatoMode]) -> None: try: init_wato_datastructures(with_wato_lock=not transactions.is_transaction()) except Exception: # Snapshot must work in any case if current_mode == 'snapshot': pass else: raise # Check general permission for this mode if mode_permissions is not None and not config.user.may("wato.seeall"): _ensure_mode_permissions(mode_permissions) mode = mode_class() # Do actions (might switch mode) if transactions.is_transaction(): try: config.user.need_permission("wato.edit") # Even if the user has seen this mode because auf "seeall", # he needs an explicit access permission for doing changes: if config.user.may("wato.seeall"): if mode_permissions: _ensure_mode_permissions(mode_permissions) if cmk.gui.watolib.read_only.is_enabled( ) and not cmk.gui.watolib.read_only.may_override(): raise MKUserError(None, cmk.gui.watolib.read_only.message()) result = mode.action() if isinstance(result, (tuple, str, bool)): raise MKGeneralException( f"WatoMode \"{current_mode}\" returns unsupported return value: {result!r}") # We assume something has been modified and increase the config generation ID by one. update_config_generation() if config.wato_use_git: do_git_commit() # Handle two cases: # a) Don't render the page content after action # (a confirm dialog is displayed by the action, or a non-HTML content was sent) # b) Redirect to another page if isinstance(result, FinalizeRequest): raise result except MKUserError as e: user_errors.add(e) except MKAuthException as e: user_errors.add(MKUserError(None, e.args[0])) breadcrumb = make_main_menu_breadcrumb(mode.main_menu()) + mode.breadcrumb() page_menu = mode.page_menu(breadcrumb) wato_html_head(title=mode.title(), breadcrumb=breadcrumb, page_menu=page_menu, show_body_start=display_options.enabled(display_options.H), show_top_heading=display_options.enabled(display_options.T)) if not transactions.is_transaction() or (cmk.gui.watolib.read_only.is_enabled() and cmk.gui.watolib.read_only.may_override()): _show_read_only_warning() # Show outcome of failed action on this page html.show_user_errors() # Show outcome of previous page (that redirected to this one) for message in get_flashed_messages(): html.show_message(message) # Show content mode.handle_page() if is_sidebar_reload_needed(): html.reload_whole_page() wato_html_footer(show_body_end=display_options.enabled(display_options.H))