Ejemplo n.º 1
0
class ProfileTest(TestCase):
    def setUp(self):
        self.user = User(username="******", first_name="John", last_name="Doe")
        self.user.save()

        self.profile = Profile()
        self.profile.user = self.user
        self.profile.nickname = "doer"

        self.profile.save()

    def tearDown(self):
        self.profile.delete()
        self.user.delete()

    def test_get_fullname(self):
        self.assertEqual(self.user.get_profile().get_fullname(), "John Doe")

    def test_public_profile_url(self):
        x_url = reverse("person_public_profile", args=["xxx"])
        with_dash_url = reverse("person_public_profile", args=["abc-cde"])
        eq_(with_dash_url, x_url.replace("xxx", "abc-cde"))
        with_underscore_url = reverse("person_public_profile", args=["abc_de"])
        eq_(with_underscore_url, x_url.replace("xxx", "abc_de"))

    def test_fake_profile(self):
        resp = self.client.get(reverse("person_public_profile", args=["xxx"]))
        eq_(404, resp.status_code)
Ejemplo n.º 2
0
class ProfileTest(TestCase):

    def setUp(self):
        self.user = User(
            username='******',
            first_name='John',
            last_name='Doe'
        )
        self.user.save()

        self.profile = Profile()
        self.profile.user = self.user
        self.profile.nickname = 'doer'

        self.profile.save()

    def tearDown(self):
        self.profile.delete()
        self.user.delete()

    def test_get_fullname(self):
        self.assertEqual(self.user.get_profile().get_fullname(), 'John Doe')

    def test_public_profile_url(self):
        x_url = reverse('person_public_profile', args=['xxx'])
        with_dash_url = reverse('person_public_profile', args=['abc-cde'])
        eq_(with_dash_url, x_url.replace('xxx', 'abc-cde'))
    
    def test_fake_profile(self):
        resp = self.client.get(reverse('person_public_profile', args=['xxx']))
        eq_(404, resp.status_code)
Ejemplo n.º 3
0
    def authenticate(self, username, password):
        """
            Authenticate user by contacting with AMO
        """

        # TODO: Validate alphanum + .-_@

        # check if username exists in database
        try:
            user = User.objects.get(username=username)
            # was user signed up via AMO?
            if user.password != DEFAULT_AMO_PASSWORD:
                # standard authorisation
                if user.check_password(password):
                    try:
                        profile = user.get_profile()
                    except:
                        # create empty profile for users stored in FD database
                        profile = Profile(user=user)
                        profile.save()
                    return user
                return None
        except User.DoesNotExist:
            # username does not exist in FD database
            user = None

        if not settings.AUTH_DATABASE:
            return None

        # here contact AMO and receive authentication status
        email = username
        username = self.auth_db_authenticate(username, password)

        if not username:
            return None

        # check if user was already signed to FD
        try:
            user = User.objects.get(username=username)
            # update user's email if needed
            if user.email != email:
                user.email = email
                user.save()
        except:
            # save user into the database
            user = User(username=username, email=email, password=DEFAULT_AMO_PASSWORD)
            user.save()

        # Manage profile
        try:
            profile = user.get_profile()
        except Profile.DoesNotExist:
            profile = Profile(user=user)

        # update profile and return User instance
        return update_profile(user, profile, self.user_data)
Ejemplo n.º 4
0
    def setUp(self):
        self.user = User(
            username='******',
            first_name='John',
            last_name='Doe'
        )
        self.user.save()

        self.profile = Profile()
        self.profile.user = self.user
        self.profile.nickname = 'doer'

        self.profile.save()
