示例#1
0
 def setUp(self):
     self.env = EnvironmentStub(enable=[perm.DefaultPermissionStore,
                                        perm.DefaultPermissionPolicy,
                                        TestPermissionPolicy,
                                        TestPermissionRequestor])
     self.env.config.set('trac', 'permission_policies', 'TestPermissionPolicy')
     self.policy = TestPermissionPolicy(self.env)
     self.perm = perm.PermissionCache(self.env, 'testuser')
示例#2
0
文件: api.py 项目: t2y/trac
 def create_request(self, authname='anonymous', **kwargs):
     kw = {'perm': perm.PermissionCache(self.env, authname), 'args': {},
           'href': self.env.href, 'abs_href': self.env.abs_href,
           'tz': utc, 'locale': None, 'lc_time': locale_en,
           'chrome': {'notices': [], 'warnings': []},
           'method': None, 'get_header': lambda v: None}
     kw.update(kwargs)
     return Mock(**kw)
示例#3
0
class EmailVerificationModule(CommonTemplateProvider):
    """Performs email verification on every new or changed address.

    A working email sender for Trac (!TracNotification or !TracAnnouncer)
    is strictly required to enable this module's functionality.

    Anonymous users should register and perms should be tweaked, so that
    anonymous users can't edit wiki pages and change or create tickets.
    So this email verification code won't be used on them. 
    """

    implements(IRequestFilter, IRequestHandler)

    def __init__(self, *args, **kwargs):
        self.email_enabled = True
        if self.config.getbool('announcer', 'email_enabled') != True and \
                self.config.getbool('notification', 'smtp_enabled') != True:
            self.email_enabled = False
            if is_enabled(self.env, self.__class__) == True:
                self.env.log.warn(' '.join([
                    self.__class__.__name__,
                    "can't work because of missing email setup."
                ]))

    # IRequestFilter methods

    def pre_process_request(self, req, handler):
        if not req.session.authenticated:
            # Permissions for anonymous users remain unchanged.
            return handler
        elif req.path_info == '/prefs' and req.method == 'POST' and \
                not 'restore' in req.args:
            try:
                EmailCheck(self.env).validate_registration(req)
                # Check passed without error: New email address seems good.
            except RegistrationError, e:
                # Attempt to change email to an empty or invalid
                # address detected, resetting to previously stored value.
                chrome.add_warning(req, Markup(gettext(e.message)))
                req.redirect(req.href.prefs(None))
        if AccountManager(self.env).verify_email and handler is not self and \
                'email_verification_token' in req.session and \
                not req.perm.has_permission('ACCTMGR_ADMIN'):
            # TRANSLATOR: Your permissions have been limited until you ...
            link = tag.a(_("verify your email address"),
                         href=req.href.verify_email())
            # TRANSLATOR: ... verify your email address
            chrome.add_warning(
                req,
                Markup(
                    tag.span(
                        Markup(
                            _("Your permissions have been limited until you %(link)s.",
                              link=link)))))
            req.perm = perm.PermissionCache(self.env, 'anonymous')
        return handler
示例#4
0
文件: perm.py 项目: starworldx/trac
 def test_cache_shared(self):
     # we need to start with an empty cache here (#7201)
     perm1 = perm.PermissionCache(self.env, 'testcache')
     perm1 = perm1('ticket', 1)
     perm2 = perm1('ticket', 1)  # share internal cache
     self.perm_system.grant_permission('testcache', 'TEST_ADMIN')
     perm1.require('TEST_ADMIN')
     self.perm_system.revoke_permission('testcache', 'TEST_ADMIN')
     # Using cached GRANT here (from shared cache)
     perm2.require('TEST_ADMIN')
示例#5
0
 def setUp(self):
     self.env = EnvironmentStub(enable=[perm.DefaultPermissionStore,
                                        perm.DefaultPermissionPolicy,
                                        TestPermissionRequestor])
     self.perm_system = perm.PermissionSystem(self.env)
     # by-pass DefaultPermissionPolicy cache:
     perm.DefaultPermissionPolicy.CACHE_EXPIRY = -1 
     self.perm_system.grant_permission('testuser', 'TEST_MODIFY')
     self.perm_system.grant_permission('testuser', 'TEST_ADMIN')
     self.perm = perm.PermissionCache(self.env, 'testuser')
