Example #1
0
    def test_token_generation(self):
        from models import AuthToken

        # we want each token to be different as the same user can have more than one if they have multiple devices
        token = AuthToken.gen_token_string('[email protected]')
        same_token = AuthToken.gen_token_string('[email protected]')
        different_token = AuthToken.gen_token_string('[email protected]')

        self.assertIs(False, token == same_token)
        self.assertIs(False, token == different_token)
Example #2
0
    def test_my_ranking_weekly(self):
        from models import User, AuthToken, UserStats
        from django.test import RequestFactory
        from django.core.urlresolvers import reverse
        from views import my_ranking_weekly

        users = []
        for i in range(10):
            u = User()
            u.email = '*****@*****.**' + str(i)
            u.public_name = 'TEST' + str(i)
            u.save()
            users.append(u)
            UserStats.record_stats(u, i * 100, datetime.date.today())

        auth = AuthToken()
        auth.token_string = AuthToken.gen_token_string('*****@*****.**')
        auth.user = users[9]
        auth.valid = True
        auth.save()

        factory = RequestFactory()

        rq = factory.get(reverse('my_ranking_weekly'),
                         data={'token': auth.token_string})

        response = my_ranking_weekly(rq)

        data = json.loads(response.content)

        self.assertEqual(data['status'], 'OK')
Example #3
0
    def test_update_profile(self):
        from models import User, AuthToken
        from django.test import RequestFactory
        from django.core.urlresolvers import reverse
        from views import update_profile

        u = User()
        u.email = '*****@*****.**'
        u.public_name = 'TEST'
        u.save()

        auth = AuthToken()
        auth.token_string = AuthToken.gen_token_string('*****@*****.**')
        auth.user = u
        auth.valid = True
        auth.save()

        factory = RequestFactory()

        rq = factory.get(reverse('update_profile'),
                         data={
                             'token': auth.token_string,
                             'nickname': 'El Nicknamo'
                         })
        response = update_profile(rq)
        data = json.loads(response.content)
        self.assertEqual(data['status'], 'OK')
        u = User.objects.get(pk=u.pk)
        self.assertEqual(u.public_name, 'El Nicknamo')
Example #4
0
    def test_log_distance(self):
        from models import User, AuthToken, Level, StairWell
        from django.test import RequestFactory
        from django.core.urlresolvers import reverse
        from views import log_distance, distance, profile

        u = User()
        u.email = '*****@*****.**'
        u.public_name = 'TEST'
        u.save()

        auth = AuthToken()
        auth.token_string = AuthToken.gen_token_string('*****@*****.**')
        auth.user = u
        auth.valid = True
        auth.save()

        sw = StairWell(building='ASP', shaft='south')
        sw.save()
        level1 = Level(stairwell=sw, floorNumber=1)
        level1.save()
        level2 = Level(stairwell=sw, floorNumber=2)
        level2.save()

        factory = RequestFactory()

        rq = factory.get(reverse('distance'),
                         data={
                             'qr_id_1': level1.pk,
                             'qr_id_2': level2.pk
                         })

        response = distance(rq)

        data = json.loads(response.content)
        self.assertEqual(data['distance'], 18)

        rq = factory.get(reverse('log_distance'),
                         data={
                             'token': auth.token_string,
                             'steps': 18
                         })
        response = log_distance(rq)
        data = json.loads(response.content)
        self.assertEqual(data['status'], 'OK')

        rq = factory.get(reverse('profile'), data={'token': auth.token_string})
        response = profile(rq)
        data = json.loads(response.content)
        self.assertEqual(data['status'], 'OK')
Example #5
0
def auth(request):
    token_param = request.GET.get('token')
    email_param = request.GET['email']
    # device name/identifier
    device_param = request.GET.get('device')

    email_param = email_param.lower()

    if token_param is None:  # register new token

        if not settings.ENABLE_REGISTRATION:
            return JsonResponse({'status': 'REGISTRATION_DISABLED'})

        if not email.is_email_valid(email_param) or not email_param.endswith('europa.eu'):
            return JsonResponse({'status': 'INVALID_EMAIL'})

        user_list = User.objects.filter(email=email_param)

        if not user_list:
            u = User(email=email_param)
            u.reset_public_name()
            u.save()
        else:
            u = user_list[0]

        if email.is_spamming(u.email):
            return JsonResponse({'status': 'CANCELED_BY_SPAM_PREVENTION'})

        token = AuthToken(token_string=AuthToken.gen_token_string(email_param), user=u)
        token.gen_validation_key()
        token.save()



        token.send_validation_mail(public_url='https://' + request.META.get('HTTP_HOST', settings.PUBLIC_URL))
        token.save()

        return JsonResponse({'token': token.token_string, 'status': 'OK'})
    else:  # actual auth
        token_list = AuthToken.objects.filter(token_string=token_param)
        if len(token_list) == 0:
            return JsonResponse({'status': 'TOKEN_NOT_FOUND'})

        token = token_list[0]

        if token.valid is False:
            return JsonResponse({'status': 'TOKEN_NOT_ACTIVATED'})
        if token.valid and email_param == token.user.email:
            return JsonResponse({'status': 'OK', 'public_name': token.user.public_name})
Example #6
0
    def test_send_mail(self):
        from models import AuthToken, User
        from django.core import mail

        u = User()
        u.email = '*****@*****.**'
        u.save()

        auth = AuthToken()
        auth.user = u
        auth.token = AuthToken.gen_token_string('*****@*****.**')
        auth.gen_validation_key()

        auth.send_validation_mail(settings.PUBLIC_URL)
        self.assertEqual(len(mail.outbox),
                         1,
                         msg='is settings.EMAILS_ENABLED set to True ?')
Example #7
0
    def test_token_validation(self):
        from models import AuthToken, User

        u = User()
        u.email = 'rururur'
        u.save()

        auth = AuthToken()
        auth.user = u
        auth.token = AuthToken.gen_token_string(email='[email protected]')

        auth.gen_validation_key()

        self.assertIsNotNone(auth.validation_key)
        self.assertFalse(auth.valid)

        self.assertIs(True, auth.validate(auth.validation_key))

        self.assertIs(True, auth.valid)