Exemplo n.º 1
0
    def test_invalid_log_configuration_not_saved(self):
        """Invalid log configuration is reverted and not saved."""
        logging_config = self.env.config['logging']
        log_type = logging_config.get('log_type')
        log_file = logging_config.get('log_file')
        log_level = logging_config.get('log_level')
        req = MockRequest(self.env,
                          path_info='/admin/general/logging',
                          method='POST',
                          args={
                              'log_type': 'file',
                              'log_level': log_level,
                              'log_file': '/path/to/invalid/file'
                          })
        mod = AdminModule(self.env)

        self.assertTrue(mod.match_request(req))
        self.assertRaises(RequestDone, mod.process_request, req)

        self.assertEqual(1, len(req.chrome['warnings']))
        self.assertIn('Changes not saved. Logger configuration error:',
                      req.chrome['warnings'][0])
        self.assertNotEqual('file', log_type)
        self.assertEqual(log_type, logging_config.get('log_type'))
        self.assertEqual(log_level, logging_config.get('log_level'))
        self.assertEqual(log_file, logging_config.get('log_file'))
Exemplo n.º 2
0
    def test_change_log_file(self):
        """Change the log file."""
        logging_config = self.env.config['logging']
        log_type = 'file'
        logging_config.set('log_type', log_type)
        log_level = logging_config.get('log_level')
        log_file = logging_config.get('log_file')
        req = MockRequest(self.env,
                          path_info='/admin/general/logging',
                          method='POST',
                          args={
                              'log_type': log_type,
                              'log_level': log_level,
                              'log_file': 'trac.log.1'
                          })
        mod = AdminModule(self.env)

        self.assertTrue(mod.match_request(req))
        self.assertRaises(RequestDone, mod.process_request, req)

        self.assertEqual(0, len(req.chrome['warnings']))
        self.assertEqual(log_type, logging_config.get('log_type'))
        self.assertEqual(log_level, logging_config.get('log_level'))
        self.assertNotEqual('trac.log.1', log_file)
        self.assertEqual('trac.log.1', logging_config.get('log_file'))
Exemplo n.º 3
0
    def test_log_type_none(self):
        """When log type is none, TracError is not raised even if log level and
        log file in the parameters are missing.
        """
        logging_config = self.env.config['logging']
        logging_config.set('log_type', 'file')
        logging_config.set('log_level', 'WARN')
        logging_config.set('log_file', os.devnull)
        mod = AdminModule(self.env)

        req = MockRequest(self.env, path_info='/admin/general/logging')
        self.assertTrue(mod.match_request(req))
        data = mod.process_request(req)[1]
        self.assertEqual('WARNING', data['log']['level'])
        self.assertIn('WARNING', data['log']['levels'])

        req = MockRequest(self.env,
                          path_info='/admin/general/logging',
                          method='POST',
                          args={'log_type': 'none'})
        self.assertTrue(mod.match_request(req))
        self.assertRaises(RequestDone, mod.process_request, req)
        self.assertEqual('none', logging_config.get('log_type'))
        self.assertEqual('WARN', logging_config.get('log_level'))
        self.assertEqual(os.devnull, logging_config.get('log_file'))
Exemplo n.º 4
0
    def test_complete_milestone_retarget_tickets(self):
        name = 'milestone1'
        target = 'milestone2'
        insert_ticket(self.env, summary='Ticket 1', milestone=name)
        insert_ticket(self.env, summary='Ticket 2', milestone=name)
        ps = PermissionSystem(self.env)
        ps.grant_permission('user1', 'TICKET_ADMIN')
        ps.grant_permission('user1', 'MILESTONE_MODIFY')
        req = MockRequest(self.env, authname='user1', method='POST',
            path_info='/admin/ticket/milestones/%s' % name,
            args=dict(action='edit', save='Submit changes', name=name,
                      description='', retarget='on', target=target,
                      comment='', completed='on',
                      completeddate='May 20, 2020, 9:07:52 PM'))

        mod = AdminModule(self.env)
        self.assertTrue(mod.match_request(req))
        with self.assertRaises(RequestDone):
            mod.process_request(req)

        self.assertEqual(2, len(req.chrome['notices']))
        self.assertEqual(
            'The open tickets associated with milestone "milestone1" '
            'have been retargeted to milestone "milestone2".',
            req.chrome['notices'][0])
        self.assertEqual('Your changes have been saved.',
                         req.chrome['notices'][1])
        self.assertEqual([], req.chrome['warnings'])
        self.assertEqual(['303 See Other'], req.status_sent)
        self.assertEqual('http://example.org/trac.cgi/admin/ticket/milestones',
                         req.headers_sent['Location'])
        self.assertTrue(Milestone(self.env, name).is_completed)
        self.assertEqual(target, Ticket(self.env, 1)['milestone'])
        self.assertEqual(target, Ticket(self.env, 2)['milestone'])
