示例#1
0
文件: tests.py 项目: bopopescu/pd
def create_primary_email(user, email):
    ea = EmailAddress()
    ea.user=user
    ea.email=email
    ea.verified=True
    ea.primary=True
    ea.save()
示例#2
0
def load_extra_data(backend,
                    details,
                    response,
                    uid,
                    user,
                    social_user=None,
                    *args,
                    **kwargs):
    """Load extra data from provider and store it on current UserSocialAuth
    extra_data field.
    """
    social_user = social_user or \
                  UserSocialAuth.get_social_auth(backend.name, uid)

    if kwargs['is_new'] and PROFILE_EMAIL_CONFIRMATION:
        emailaddress = EmailAddress(**{
            'user': user,
            'email': user.email,
            'verified': True,
            'primary': True
        })
        emailaddress.save()

    if social_user:
        extra_data = backend.extra_data(user, uid, response, details)
        if kwargs.get('original_email') and 'email' not in extra_data:
            extra_data['email'] = kwargs.get('original_email')
        if extra_data and social_user.extra_data != extra_data:
            if social_user.extra_data:
                social_user.extra_data.update(extra_data)
            else:
                social_user.extra_data = extra_data
            social_user.save()

        if backend.name == 'facebook' and kwargs['is_new']:
            response = json.loads(
                requests.get(
                    'https://graph.facebook.com/%s?access_token=%s' %
                    (extra_data['id'], extra_data['access_token'])).content)

            try:
                user.city, user.country = response.get('hometown').get(
                    'name').split(', ')
            except AttributeError:
                pass

            try:
                user.birth_date = datetime.strptime(response.get('birthday'),
                                                    '%m/%d/%Y').date()
            except AttributeError:
                pass

            user.save()

        return {'social_user': social_user}
def load_extra_data(backend, details, response, uid, user, social_user=None,
                    *args, **kwargs):
    """Load extra data from provider and store it on current UserSocialAuth
    extra_data field.
    """
    social_user = social_user or \
                  UserSocialAuth.get_social_auth(backend.name, uid)
    
    if kwargs['is_new'] and PROFILE_EMAIL_CONFIRMATION:
        emailaddress = EmailAddress(**{
            'user': user,
            'email': user.email,
            'verified': True,
            'primary': True
        })
        emailaddress.save()
    
    if social_user:
        extra_data = backend.extra_data(user, uid, response, details)
        if kwargs.get('original_email') and 'email' not in extra_data:
            extra_data['email'] = kwargs.get('original_email')
        if extra_data and social_user.extra_data != extra_data:
            if social_user.extra_data:
                social_user.extra_data.update(extra_data)
            else:
                social_user.extra_data = extra_data
            social_user.save()
        
        if backend.name == 'facebook' and kwargs['is_new']:
            response = json.loads(requests.get('https://graph.facebook.com/%s?access_token=%s' % (extra_data['id'], extra_data['access_token'])).content)
            
            try:
                user.city, user.country = response.get('hometown').get('name').split(', ')
            except AttributeError:
                pass
            
            try:
                user.birth_date = datetime.strptime(response.get('birthday'), '%m/%d/%Y').date()
            except AttributeError:
                pass
 
            user.save()
        
        return {'social_user': social_user}
