def handler(mod_python_req, fields=None, is_profiling=False): # Create an object that contains all data about the request and # helper functions for creating valid HTML. Parse URI and # store results in the request object for later usage. __builtin__.html = html_mod_python(mod_python_req, fields) response_code = apache.OK try: config.initialize() init_profiling(is_profiling) html.init_modes() # Make sure all plugins are avaiable as early as possible. At least # we need the plugins (i.e. the permissions declared in these) at the # time before the first login for generating auth.php. modules.load_all_plugins() # Get page handler. handler = modules.get_handler(html.myfile, page_not_found) # Some pages do skip authentication. This is done by adding # noauth: to the page hander, e.g. "noauth:run_cron" : ... # TODO: Eliminate those "noauth:" pages. Eventually replace it by call using # the now existing default automation user. if handler == page_not_found: handler = modules.get_handler("noauth:" + html.myfile, page_not_found) if handler != page_not_found: try: handler() except Exception, e: html.write_text("%s" % e) if config.debug: html.write_text(traceback.format_exc()) raise FinalizeRequest() # Ensure the user is authenticated. This call is wrapping all the different # authentication modes the Check_MK GUI supports and initializes the logged # in user objects. if not login.authenticate(mod_python_req): handle_not_authenticated() # Initialize the multiste i18n. This will be replaced by # language settings stored in the user profile after the user # has been initialized previous_language = i18n.get_current_language() i18n.localize(html.var("lang", config.user.language())) # All plugins might have to be reloaded due to a language change. Only trigger # a second plugin loading when the user is really using a custom localized GUI. # Otherwise the load_all_plugins() at the beginning of the request is sufficient. if i18n.get_current_language() != previous_language: modules.load_all_plugins() ensure_general_access() handler()
def handler(mod_python_req, fields = None, is_profiling = False): # Create an object that contains all data about the request and # helper functions for creating valid HTML. Parse URI and # store results in the request object for later usage. __builtin__.html = html_mod_python(mod_python_req, fields) response_code = apache.OK try: config.initialize() init_profiling(is_profiling) html.init_modes() # Make sure all plugins are avaiable as early as possible. At least # we need the plugins (i.e. the permissions declared in these) at the # time before the first login for generating auth.php. modules.load_all_plugins() # Get page handler. handler = modules.get_handler(html.myfile, page_not_found) # Some pages do skip authentication. This is done by adding # noauth: to the page hander, e.g. "noauth:run_cron" : ... # TODO: Eliminate those "noauth:" pages. Eventually replace it by call using # the now existing default automation user. if handler == page_not_found: handler = modules.get_handler("noauth:" + html.myfile, page_not_found) if handler != page_not_found: try: handler() except Exception, e: html.write(str(e)) if config.debug: html.write(html.attrencode(traceback.format_exc())) raise FinalizeRequest() # Ensure the user is authenticated. This call is wrapping all the different # authentication modes the Check_MK GUI supports and initializes the logged # in user objects. if not login.authenticate(mod_python_req): handle_not_authenticated() # Initialize the multiste i18n. This will be replaced by # language settings stored in the user profile after the user # has been initialized previous_language = i18n.get_current_language() i18n.localize(html.var("lang", config.user.language())) # All plugins might have to be reloaded due to a language change. Only trigger # a second plugin loading when the user is really using a custom localized GUI. # Otherwise the load_all_plugins() at the beginning of the request is sufficient. if i18n.get_current_language() != previous_language: modules.load_all_plugins() ensure_general_access() handler()
def handler(req, fields = None, is_profiling = False): # Create an object that contains all data about the request and # helper functions for creating valid HTML. Parse URI and # store results in the request object for later usage. __builtin__.html = html_mod_python(req, fields) response_code = apache.OK try: config.load_config() # load multisite.mk etc. html.init_modes() init_profiling(is_profiling) # Make sure all plugins are avaiable as early as possible. At least # we need the plugins (i.e. the permissions declared in these) at the # time before the first login for generating auth.php. modules.load_all_plugins() # Get page handler. handler = modules.get_handler(html.myfile, page_not_found) # Some pages do skip authentication. This is done by adding # noauth: to the page hander, e.g. "noauth:run_cron" : ... if handler == page_not_found: handler = modules.get_handler("noauth:" + html.myfile, page_not_found) if handler != page_not_found: try: # Call userdb page hooks which are executed on a regular base to e.g. syncronize # information withough explicit user triggered actions userdb.hook_page() handler() except Exception, e: html.write(str(e)) if config.debug: html.write(html.attrencode(format_exception())) raise FinalizeRequest() # Is the user set by the webserver? otherwise use the cookie based auth if not html.is_logged_in(): config.auth_type = 'cookie' # When not authed tell the browser to ask for the password html.login(login.check_auth()) if not html.is_logged_in(): if fail_silently(): # While api call don't show the login dialog raise MKUnauthenticatedException(_('You are not authenticated.')) # Redirect to the login-dialog with the current url as original target # Never render the login form directly when accessing urls like "index.py" # or "dashboard.py". This results in strange problems. if html.myfile != 'login': html.http_redirect(defaults.url_prefix + 'check_mk/login.py?_origtarget=%s' % html.urlencode(html.makeuri([]))) # Initialize the i18n for the login dialog. This might be overridden # later after user login i18n.localize(html.var("lang", config.get_language())) # This either displays the login page or validates the information submitted # to the login form. After successful login a http redirect to the originally # requested page is performed. login.page_login(plain_error()) raise FinalizeRequest() else: # In case of basic auth the user is already known, but we still need to decide # whether or not the user is an automation user (which is allowed to use transid=-1) if html.var("_secret"): login.check_auth_automation() # Call userdb page hooks which are executed on a regular base to e.g. syncronize # information withough explicit user triggered actions userdb.hook_page() # Set all permissions, read site config, and similar stuff config.login(html.user) html.load_help_visible() # Initialize the multiste i18n. This will be replaced by # language settings stored in the user profile after the user # has been initialized i18n.localize(html.var("lang", config.get_language())) # All plugins might have to be reloaded due to a language change modules.load_all_plugins() # User allowed to login at all? if not config.may("general.use"): reason = _("You are not authorized to use Check_MK Multisite. Sorry. " "You are logged in as <b>%s</b>.") % config.user_id if len(config.user_role_ids): reason += _("Your roles are <b>%s</b>. " % ", ".join(config.user_role_ids)) else: reason += _("<b>You do not have any roles.</b> ") reason += _("If you think this is an error, " "please ask your administrator to check the permissions configuration.") if config.auth_type == 'cookie': reason += _('<p>You have been logged out. Please reload the page to re-authenticate.</p>') login.del_auth_cookie() raise MKAuthException(reason) handler()
(apache.SERVER_RETURN, apache.HTTP_MOVED_TEMPORARILY)): release_all_locks() html.finalize(is_error=True) raise except Exception, e: html.unplug() import traceback msg = "%s %s: %s" % (html.request_uri(), _('Internal error'), traceback.format_exc()) if type(msg) == unicode: msg = msg.encode('utf-8') logger(LOG_ERR, msg) if plain_error(): html.write(_("Internal error") + ": %s\n" % html.attrencode(e)) elif not fail_silently(): modules.get_handler("gui_crash")() response_code = apache.OK release_all_locks() html.finalize() return response_code # Profiling of the Check_MK GUI can be enabled via global settings def init_profiling(is_profiling): if not is_profiling and config.profile: import cProfile # the profiler loses the memory about all modules. We need to hand over # the request object in the apache module. # Ubuntu: install python-profiler when using this feature profile_file = defaults.var_dir + "/web/multisite.profile"
def handler(req, fields = None, is_profiling = False): # Create an object that contains all data about the request and # helper functions for creating valid HTML. Parse URI and # store results in the request object for later usage. __builtin__.html = html_mod_python(req, fields) response_code = apache.OK try: config.load_config() # load multisite.mk etc. init_profiling(is_profiling) html.init_modes() # Make sure all plugins are avaiable as early as possible. At least # we need the plugins (i.e. the permissions declared in these) at the # time before the first login for generating auth.php. modules.load_all_plugins() # Get page handler. handler = modules.get_handler(html.myfile, page_not_found) # Some pages do skip authentication. This is done by adding # noauth: to the page hander, e.g. "noauth:run_cron" : ... if handler == page_not_found: handler = modules.get_handler("noauth:" + html.myfile, page_not_found) if handler != page_not_found: try: handler() except Exception, e: html.write("%s" % e) if config.debug: html.write(html.attrencode(format_exception())) raise FinalizeRequest() # Is the user set by the webserver? otherwise use the cookie based auth if not html.is_logged_in(): config.auth_type = 'cookie' # When not authed tell the browser to ask for the password html.login(login.check_auth()) if not html.is_logged_in(): if fail_silently(): # While api call don't show the login dialog raise MKUnauthenticatedException(_('You are not authenticated.')) # Redirect to the login-dialog with the current url as original target # Never render the login form directly when accessing urls like "index.py" # or "dashboard.py". This results in strange problems. if html.myfile != 'login': html.http_redirect(defaults.url_prefix + 'check_mk/login.py?_origtarget=%s' % html.urlencode(html.makeuri([]))) # Initialize the i18n for the login dialog. This might be overridden # later after user login i18n.localize(html.var("lang", config.get_language())) # This either displays the login page or validates the information submitted # to the login form. After successful login a http redirect to the originally # requested page is performed. login.page_login(plain_error()) raise FinalizeRequest() else: # In case of basic auth the user is already known, but we still need to decide # whether or not the user is an automation user (which is allowed to use transid=-1) if html.var("_secret"): login.check_auth_automation() # Set all permissions, read site config, and similar stuff config.login(html.user) html.load_help_visible() # Initialize the multiste i18n. This will be replaced by # language settings stored in the user profile after the user # has been initialized previous_language = current_language i18n.localize(html.var("lang", config.get_language())) # All plugins might have to be reloaded due to a language change. Only trigger # a second plugin loading when the user is really using a custom localized GUI. # Otherwise the load_all_plugins() at the beginning of the request is sufficient. if current_language != previous_language: modules.load_all_plugins() # User allowed to login at all? if not config.may("general.use"): reason = _("You are not authorized to use Check_MK Multisite. Sorry. " "You are logged in as <b>%s</b>.") % config.user_id if len(config.user_role_ids): reason += _("Your roles are <b>%s</b>. " % ", ".join(config.user_role_ids)) else: reason += _("<b>You do not have any roles.</b> ") reason += _("If you think this is an error, " "please ask your administrator to check the permissions configuration.") if config.auth_type == 'cookie': reason += _('<p>You have been logged out. Please reload the page to re-authenticate.</p>') login.del_auth_cookie() raise MKAuthException(reason) handler()
(apache.SERVER_RETURN, apache.HTTP_UNAUTHORIZED), (apache.SERVER_RETURN, apache.HTTP_MOVED_TEMPORARILY)): finalize_request(is_error=True) raise except Exception, e: html.unplug() import traceback msg = "%s %s: %s" % (html.request_uri(), _('Internal error'), traceback.format_exc()) if type(msg) == unicode: msg = msg.encode('utf-8') logger(LOG_ERR, msg) if plain_error(): html.write(_("Internal error") + ": %s\n" % html.attrencode(e)) elif not fail_silently(): modules.get_handler("gui_crash")() response_code = apache.OK finalize_request() return response_code def finalize_request(is_error=False): release_all_locks() userdb.finalize() html.finalize(is_error=is_error) # Ajax-Functions want no HTML output in case of an error but # just a plain server result code of 500 def fail_silently():