Exemple #1
0
 def test_sync_existing_without_id(self):
     us = User(email=self.user['email'])
     us.put()
     self.sync()
     us = User.all().filter('__key__ =', us.key()).fetch(1)[0]
     eq_(us.first_name, self.user['name_first'])
     eq_(us.last_name, self.user['name_last'])
     eq_(us.email, self.user['email'])
     eq_(us.dj_name, self.user['nick'])
     eq_(us.external_id, self.user['member_id'])
     eq_(us.is_superuser, False)
     eq_(us.is_active, True)
     eq_(us.roles, [roles.DJ])
     eq_(User.all().filter('email =', self.user['email']).count(2), 1)
Exemple #2
0
    def test_user_edit_form_change_password(self):
        steve = User(email='*****@*****.**',
                     first_name='Steve',
                     last_name='Dolfin',
                     dj_name='DJ Steve',
                     roles=['dj'],
                     is_active=True,
                     password='******')
        steve.save()

        resp = self.client.post(
            '/auth/edit_user/',
            {
                'original_email': '*****@*****.**',  # this is the key
                'email': '*****@*****.**',
                'first_name': 'Steve',
                'last_name': 'Dolfin',
                'dj_name': 'DJ Seteve',
                'is_active': 'checked',
                'is_dj': 'checked',
                # new password
                'password': '******'
            })
        self.assertNoFormErrors(resp)

        user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
        # password was changed:
        self.assertEqual(user.check_password('1234567'), True)
Exemple #3
0
    def test_user_edit_form(self):
        steve = User(
            email='*****@*****.**',
            first_name='Steve',
            last_name='Dolfin',
            dj_name='DJ Steve',
            roles=['dj'],
            is_active=True,
            password='******'  # pretend this is encrypted
        )
        steve.save()

        resp = self.client.post(
            '/auth/edit_user/',
            {
                'original_email': '*****@*****.**',  # this is the key
                'email': '*****@*****.**',
                'first_name': 'Steven',
                'last_name': 'Dolfin III',
                'dj_name': 'Steve Holt!',
                'is_active': 'checked',
                # change roles:
                'is_volunteer_coordinator': 'checked'
            })
        self.assertNoFormErrors(resp)

        user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
        self.assertEqual(user.first_name, 'Steven')
        self.assertEqual(user.last_name, 'Dolfin III')
        self.assertEqual(user.dj_name, 'Steve Holt!')
        self.assertEqual(user.roles, ['volunteer_coordinator'])
        self.assertEqual(user.password, '123456')  # should be untouched
 def test_user_edit_form(self):
     steve = User(
         email='*****@*****.**',
         first_name='Steve',
         last_name='Dolfin',
         dj_name='DJ Steve',
         roles=['dj'],
         is_active=True,
         password='******' # pretend this is encrypted
     )
     steve.save()
     
     resp = self.client.post('/auth/edit_user/', {
         'original_email': '*****@*****.**', # this is the key
         'email': '*****@*****.**',
         'first_name': 'Steven',
         'last_name': 'Dolfin III',
         'dj_name': 'Steve Holt!',
         'is_active': 'checked',
         # change roles:
         'is_volunteer_coordinator': 'checked'
     })
     self.assertNoFormErrors(resp)
     
     user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
     self.assertEqual(user.first_name, 'Steven')
     self.assertEqual(user.last_name, 'Dolfin III')
     self.assertEqual(user.dj_name, 'Steve Holt!')
     self.assertEqual(user.roles, ['volunteer_coordinator'])
     self.assertEqual(user.password, '123456') # should be untouched
Exemple #5
0
def clear_data():
    for pl in Playlist.all():
        for track in PlaylistTrack.all().filter('playlist =', pl):
            track.delete()
        pl.delete()
    for u in User.all():
        u.delete()
    def test_user_edit_form_change_password(self):
        steve = User(
            email='*****@*****.**',
            first_name='Steve',
            last_name='Dolfin',
            dj_name='DJ Steve',
            roles=['dj'],
            is_active=True,
            password='******'
        )
        steve.save()
        
        resp = self.client.post('/auth/edit_user/', {
            'original_email': '*****@*****.**', # this is the key
            'email': '*****@*****.**',
            'first_name': 'Steve',
            'last_name': 'Dolfin',
            'dj_name': 'DJ Seteve',
            'is_active': 'checked',
            'is_dj': 'checked',
            # new password
            'password': '******'
        })
        self.assertNoFormErrors(resp)

        user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
        # password was changed:
        self.assertEqual(user.check_password('1234567'), True)