示例#4
0
def customer_register(email, username, zipcode, phone, password, address, method):
	data = {}
	
	# sanitize inputs
	if email is not None:
		email = check_email(email)
		if email is None:
			data["result"] = -1
			data["result_msg"] = "Email address is used by another user."
			return data
	
	if zipcode is not None:
		zipcode = check_zipcode(zipcode)
		if zipcode is None:
			data["result"] = -2
			data["result_msg"] = "Zip Code is invalid or not in the system."
			return data
	
	if phone is not None:
		phone = check_phone(phone)
		if phone is None:
			data["result"] = -3
			data["result_msg"] = "Phone number is used by another user."
			return data
	
	if username is None:
		if email is not None:
			username = email
		elif phone is not None:
			username = phone
		else:
			data["result"] = -4
			data["result_msg"] = "Either email address, phone number or username is required."
			return data
			
	is_random_password = False
	if password is None:
		s = string.lowercase + string.digits
		password = ''.join(random.sample(s,6))
		is_random_password = True
	
	try:
		user = User.objects.create_user(username, "", password)
		user.save()
	except IntegrityError:
		data["result"] = -5
		data["result_msg"] = "'" + username + "' is used by the other user."
		return data
	
	# create customer information
	c = Customer(user=user, zipcode=zipcode,  verified=True)
	c.save()

	CustomerPhone.objects.create(customer=c, number = phone)
	c.set_location_from_address()
	
	num_merchants = c.count_merchants_within_miles()
	
	t = TxtTemplates()
	args = {"email": email, "number": num_merchants}
	if is_random_password:
		args["password"] = password,
		welcome_msg = t.render(TxtTemplates.templates["CUSTOMER"]["SIGNUP_SUCCESS"], args)
	else:
		welcome_msg = t.render(TxtTemplates.templates["CUSTOMER"]["SIGNUP_SUCCESS_NO_PASSWORD"], args)
	
	if email is not None:
		e = EmailAddress(user=user, email=email, verified=True, primary=True)
		e.save()
		send_mail('Welcome to Shoppley', welcome_msg, '*****@*****.**', [email], fail_silently=True)		
		
	if phone is not None:
		if method == "SMS":
			sms_notify(phone, welcome_msg)
		else:
			# send verification sms
			verify_msg = t.render(TxtTemplates.templates["CUSTOMER"]["VERIFY_PHONE"], {})
			sms_notify(phone, verify_msg)
		
	data["result"] = 1
	data["result_msg"] = "User registered successfully."
	data["username"] = username
	data["password"] = password
	
	return data;
示例#5
0
文件: tests.py 项目: TzuLuX/nodeshot
 def test_account_password_reset_API(self):
     url = reverse('api_account_password_reset')
     
     # GET 403 - user must not be authenticated
     response = self.client.get(url)
     self.assertEqual(403, response.status_code)
     
     self.client.logout()
     
     # GET 405
     response = self.client.get(url)
     self.assertEqual(405, response.status_code)
     
     # POST 400: missing required field
     response = self.client.post(url)
     self.assertContains(response, 'required', status_code=400)
     
     # POST 400: email not found in the DB
     response = self.client.post(url, { 'email': '*****@*****.**' })
     self.assertContains(response, 'address not verified for any', status_code=400)
     
     # POST 200
     user = User.objects.get(username='******')
     
     if PROFILE_EMAIL_CONFIRMATION:
         email_address = EmailAddress(user=user, email=user.email, verified=True, primary=True)
         email_address.save()
     
     response = self.client.post(url, { 'email': user.email })
     self.assertEqual(200, response.status_code)
     
     self.assertEqual(PasswordReset.objects.filter(user=user).count(), 1, 'dummy email outbox should contain 1 email message')
     self.assertEqual(len(mail.outbox), 1, 'dummy email outbox should contain 1 email message')
     
     password_reset = PasswordReset.objects.get(user=user)
     
     uid_36 = int_to_base36(user.id)
     url = reverse('api_account_password_reset_key',
                   kwargs={ 'uidb36': uid_36, 'key': password_reset.temp_key })
     
     # POST 400: wrong password
     params = { 'password1': 'new_password', 'password2': 'wrong' }
     response = self.client.post(url, params)
     self.assertContains(response, '"password2"', status_code=400)
     
     # correct
     params['password2'] = 'new_password'
     response = self.client.post(url, json.dumps(params), content_type='application/json')
     self.assertContains(response, '"detail"')
     
     # ensure password has been changed
     user = User.objects.get(username='******')
     self.assertTrue(user.check_password('new_password'))
     
     # ensure password reset object has been used
     password_reset = PasswordReset.objects.get(user=user)
     self.assertTrue(password_reset.reset)
     
     # request a new password reset key
     response = self.client.post(reverse('api_account_password_reset'), { 'email': user.email })
     self.assertEqual(200, response.status_code)
     
     # test HTML version of password reset from key
     password_reset = PasswordReset.objects.get(user=user, reset=False)
     uid = int_to_base36(password_reset.user_id)
     key = password_reset.temp_key
     url = reverse('account_password_reset_key', args=[uid, key])
     
     response = self.client.get(url)
     self.assertEqual(200, response.status_code)
     
     response = self.client.post(url, { 'password1': 'changed', 'password2': 'changed' } )
     self.assertEqual(200, response.status_code)
     
     # ensure password has been changed
     user = User.objects.get(username='******')
     self.assertTrue(user.check_password('changed'))
     
     # ensure password reset object has been used
     password_reset = PasswordReset.objects.filter(user=user).order_by('-id')[0]
     self.assertTrue(password_reset.reset)