示例#6
0
文件: perm.py 项目: starworldx/trac
 def test_user1_allowed_by_policy2(self):
     """policy1 consulted for ACTION_2. policy2 consulted for ACTION_2.
     """
     perm_cache = perm.PermissionCache(self.env, 'user2')
     self.assertIn('ACTION_2', perm_cache)
     self.assertEqual(1, self.ps.policies[0].call_count)
     self.assertEqual(1, self.ps.policies[1].call_count)
     self.assertEqual([
         ('policy1', 'ACTION_2', None),
         ('policy2', 'ACTION_2', True),
     ], self.decisions)
示例#7
0
文件: perm.py 项目: starworldx/trac
 def setUp(self):
     self.env = EnvironmentStub(
         enable=[perm.DefaultPermissionStore, perm.DefaultPermissionPolicy
                 ] + self.permission_requestors)
     self.env.config.set('trac', 'permission_policies',
                         'DefaultPermissionPolicy')
     self.perm_system = perm.PermissionSystem(self.env)
     # by-pass DefaultPermissionPolicy cache:
     perm.DefaultPermissionPolicy.CACHE_EXPIRY = -1
     self.perm_system.grant_permission('testuser', 'TEST_MODIFY')
     self.perm_system.grant_permission('testuser', 'TEST_ADMIN')
     self.perm = perm.PermissionCache(self.env, 'testuser')
示例#8
0
    def setUp(self):
        self.env = EnvironmentStub(enable=['trac.*', 'itteco.*'])
        self.env.config.set('trac', 'permission_policies',
                            'CalendarSystem, DefaultPermissionPolicy')

        self.itteco_env = IttecoEvnSetup(self.env)
        self.itteco_env.upgrade_environment(self.env.get_db_cnx())

        self.calendar_system = CalendarSystem(self.env)
        self.perm_system = perm.PermissionSystem(self.env)

        self.perm = perm.PermissionCache(self.env, 'testuser')
示例#9
0
文件: perm.py 项目: starworldx/trac
 def test_user2_denied_by_no_decision(self):
     """policy1 and policy2 consulted for ACTION_1. policy1 and
     policy2 consulted for ACTION_2.
     """
     perm_cache = perm.PermissionCache(self.env, 'user2')
     self.assertNotIn('ACTION_1', perm_cache)
     self.assertEqual(2, self.ps.policies[0].call_count)
     self.assertEqual(2, self.ps.policies[1].call_count)
     self.assertEqual([
         ('policy1', 'ACTION_2', None),
         ('policy2', 'ACTION_2', True),
         ('policy1', 'ACTION_1', None),
         ('policy2', 'ACTION_1', None),
     ], self.decisions)
示例#10
0
 def setUp(self):
     self.env = EnvironmentStub(enable=[
         perm.PermissionSystem, perm.DefaultPermissionStore,
         TestPermissionRequestor
     ])
     # Add a few groups
     db = self.env.get_db_cnx()
     cursor = db.cursor()
     cursor.executemany("INSERT INTO permission VALUES(%s,%s)",
                        [('employee', 'TEST_MODIFY'),
                         ('developer', 'TEST_ADMIN'),
                         ('developer', 'employee'), ('bob', 'developer')])
     db.commit()
     self.perm = perm.PermissionCache(self.env, 'bob')
示例#11
0
    def test_new_product_perm(self):
        """Only product owner and TRAC_ADMIN will access new product
        """
        newproduct = Product(self.global_env)
        newproduct.prefix = 'NEW'
        newproduct.name = 'New product'
        newproduct.owner = 'owneruser'
        newproduct.insert()

        env = ProductEnvironment(self.global_env, newproduct)
        self.global_perm_admin._do_add('adminuser', 'TRAC_ADMIN')
        admin_perm = perm.PermissionCache(env, 'adminuser')
        owner_perm = perm.PermissionCache(env, 'owneruser')
        user_perm = perm.PermissionCache(env, 'testuser')
        global_permsys = perm.PermissionSystem(self.global_env)
        permsys = perm.PermissionSystem(env)

        self.assertEquals({'EMAIL_VIEW': True, 'TEST_ADMIN': True,
                           'TEST_CREATE': True, 'TEST_DELETE': True,
                           'TEST_MODIFY': True, 'TRAC_ADMIN' : True},
                          global_permsys.get_user_permissions('adminuser'))
        self.assertEquals({}, global_permsys.get_user_permissions('owneruser'))
        self.assertEquals({}, global_permsys.get_user_permissions('testuser'))
        self.assertEquals({}, permsys.get_user_permissions('adminuser'))
        self.assertEquals({}, permsys.get_user_permissions('owneruser'))
        self.assertEquals({}, permsys.get_user_permissions('testuser'))

        all_actions = self.permsys.get_actions()
        all_actions.remove('TRAC_ADMIN')
        for action in all_actions:
            self.assertTrue(admin_perm.has_permission(action))
            self.assertTrue(owner_perm.has_permission(action))
            self.assertFalse(user_perm.has_permission(action))

        self.assertTrue(admin_perm.has_permission('TRAC_ADMIN'))
        self.assertFalse(owner_perm.has_permission('TRAC_ADMIN'))
        self.assertFalse(user_perm.has_permission('TRAC_ADMIN'))