Exemple #7
0
 def test_preserve_superuser(self):
     us = User(email=self.user['email'],
               external_id=self.user['member_id'],
               is_superuser=True)
     us.put()
     self.sync()
     us = User.all().filter('__key__ =', us.key()).fetch(1)[0]
     eq_(us.is_superuser, True)
Exemple #8
0
 def test_sync_existing_with_dj_role(self):
     us = User(email=self.user['email'],
               external_id=self.user['member_id'],
               roles=[roles.DJ, roles.REVIEWER])
     us.put()
     self.sync()
     us = User.all().filter('__key__ =', us.key()).fetch(1)[0]
     eq_(set(us.roles), set((roles.DJ, roles.REVIEWER)))
def index_users(request):
    for user in User.all() :
        _reindex(user)
        user.save()

    tmpl = loader.get_template('auth/main_page.html')
    all_users = list(User.all().order('last_name').order('first_name'))
    num_active_users = sum(u.is_active for u in all_users)
    active = [u for u in all_users if u.is_active]
    inactive = [u for u in all_users if not u.is_active]
    ctx = RequestContext(request, {
            'title': 'User Management',
            'all_users': active + inactive,
            'num_active_users': num_active_users,
            'msg' : 'Users indexed.'
          })
    return http.HttpResponse(tmpl.render(ctx))
Exemple #10
0
    def test_deactivate(self):
        us = User(email='*****@*****.**', external_id=23)
        us.put()

        resp = self.client.post(self.url, {'external_id': 23})
        eq_(resp.status_code, 200)
        us = User.all().filter('__key__ =', us.key()).fetch(1)[0]
        eq_(us.is_active, False)
Exemple #11
0
def sync_user(request):
    user = request.POST.get('user')
    if not user:
        return http.HttpResponseBadRequest()
    user = json.loads(user)

    qs = User.all().filter('external_id =', user['member_id'])
    users = qs.fetch(1)
    dj_user = None
    if len(users):
        dj_user = users[0]
    else:
        # No previously sync'd user exists.
        # Let's check by email to see if an old
        # user exists with the same email.
        qs = User.all().filter('email =', user['email'])
        if qs.count(2) == 2:
            raise LookupError('More than one user for %s; '
                              'aborting sync' % user['email'])
        users = qs.fetch(1)
        if len(users):
            log.info('Linking user %s to ID %s' %
                     (user['email'], user['member_id']))
            dj_user = users[0]

    fields = {
        'first_name': user['name_first'],
        'last_name': user['name_last'],
        'email': user['email'],
        'dj_name': user['nick'],
        'external_id': user['member_id'],
        'is_active': True,
    }
    if not dj_user:
        fields['roles'] = [roles.DJ]
        dj_user = User(**fields)
    else:
        for k, v in fields.items():
            setattr(dj_user, k, v)
        if roles.DJ not in dj_user.roles:
            dj_user.roles.append(roles.DJ)
    _reindex(dj_user)
    dj_user.put()

    return http.HttpResponse('OK')
Exemple #12
0
def index_users(request):
    for user in User.all():
        _reindex(user)
        user.save()

    tmpl = loader.get_template('auth/main_page.html')
    all_users = list(User.all().order('last_name').order('first_name'))
    num_active_users = sum(u.is_active for u in all_users)
    active = [u for u in all_users if u.is_active]
    inactive = [u for u in all_users if not u.is_active]
    ctx = RequestContext(
        request, {
            'title': 'User Management',
            'all_users': active + inactive,
            'num_active_users': num_active_users,
            'msg': 'Users indexed.'
        })
    return http.HttpResponse(tmpl.render(ctx))
Exemple #13
0
 def test_sync_new(self):
     self.sync()
     us = User.all()[0]
     eq_(us.first_name, self.user['name_first'])
     eq_(us.last_name, self.user['name_last'])
     eq_(us.email, self.user['email'])
     eq_(us.dj_name, self.user['nick'])
     eq_(us.external_id, self.user['member_id'])
     eq_(us.is_superuser, False)
     eq_(us.is_active, True)
     eq_(us.roles, [roles.DJ])
     assert us.index, 'User was not indexed'
    def authenticate(self, username=None, password=None):

        if not (username and password):
            return False

        u = User.all()\
            .filter("username ="******"password =", hash_password(password))
        
        try:
            return u.fetch(1)[0]
        except IndexError:
            return None
 def test_create_user_with_initial_password(self):
     resp = self.client.post('/auth/add_user/', {
         'email': '*****@*****.**',
         'first_name': 'Bob',
         'last_name': 'Jones',
         'dj_name': 'Dr. Jones',
         'password': "******",
         'is_dj': 'checked'
     })
     self.assertNoFormErrors(resp)
     
     user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
     # password was set:
     self.assertEqual(user.check_password('my-initial-password'), True)
