Esempio n. 1
0
    def setUp(self):
        _BaseTestCase.setUp(self)
        self.env = EnvironmentStub(
            enable=['trac.*', 'acct_mgr.api.*', 'acct_mgr.register.*'])
        self.env.path = tempfile.mkdtemp()

        args = dict(username='******', name='', email='')
        incookie = Cookie()
        incookie['trac_session'] = '123456'
        self.req = Mock(authname='user',
                        args=args,
                        base_path='/',
                        chrome=dict(warnings=list()),
                        href=Mock(prefs=lambda x: None),
                        incookie=incookie,
                        outcookie=Cookie(),
                        redirect=lambda x: None)
        self.req.method = 'POST'
        self.req.path_info = '/prefs'
        self.req.session = Session(self.env, self.req)
        self.req.session['email'] = '*****@*****.**'
        self.req.session.save()
        self.vmod = EmailVerificationModule(self.env)
Esempio n. 2
0
    def setUp(self):
        _BaseTestCase.setUp(self)
        self.env = EnvironmentStub(
                enable=['trac.*', 'acct_mgr.api.*', 'acct_mgr.register.*'])
        self.env.path = tempfile.mkdtemp()

        args = dict(username='******', name='', email='')
        incookie = Cookie()
        incookie['trac_session'] = '123456'
        self.req = Mock(authname='user', args=args, base_path='/',
                        chrome=dict(warnings=list()),
                        href=Mock(prefs=lambda x: None),
                        incookie=incookie, outcookie=Cookie(),
                        redirect=lambda x: None)
        self.req.method = 'POST'
        self.req.path_info = '/prefs'
        self.req.session = Session(self.env, self.req)
        self.req.session['email'] = '*****@*****.**'
        self.req.session.save()
        self.vmod = EmailVerificationModule(self.env)
Esempio n. 3
0
class EmailVerificationModuleTestCase(_BaseTestCase):
    """Verify email address validation when running account verification."""
    def setUp(self):
        _BaseTestCase.setUp(self)
        self.env = EnvironmentStub(
            enable=['trac.*', 'acct_mgr.api.*', 'acct_mgr.register.*'])
        self.env.path = tempfile.mkdtemp()

        args = dict(username='******', name='', email='')
        incookie = Cookie()
        incookie['trac_session'] = '123456'
        self.req = Mock(authname='username',
                        args=args,
                        base_path='/',
                        chrome=dict(warnings=list()),
                        href=Mock(prefs=lambda x: None),
                        get_header=lambda k: None,
                        incookie=incookie,
                        outcookie=Cookie(),
                        redirect=lambda x: None)
        self.req.method = 'POST'
        self.req.path_info = '/prefs'
        self.req.session = Session(self.env, self.req)
        self.req.session['email'] = '*****@*****.**'
        self.req.session.save()
        self.vmod = EmailVerificationModule(self.env)

    def test_check_email_used(self):
        set_user_attribute(self.env, 'admin', 'email', '*****@*****.**')
        # Try email, that is already associated to another user.
        self.req.args['email'] = '*****@*****.**'
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertTrue(
            string.find(str(warnings and warnings[0] or ''), 'already in use')
            > 0)

    def test_check_no_email(self):
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertNotEqual(str(warnings and warnings[0] or ''), '')

    def test_check(self):
        self.req.args['email'] = '*****@*****.**'
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertEqual(str(warnings and warnings[0] or ''), '')
class EmailVerificationModuleTestCase(_BaseTestCase):
    """Verify email address validation when running account verification."""

    def setUp(self):
        _BaseTestCase.setUp(self)
        self.env = EnvironmentStub(
            enable=['trac.*', 'acct_mgr.api.*', 'acct_mgr.register.*'])
        self.env.path = tempfile.mkdtemp()

        args = dict(username='******', name='', email='')
        incookie = Cookie()
        incookie['trac_session'] = '123456'
        self.req = Mock(authname='username', args=args, base_path='/',
                        chrome=dict(warnings=list()),
                        href=Mock(prefs=lambda x: None),
                        get_header=lambda k: None,
                        incookie=incookie, outcookie=Cookie(),
                        redirect=lambda x: None)
        self.req.method = 'POST'
        self.req.path_info = '/prefs'
        self.req.session = Session(self.env, self.req)
        self.req.session['email'] = '*****@*****.**'
        self.req.session.save()
        self.vmod = EmailVerificationModule(self.env)

    def test_check_email_used(self):
        set_user_attribute(self.env, 'admin', 'email', '*****@*****.**')
        # Try email, that is already associated to another user.
        self.req.args['email'] = '*****@*****.**'
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertTrue(string.find(str(warnings and warnings[0] or ''),
                                    'already in use') > 0)

    def test_check_no_email(self):
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertNotEqual(str(warnings and warnings[0] or ''), '')

    def test_check(self):
        self.req.args['email'] = '*****@*****.**'
        self.vmod.pre_process_request(self.req, None)
        warnings = self.req.chrome.get('warnings')
        self.assertEqual(str(warnings and warnings[0] or ''), '')
