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)
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)
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)
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 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)
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()
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 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)
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
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)