Exemple #16
0
    def test_create_user_with_initial_password(self):
        resp = self.client.post(
            '/auth/add_user/', {
                'email': '*****@*****.**',
                'first_name': 'Bob',
                'last_name': 'Jones',
                'dj_name': 'Dr. Jones',
                'password': "******",
                'is_dj': 'checked'
            })
        self.assertNoFormErrors(resp)

        user = User.all().filter('email =', '*****@*****.**').fetch(1)[0]
        # password was set:
        self.assertEqual(user.check_password('my-initial-password'), True)
 def test_email_is_case_insensitive_on_creation(self):
     resp = self.client.post('/auth/add_user/', {
         'email': '*****@*****.**',
         'first_name': 'Steve',
         'last_name': 'Dolfin',
         'dj_name': 'DJ Steve',
         'is_dj': 'checked'
     })
     self.assertNoFormErrors(resp)
     
     u = User.all().filter('last_name =', 'Dolfin').fetch(1)[0]
     self.assertEqual(u.email, '*****@*****.**')
     self.assertEqual(u.dj_name, 'DJ Steve')
     self.assertEqual(u.roles, ['dj'])
     self.assertEqual(u.password, None) # password prompt was emailed to user
def user_search_for_autocomplete(request):
    match_users = []
    response = http.HttpResponse(mimetype="text/plain")
    terms = [term for term in search.scrub(request.GET.get('q', '')).split()]
    for term in terms:
        query = User.all()
        query.filter("is_active =", True).filter("index =", term)
        users = AutoRetry(query).fetch(999)
        if (len(users) > 0):
            for user in users:
                match_users.append(user)
            break
    for user in match_users :
        response.write("%s|%s\n" % (user, user.key()))
        if user.dj_name is not None:
            response.write("%s|%s\n" % (user.dj_name, user.key()))
    return response
Exemple #19
0
def user_search_for_autocomplete(request):
    match_users = []
    response = http.HttpResponse(mimetype="text/plain")
    terms = [term for term in search.scrub(request.GET.get('q', '')).split()]
    for term in terms:
        query = User.all()
        query.filter("is_active =", True).filter("index =", term)
        users = AutoRetry(query).fetch(999)
        if (len(users) > 0):
            for user in users:
                match_users.append(user)
            break
    for user in match_users:
        response.write("%s|%s\n" % (user, user.key()))
        if user.dj_name is not None:
            response.write("%s|%s\n" % (user.dj_name, user.key()))
    return response
Exemple #20
0
    def test_email_is_case_insensitive_on_creation(self):
        resp = self.client.post(
            '/auth/add_user/', {
                'email': '*****@*****.**',
                'first_name': 'Steve',
                'last_name': 'Dolfin',
                'dj_name': 'DJ Steve',
                'is_dj': 'checked'
            })
        self.assertNoFormErrors(resp)

        u = User.all().filter('last_name =', 'Dolfin').fetch(1)[0]
        self.assertEqual(u.email, '*****@*****.**')
        self.assertEqual(u.dj_name, 'DJ Steve')
        self.assertEqual(u.roles, ['dj'])
        self.assertEqual(u.password,
                         None)  # password prompt was emailed to user
def main_page(request):
    tmpl = loader.get_template('auth/main_page.html')
    all_users = list(User.all().order('last_name').order('first_name'))

    msg = ''
    
    """Send password reset emails to selected users."""
    if request.method == 'POST' :
        if request.POST.get('SendPwdEmails') :
            num_emails = 0;
            for i, user in enumerate(all_users) :
                if request.POST.get('checkbox_%d' % (i + 1)) :
                    num_emails += 1
                    
                    # Assemble the URL that can be used to access the password
                    # reset form.
                    token = auth.get_password_reset_token(user)
                    url = 'http://%s/auth/reset_password?token=%s' % (
                        os.environ['HTTP_HOST'], token)
                    logging.warn('Sent password recovery URL: %s', url)

                    # Send the email message.
                    msg_tmpl = loader.get_template('auth/reset_password_email.txt')
                    msg_ctx = Context({'user': user, 'url': url})
                    msg_body = msg_tmpl.render(msg_ctx)