Esempio n. 5
0
    def _do_users(self, req):
        env = self.env
        perm = PermissionSystem(env)
        acctmgr = self.acctmgr
        acctmod = AccountModule(env)
        guard = self.guard
        listing_enabled = acctmgr.supports('get_users')
        create_enabled = acctmgr.supports('set_password')
        password_change_enabled = acctmgr.supports('set_password')
        password_reset_enabled = acctmod.reset_password_enabled
        delete_enabled = acctmgr.supports('delete_user')
        verify_enabled = acctmgr.verify_email and \
                         EmailVerificationModule(env).email_enabled

        account = dict(email=req.args.get('email', '').strip(),
                       name=req.args.get('name', '').strip(),
                       username=acctmgr.handle_username_casing(
                           req.args.get('username', '').strip()))
        data = {
            '_dgettext': dgettext,
            'acctmgr': account,
            'email_approved': True,
            'listing_enabled': listing_enabled,
            'create_enabled': create_enabled,
            'delete_enabled': delete_enabled,
            'verify_enabled': verify_enabled,
            'ignore_auth_case': self.config.getbool('trac',
                                                    'ignore_auth_case'),
            'password_change_enabled': password_change_enabled,
            'password_reset_enabled': password_reset_enabled
        }
        if req.method == 'GET':
            if 'user' in req.args.iterkeys():
                return self._do_acct_details(req)
            elif req.args.get('max_per_page'):
                return self._do_db_cleanup(req)

        if req.method == 'POST':
            email_approved = req.args.get('email_approved')
            # Preserve selection during a series of requests.
            data['email_approved'] = email_approved

            if req.args.get('add'):
                # Add new user account.
                if create_enabled:
                    # Check request and prime account on success.
                    try:
                        acctmgr.validate_registration(req)
                        # Account email approval for authoritative action.
                        if verify_enabled and email_approved and \
                                account['email']:
                            set_user_attribute(env, account['username'],
                                               'email_verification_sent_to',
                                               account['email'])
                        # User editor form clean-up.
                        data['acctmgr'] = {}
                    except RegistrationError, e:

                        # Attempt deferred translation.
                        message = gettext(e.message)
                        # Check for (matching number of) message arguments
                        #   before attempting string substitution.
                        if e.msg_args and \
                                len(e.msg_args) == len(re.findall('%s',
                                                                  message)):
                            message = message % e.msg_args
                        data['editor_error'] = Markup(message)
                else:
                    data['editor_error'] = _(
                        "The password store does not support creating users.")
            elif req.args.get('reset') and req.args.get('sel'):
                # Password reset for one or more accounts.
                if password_reset_enabled:
                    sel = req.args.get('sel')
                    sel = isinstance(sel, list) and sel or [sel]
                    for username, name, email in env.get_known_users():
                        if username in sel:
                            acctmod._reset_password(username, email)
                else:
                    data['deletion_error'] = _(
                        "The password reset procedure is not enabled.")
            elif req.args.get('remove') and req.args.get('sel'):
                # Delete one or more accounts.
                if delete_enabled:
                    sel = req.args.get('sel')
                    sel = isinstance(sel, list) and sel or [sel]
                    for account in sel:
                        acctmgr.delete_user(account)
                else:
                    data['deletion_error'] = _(
                        "The password store does not support deleting users.")
            elif req.args.get('change'):
                # Change attributes and or password of existing user account.
                attributes = {
                    'email': _("Email Address"),
                    'name': _("Pre-/Surname (Nickname)"),
                    'password': _("Password")
                }
                data['success'] = []
                error = TracError('')
                username = acctmgr.handle_username_casing(
                    req.args.get('username').strip())
                try:
                    if not username:
                        error.account = {'username': username}
                        error.message = _("Username cannot be empty.")
                        raise error

                    if not acctmgr.has_user(username):
                        error.account = {'username': username}
                        error.message = _("Unknown user %(user)s.",
                                          user=username)
                        raise error

                    password = req.args.get('password')
                    if password and (password.strip() != ''):
                        if password_change_enabled:
                            if password != req.args.get('password_confirm'):
                                error.message = _("The passwords must match.")
                                raise error
                            acctmgr.set_password(username, password)
                            data['success'].append(attributes.get('password'))
                        else:
                            data['editor_error'] = _(
                                """The password store does not support
                                changing passwords.
                                """)
                    for attribute in ('name', 'email'):
                        value = req.args.get(attribute, '').strip()
                        if value:
                            set_user_attribute(env, username, attribute, value)
                            data['success'].append(attributes.get(attribute))
                            # Account email approval for authoritative action.
                            if attribute == 'email' and verify_enabled and \
                                    email_approved:
                                set_user_attribute(
                                    env, username,
                                    'email_verification_sent_to', value)
                    # User editor form clean-up on success.
                    data['acctmgr'] = {}
                except TracError, e:
                    data['editor_error'] = e.message
                    data['acctmgr'] = getattr(e, 'account', '')