Ejemplo n.º 5
0
    def post(self, request):
        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            try:
                user = authenticate(email=user.email,
                                    password=request.data['password'])
            except User.MultipleObjectsReturned:
                users = User.objects.filter(email=user.email)
                for u in users[1:]:
                    u.is_active = False
                    u.save()
                user = users[0]

            token, created = Token.objects.get_or_create(user=user)

            Profile(owner=user).save()
            ProfileImage(owner=user).save()
            current_site = get_current_site(request)
            domain = current_site.domain
            ''''q = UserRegistered()
            q.delay(ctx={'user_id':user.id,
                         'first_name': user.first_name,
                         'domain': domain,
                         'protocol': settings.PROTOCOL})
'''
            return Response({
                'token': token.key,
                'name': user.name
            },
                            status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 6
0
    def setUp(self):
        self.user = User(username="******", first_name="John", last_name="Doe")
        self.user.save()

        self.profile = Profile()
        self.profile.user = self.user
        self.profile.nickname = "doer"

        self.profile.save()
Ejemplo n.º 7
0
	def setUp(self):
		self.user = User(
			username='******',
			first_name='John',
			last_name='Doe'
		)
		self.user.save()

		self.profile = Profile()
		self.profile.user = self.user
		self.profile.nickname = 'doer'

		self.profile.save()
Ejemplo n.º 8
0
class ProfileTest(TestCase):

	def setUp(self):
		self.user = User(
			username='******',
			first_name='John',
			last_name='Doe'
		)
		self.user.save()

		self.profile = Profile()
		self.profile.user = self.user
		self.profile.nickname = 'doer'

		self.profile.save()
	
	def tearDown(self):
		self.profile.delete()
		self.user.delete()	

	def test_get_fullname(self):
		self.assertEqual(self.user.get_profile().get_fullname(), 'John Doe')
Ejemplo n.º 9
0
 def post(self, request):
     serializer = self.serializer_class(data=request.data)
     if serializer.is_valid():
         try:
             un_id = self.model.objects.get(un_id=serializer.data['un_id'])
             if un_id.owner.is_active:
                 token = self.token_model.objects.get_or_create(
                     user=un_id.owner)[0].key
                 un_id.owner.last_login = timezone.now()
                 un_id.owner.save(update_fields=['last_login'])
                 return Response(
                     {
                         'token': token,
                         'name': un_id.owner.name,
                         'email': un_id.owner.email,
                     },
                     status=status.HTTP_200_OK)
             else:
                 return Response({'error': ['This account is disabled.']},
                                 status=status.HTTP_401_UNAUTHORIZED)
         except self.model.DoesNotExist:
             user, created = self.user_model.objects.get_or_create(
                 email=serializer.data['email'])
             if created:
                 user.name = serializer.data['name']
                 user.is_active = True
                 user.save()
                 Profile(owner=user).save()
                 ProfileImage(owner=user).save()
             try:
                 obj, creat = self.model.objects.get_or_create(
                     un_id=serializer.data['un_id'], owner=user)
                 if not creat:
                     return Response({'error':'This token or email ID is already associated with other email ID or token resp.'},\
                                 status=status.HTTP_400_BAD_REQUEST)
             except:
                 return Response({'error':'This token or email ID is already associated with other email ID or token resp.'},\
                                 status=status.HTTP_400_BAD_REQUEST)
             token, created = Token.objects.get_or_create(user=user)
             return Response(
                 {
                     'token': token.key,
                     'name': user.name,
                     'email': user.email
                 },
                 status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 10
0
	def authenticate(self, username, password):
		"""
			Authenticate user by contacting with AMO
		"""
		
		# check if username exists in database
		try:
			user = User.objects.get(username=username)
			# was user signed up via AMO?
			if user.password != DEFAULT_AMO_PASSWORD:
				"******"		
				if user.check_password(password):
					try:
						profile = user.get_profile()
					except:
						profile = Profile(user=user)
						profile.save()
					return user
				return None
		except User.DoesNotExist:
			user = None

		if settings.AMO_LIMITED_ACCESS:
			if username not in [x.email for x in list(Limit.objects.all())]:
				return None

		# here contact AMO and receive authentication status
		br = Browser()
		br.open("https://addons.mozilla.org/en-US/firefox/users/login?to=en-US")
		
		br.select_form(nr=2)
		br['data[Login][email]'] = username
		br['data[Login][password]'] = password

		response = br.submit()
		response_url = response.geturl()
		valid_urls = [
					'https://addons.mozilla.org/en-US/firefox/', 
					'https://addons.mozilla.org/en-US/firefox'
		]
		if not response_url in valid_urls:
			return None
		
		link = br.find_link(text='View Profile')
		email = username
		# retrieve username from the View Profile link
		# https://addons.mozilla.org/en-US/firefox/user/123456/
		# AMO developers once removed the trailing slash which has broken the database
		# all FD users had the username 'user'
		# following is to prevent such failure in the future
		if link.url[-1] != '/':
			username = link.url.split('/')[-1]
		else:
			username = link.url.split('/')[-2]

		if not username or username =='user':
			raise Exception("Problems with View Profile link")
			
		
		try:
			user = User.objects.get(username=username)
			if user.email != email:
				user.email = email
				user.save()
		except:
			# save user into the database
			user = User(
				username=username,
				email=email,
				password=DEFAULT_AMO_PASSWORD,
			)
			user.save()
		
		# save current amo_session if different
		try:
			profile = user.get_profile()
		except Profile.DoesNotExist:
			# scrap initial profile data from AMO
			response = br.follow_link(text='Edit Profile')
			data = scrap_amo_profile(response)
			if 'firstname' in data:
				user.first_name = data['firstname']
			if 'lastname' in data:
				user.last_name = data['lastname']
			user.save()
			
			profile = Profile(user=user)
			if 'nickname' in data:
				profile.nickname = data['nickname']
			if 'location' in data:
				profile.location = data['location']
			if 'occupation' in data:
				profile.occupation = data['occupation']
			if 'homepage' in data:
				profile.homepage = data['homepage']
			if 'photo' in data:
				profile.homepage = data['photo']

			profile.save()

		return user
Ejemplo n.º 11
0
class ProfileTest(TestCase):

    def setUp(self):
        self.user = User(
            username='******',
            first_name='John',
            last_name='Doe'
        )
        self.user.save()

        self.profile = Profile()
        self.profile.user = self.user
        self.profile.nickname = 'doer'

        self.profile.save()

    def tearDown(self):
        self.profile.delete()
        self.user.delete()

    def test_get_fullname(self):
        self.assertEqual(self.user.get_profile().get_fullname(), 'John Doe')

    def test_public_profile_url(self):
        x_url = reverse('person_public_profile', args=['xxx'])
        with_dash_url = reverse('person_public_profile', args=['abc-cde'])
        eq_(with_dash_url, x_url.replace('xxx', 'abc-cde'))
        with_underscore_url = reverse('person_public_profile', args=['abc_de'])
        eq_(with_underscore_url, x_url.replace('xxx', 'abc_de'))

    def test_public_utf_profile_url(self):
        user = User.objects.create(username='******')
        profile = Profile.objects.create(user=user, nickname='ąbc')
        response = self.client.get('/user/ąbc/')
        eq_(response.status_code, 200)

    def test_dashboard_utf(self):
        user = User.objects.create(username='******')
        profile = Profile.objects.create(user=user, nickname='ąbc')
        user.set_password('secure')
        user.save()
        self.client.login(username=user.username, password='******')
        response = self.client.get(reverse('person_dashboard'))
        eq_(response.status_code, 200)

    def test_user_with_question_mark(self):
        user = User.objects.create(username='******')
        profile = Profile.objects.create(user=user, nickname='b?c')
        # profile
        response = self.client.get(profile.get_addons_url())
        eq_(response.status_code, 200)
        # dashboard
        user.set_password('secure')
        user.save()
        self.client.login(username=user.username, password='******')
        response = self.client.get(reverse('person_dashboard'))
        eq_(response.status_code, 200)
        eq_(profile.get_profile_url(), '/user/%s/' % user.username)

    def test_fake_profile(self):
        resp = self.client.get(reverse('person_public_profile', args=['xxx']))
        eq_(404, resp.status_code)