#                    print msg_body
                    email.send_to_user(
                        user,
                        subject='Please Set/Reset your CHIRP password',
                        body=msg_body)
            if num_emails :
                msg = 'Email(s) sent.'
             

    """Lists all users."""
    num_active_users = sum(u.is_active for u in AutoRetry(all_users))
    active = [u for u in AutoRetry(all_users) if u.is_active]
    inactive = [u for u in AutoRetry(all_users) if not u.is_active]
    ctx = RequestContext(request, {
            'title': 'User Management',
            'all_users': active + inactive,
            'num_active_users': num_active_users,
            'msg' : msg
            })
    return http.HttpResponse(tmpl.render(ctx))
Exemple #22
0
def main_page(request):
    tmpl = loader.get_template('auth/main_page.html')
    all_users = list(User.all().order('last_name').order('first_name'))

    msg = ''
    """Send password reset emails to selected users."""
    if request.method == 'POST':
        if request.POST.get('SendPwdEmails'):
            num_emails = 0
            for i, user in enumerate(all_users):
                if request.POST.get('checkbox_%d' % (i + 1)):
                    num_emails += 1

                    # Assemble the URL that can be used to access the password
                    # reset form.
                    token = auth.get_password_reset_token(user)
                    url = 'http://%s/auth/reset_password?token=%s' % (
                        os.environ['HTTP_HOST'], token)
                    logging.warn('Sent password recovery URL: %s', url)

                    # Send the email message.
                    msg_tmpl = loader.get_template(
                        'auth/reset_password_email.txt')
                    msg_ctx = Context({'user': user, 'url': url})
                    msg_body = msg_tmpl.render(msg_ctx)
                    #                    print msg_body
                    email.send_to_user(
                        user,
                        subject='Please Set/Reset your CHIRP password',
                        body=msg_body)
            if num_emails:
                msg = 'Email(s) sent.'
    """Lists all users."""
    num_active_users = sum(u.is_active for u in AutoRetry(all_users))
    active = [u for u in AutoRetry(all_users) if u.is_active]
    inactive = [u for u in AutoRetry(all_users) if not u.is_active]
    ctx = RequestContext(
        request, {
            'title': 'User Management',
            'all_users': active + inactive,
            'num_active_users': num_active_users,
            'msg': msg
        })
    return http.HttpResponse(tmpl.render(ctx))
Exemple #23
0
def deactivate_user(request):
    id = request.POST.get('external_id')
    if not id:
        log.info('external_id not found in POST')
        return http.HttpResponseBadRequest()
    qs = User.all().filter('external_id =', int(id))
    users = qs.fetch(1)
    if not len(users):
        log.info('no user exists with external_id %s' % id)
        # This is okay. We'll deactivate them next time.
        # Return a 200 here otherwise the task will be retried.
        return http.HttpResponse('No one deactivated')

    dj_user = users[0]
    dj_user.is_active = False
    dj_user.put()
    log.info('Deactivated user %s %s' % (dj_user, dj_user.email))

    return http.HttpResponse('OK')
 def setUp(self):
     for obj in User.all():
         obj.delete()
Exemple #25
0
 def get_selector(self):
     return User.all().filter('email =', '*****@*****.**')[0]
Exemple #26
0
 def setUp(self):
     for u in User.all():
         u.delete()
     assert self.client.login(email="*****@*****.**",
                              roles=[roles.VOLUNTEER_COORDINATOR])
 def setUp(self):
     for u in User.all():
         u.delete()
Exemple #28
0
 def setUp(self):
     for obj in User.all():
         obj.delete()
Exemple #29
0
 def tearDown(self):
     for ob in User.all():
         ob.delete()
 def setUp(self):
     for u in User.all().fetch(1000):
         u.delete()
 def setUp(self):
     for u in User.all():
         u.delete()
     assert self.client.login(email="*****@*****.**", roles=[roles.VOLUNTEER_COORDINATOR])
Exemple #32
0
 def get_selector(self):
     return User.all().filter('email =', '*****@*****.**')[0]
Exemple #33
0
 def setUp(self):
     for u in User.all().fetch(1000):
         u.delete()