示例#12
0
 def pre_process_request(self, req, handler):
     if not req.session.authenticated:
         # Permissions for anonymous users remain unchanged.
         return handler
     if AccountManager(self.env).verify_email and handler is not self and \
             'email_verification_token' in req.session and \
             not req.perm.has_permission('ACCTMGR_ADMIN'):
         # TRANSLATOR: Your permissions have been limited until you ...
         link = tag.a(_("verify your email address"),
                      href=req.href.verify_email())
         # TRANSLATOR: ... verify your email address
         chrome.add_warning(
             req,
             Markup(
                 tag.span(
                     Markup(
                         _("Your permissions have been limited until you %(link)s.",
                           link=link)))))
         req.perm = perm.PermissionCache(self.env, 'anonymous')
     return handler
class EmailVerificationModule(CommonTemplateProvider):
    """Performs email verification on every new or changed address.

    A working email sender for Trac (!TracNotification or !TracAnnouncer)
    is strictly required to enable this module's functionality.

    Anonymous users should register and perms should be tweaked, so that
    anonymous users can't edit wiki pages and change or create tickets.
    So this email verification code won't be used on them.
    """

    implements(IRequestFilter, IRequestHandler)

    verify_email = BoolOption(
        'account-manager', 'verify_email', True,
        doc="Verify the email address of Trac users.")

    def __init__(self, *args, **kwargs):
        self.email_enabled = True
        if self.config.getbool('announcer', 'email_enabled') and \
                self.config.getbool('notification', 'smtp_enabled'):
            self.email_enabled = False
            if self.env.is_enabled(self.__class__):
                self.log.warning("%s can't work because of missing email "
                                 "setup.", self.__class__.__name__)

    # IRequestFilter methods

    def pre_process_request(self, req, handler):
        if not req.authname or req.authname == 'anonymous':
            # Permissions for anonymous users remain unchanged.
            return handler
        elif req.path_info == '/prefs' and \
                        req.method == 'POST' and \
                        'restore' not in req.args and \
                        req.get_header(
                            'X-Requested-With') != 'XMLHttpRequest':
            try:
                AccountManager(self.env).validate_account(req)
                # Check passed without error: New email address seems good.
            except RegistrationError, e:
                # Always warn about issues.
                chrome.add_warning(req, e)
                # Look, if the issue existed before.
                attributes = get_user_attribute(self.env, req.authname,
                                                attribute='email')
                email = req.authname in attributes and \
                        attributes[req.authname][1].get('email') or None
                new_email = req.args.get('email', '').strip()
                if (email or new_email) and email != new_email:
                    # Attempt to change email to an empty or invalid
                    # address detected, resetting to previously stored value.
                    req.redirect(req.href.prefs(None))
        if self.verify_email and handler is not self and \
                'email_verification_token' in req.session and \
                'ACCTMGR_ADMIN' not in req.perm:
            # TRANSLATOR: Your permissions have been limited until you ...
            link = tag.a(_("verify your email address"),
                         href=req.href.verify_email())
            # TRANSLATOR: ... verify your email address
            chrome.add_warning(req,
                               tag_("Your permissions have been limited "
                                    "until you %(link)s.", link=link))
            req.perm = perm.PermissionCache(self.env, 'anonymous')
        return handler
示例#14
0
 def setUp(self):
     ProductPermissionCacheTestCase.setUp(self)
     nbh = Neighborhood('product', self.default_product)
     resource = nbh.child(None, None)
     self.perm = perm.PermissionCache(self.global_env, 'testuser', resource)