示例#6
0
 def import_users(self):
     """ save users to local DB """
     self.message('saving users into local DB')
     
     saved_users = []
     
     # loop over all extracted unique email addresses
     for email in self.email_set:
         owner = self.users_dict[email].get('owner')
         
         # if owner is not specified, build username from email
         if owner.strip() == '':
             owner, domain = email.split('@')
             # replace any points with a space
             owner = owner.replace('.', ' ')
         
         # if owner has a space, assume he specified first and last name
         if ' ' in owner:
             owner_parts = owner.split(' ')
             first_name = owner_parts[0]
             last_name = owner_parts[1]
         else:
             first_name = owner
             last_name = ''
         
         # username must be slugified otherwise won't get into the DB
         username = slugify(owner)
         
         # create one user for each mail address
         user = User(**{
             "username": username,
             "password": self.generate_random_password(),
             "first_name": first_name.capitalize(),
             "last_name": last_name.capitalize(),
             "email": email,
             "is_active": True
         })
         
         # be sure username is unique
         counter = 1
         original_username = username
         while True:
             if User.objects.filter(username=user.username).count() > 0:
                 counter += 1
                 user.username = '******' % (original_username, counter)
             else:
                 break
         
         try:
             # validate data and save
             user.full_clean()
             user.save()
             # store id
             self.users_dict[email]['id'] = user.id
             # append to saved users
             saved_users.append(user)
             self.verbose('Saved user %s (%s) with email <%s>' % (user.username, user.get_full_name(), user.email))
         except Exception as e:
             self.message('Could not save user %s, got exception: %s' % (user.username, e))
         
         # mark email address as confirmed if feature is enabled
         if EMAIL_ADDRESS_APP_INSTALLED:
             try:
                 email_address = EmailAddress(user=user, email=user.email, verified=True, primary=True)
                 email_address.full_clean()
                 email_address.save()
             except Exception as e:
                 self.message('Could not save email address for user %s, got exception: %s' % (user.username, e))
         
     self.message('saved %d users into local DB' % len(saved_users))
     self.saved_users = saved_users