Exemplo n.º 5
0
    def test_invalid_log_type_raises(self):
        """Invalid log type raises TracError."""
        req = MockRequest(self.env, path_info='/admin/general/logging',
                          method='POST', args={'log_type': 'invalid'})
        mod = AdminModule(self.env)

        self.assertTrue(mod.match_request(req))
        self.assertRaises(TracError, mod.process_request, req)
Exemplo n.º 6
0
    def test_empty_log_file_raises(self):
        """Empty log file raises TracError."""
        req = MockRequest(self.env, path_info='/admin/general/logging',
                          method='POST',
                          args={'log_type': 'file',
                                'log_level': 'DEBUG',
                                'log_file': ''})
        mod = AdminModule(self.env)

        self.assertTrue(mod.match_request(req))
        self.assertRaises(TracError, mod.process_request, req)
Exemplo n.º 7
0
    def post_process_request(self, req, template, data, content_type):
        if template is None:
            # Some kind of exception in progress
            if req.authname != 'anonymous':
                # Already logged in
                return template, data, content_type

            exctype, exc = sys.exc_info()[0:2]
            if issubclass(exctype, PermissionError):
                req.redirect(req.href.login())

            try:
                if req.path_info.startswith('/admin') and \
                   not AdminModule(self.env)._get_panels(req)[0]:
                    # No admin panels available, assume user should log in.
                    req.redirect(req.href.login())
            except RequestDone:
                # Reraise on redirect
                raise
            except Exception:
                # It is possible the error we got called on happened inside
                # the _get_panels call. Be sure to ignore it.
                pass

        return template, data, content_type
Exemplo n.º 8
0
    def test_render_admin_panel(self):
        """GET request for admin panel."""
        req = MockRequest(self.env, path_info='/admin/general/logging',
                          method='GET')
        mod = AdminModule(self.env)

        self.assertTrue(mod.match_request(req))
        data = mod.process_request(req)[1]

        self.assertEqual('none', data['log']['type'])
        self.assertEqual(['none', 'stderr', 'file', 'syslog', 'eventlog'],
                         [t['name'] for t in data['log']['types']])
        self.assertEqual('DEBUG', data['log']['level'])
        self.assertEqual(['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'],
                         data['log']['levels'])
        self.assertEqual('trac.log', data['log']['file'])
        self.assertEqual(self.env.log_dir, data['log']['dir'])
Exemplo n.º 9
0
 def _get_panels(self, req):
     if isinstance(self.env, ProductEnvironment):
         panels, providers = AdminModule(self.env)._get_panels(req)
         # Filter based on ACLs
         panels = [p for p in panels if self._check_panel(p[0], p[2])]
         #            providers = dict([k, p] for k, p in providers.iteritems()
         #                                    if self._check_panel(*k))
         return panels, providers
     else:
         return [], []
Exemplo n.º 10
0
 def pre_process_request(self, req, handler):
     """Intercept admin requests in product context if `TRAC_ADMIN`
     expectations are not met.
     """
     if isinstance(self.env, ProductEnvironment) and \
             handler is AdminModule(self.env) and \
             not req.perm.has_permission('TRAC_ADMIN') and \
             req.perm.has_permission('PRODUCT_ADMIN'):
         # Intercept admin request
         return self
     return handler
Exemplo n.º 11
0
    def post_process_request(self, req, template, data, content_type):
        if not self.redirect_login:
            return template, data, content_type

        if template is None:
            # Some kind of exception in progress
            if req.authname != 'anonymous':
                # Already logged in
                return template, data, content_type

            ref_url = req.base_url + req.path_info
            if req.query_string:
                ref_url = ref_url + "?" + req.query_string

            exctype, exc = sys.exc_info()[0:2]
            if exctype is None:
                self.log.debug("template and exctype both None for request "
                               "to %s: %s" % (ref_url, pformat(req.environ)))
                return template, data, content_type

            login_url = req.href.login(referer=ref_url)

            if issubclass(exctype, PermissionError):
                req.redirect(login_url)

            try:
                if req.path_info.startswith('/admin') and \
                   not AdminModule(self.env)._get_panels(req)[0]:
                    # No admin panels available, assume user should log in.
                    req.redirect(login_url)
            except RequestDone:
                # Reraise on redirect
                raise
            except Exception:
                # It is possible the error we got called on happened inside
                # the _get_panels call. Be sure to ignore it.
                pass

        return template, data, content_type