示例#7
0
    def test_account_password_reset_API(self):
        url = reverse('api_account_password_reset')

        # GET 403 - user must not be authenticated
        response = self.client.get(url)
        self.assertEqual(403, response.status_code)

        self.client.logout()

        # GET 405
        response = self.client.get(url)
        self.assertEqual(405, response.status_code)

        # POST 400: missing required field
        response = self.client.post(url)
        self.assertContains(response, 'required', status_code=400)

        # POST 400: email not found in the DB
        response = self.client.post(url, {'email': '*****@*****.**'})
        self.assertContains(response,
                            'address not verified for any',
                            status_code=400)

        # POST 200
        user = User.objects.get(username='******')

        if PROFILE_EMAIL_CONFIRMATION:
            email_address = EmailAddress(user=user,
                                         email=user.email,
                                         verified=True,
                                         primary=True)
            email_address.save()

        response = self.client.post(url, {'email': user.email})
        self.assertEqual(200, response.status_code)

        self.assertEqual(
            PasswordReset.objects.filter(user=user).count(), 1,
            'dummy email outbox should contain 1 email message')
        self.assertEqual(len(mail.outbox), 1,
                         'dummy email outbox should contain 1 email message')

        password_reset = PasswordReset.objects.get(user=user)

        uid_36 = int_to_base36(user.id)
        url = reverse('api_account_password_reset_key',
                      kwargs={
                          'uidb36': uid_36,
                          'key': password_reset.temp_key
                      })

        # POST 400: wrong password
        params = {'password1': 'new_password', 'password2': 'wrong'}
        response = self.client.post(url, params)
        self.assertContains(response, '"password2"', status_code=400)

        # correct
        params['password2'] = 'new_password'
        response = self.client.post(url,
                                    json.dumps(params),
                                    content_type='application/json')
        self.assertContains(response, '"detail"')

        # ensure password has been changed
        user = User.objects.get(username='******')
        self.assertTrue(user.check_password('new_password'))

        # ensure password reset object has been used
        password_reset = PasswordReset.objects.get(user=user)
        self.assertTrue(password_reset.reset)

        # request a new password reset key
        response = self.client.post(reverse('api_account_password_reset'),
                                    {'email': user.email})
        self.assertEqual(200, response.status_code)

        # test HTML version of password reset from key
        password_reset = PasswordReset.objects.get(user=user, reset=False)
        uid = int_to_base36(password_reset.user_id)
        key = password_reset.temp_key
        url = reverse('account_password_reset_key', args=[uid, key])

        response = self.client.get(url)
        self.assertEqual(200, response.status_code)

        response = self.client.post(url, {
            'password1': 'changed',
            'password2': 'changed'
        })
        self.assertEqual(200, response.status_code)

        # ensure password has been changed
        user = User.objects.get(username='******')
        self.assertTrue(user.check_password('changed'))

        # ensure password reset object has been used
        password_reset = PasswordReset.objects.filter(
            user=user).order_by('-id')[0]
        self.assertTrue(password_reset.reset)
    def import_users(self):
        """ save users to local DB """
        self.message('saving users into local DB')

        saved_users = []

        # loop over all extracted unique email addresses
        for email in self.email_set:
            owner = self.users_dict[email].get('owner')

            # if owner is not specified, build username from email
            if owner.strip() == '':
                owner, domain = email.split('@')
                # replace any points with a space
                owner = owner.replace('.', ' ')

            # if owner has a space, assume he specified first and last name
            if ' ' in owner:
                owner_parts = owner.split(' ')
                first_name = owner_parts[0]
                last_name = owner_parts[1]
            else:
                first_name = owner
                last_name = ''

            # username must be slugified otherwise won't get into the DB
            username = slugify(owner)

            # check if user exists first
            try:
                # try looking by email
                user = User.objects.get(email=email)
            except User.DoesNotExist:
                try:
                    # try looking by username
                    user = User.objects.get(username=username)
                except User.DoesNotExist:
                    # otherwise init new
                    user = User()
                    # generate new password only for new users
                    user.password = self.generate_random_password()

            # we'll create one user for each unique email address we've got
            user.username = username
            user.first_name = first_name.capitalize()
            user.last_name = last_name.capitalize()
            user.email = email
            user.is_active = True

            # extract date joined from old nodes
            # find the oldest node of this user
            oldest_node = OldNode.objects.filter(
                email=email).order_by('added')[0]
            user.date_joined = oldest_node.added

            # be sure username is unique
            counter = 1
            original_username = username
            while True:
                # do this check only if user is new
                if not user.pk and User.objects.filter(
                        username=user.username).count() > 0:
                    counter += 1
                    user.username = '******' % (original_username, counter)
                else:
                    break

            try:
                # validate data and save
                user.full_clean()
                user.save()
            except Exception as e:
                # if user already exists use that instance
                if (User.objects.filter(email=email).count() == 1):
                    user = User.objects.get(email=email)
                # otherwise report error
                else:
                    user = None
                    tb = traceback.format_exc()
                    self.message(
                        'Could not save user %s, got exception:\n\n%s' %
                        (user.username, tb))

            # if we got a user to add
            if user is not None:
                # store id
                self.users_dict[email]['id'] = user.id
                # append to saved users
                saved_users.append(user)
                self.verbose('Saved user %s (%s) with email <%s>' %
                             (user.username, user.get_full_name(), user.email))

            # mark email address as confirmed if feature is enabled
            if EMAIL_ADDRESS_APP_INSTALLED and EmailAddress.objects.filter(
                    email=user.email).count() is 0:
                try:
                    email_address = EmailAddress(user=user,
                                                 email=user.email,
                                                 verified=True,
                                                 primary=True)
                    email_address.full_clean()
                    email_address.save()
                except Exception as e:
                    tb = traceback.format_exc()
                    self.message(
                        'Could not save email address for user %s, got exception:\n\n%s'
                        % (user.username, tb))

        self.message('saved %d users into local DB' % len(saved_users))
        self.saved_users = saved_users