Esempio n. 1
0
def signup(request):
    """
	Signup new user
	With body: 
	{
	    "country_code":"string",
	    "phone_number":"string",
	    "email":"string",
	    "password":"******",
	    "first_name":"string",
	    "last_name":"string"
	}
	"""
    email = request.data.get('email')
    password = request.data.get('password')
    phone_number = request.data.get('phone_number')
    first_name = request.data.get('first_name')
    last_name = request.data.get('last_name')
    code, message = validate_user_data(request.data)
    if code and message:
        return iHttpResponse(code, message)
    if User.objects.filter(email=email).exists():
        return iHttpResponse(400, 'This email already exists in our system')

    if not User.objects.filter(phone_number=phone_number).exists():
        user = User.objects.create_user(email, first_name, last_name,
                                        phone_number, password)
        obj = {"email": user.email, "phone_number": user.phone_number}
        return objectResponse(obj)
    return iHttpResponse(400, 'This phone number already exists in our system')
Esempio n. 2
0
def resend_verification_message(request):
    """Resend verification message
    With body: 
    {
        "phone_number":"string"
    }
    """
    phone_number    = request.data.get('phone_number')
    phoneManager    = PhoneManager.objects.filter(phone_number=phone_number, verified=False).first()
    if phoneManager and phoneManager.send_verification():
        return iHttpResponse(200,'Verification code has been sent to your phone number.')
    return iHttpResponse(400,'Error sending verification message!')
Esempio n. 3
0
def send_email_verification(user, email, **kwargs):
    emailManager = EmailManager.objects.filter(email=email).first()
    if emailManager:
        emailManager.user_id = user.id
        emailManager.save()
    else:
        emailManager = EmailManager.objects.create(user=user, email=email)
    if emailManager.send_verification():
        return iHttpResponse(
            200, 'Please check your email for email verification!')
    return iHttpResponse(StatusCode.EMAIL_ADDRESS_IS_INVALID.value,
                         MESSAGES[StatusCode.EMAIL_ADDRESS_IS_INVALID])
Esempio n. 4
0
def changepassword(request):
    """
    change password
    With body: 
    {
        "old_password":"******",
        "new_password":"******"
    }
    """
    user = request.user
    old_password = request.data.get('old_password')
    new_password = request.data.get('new_password')
    code, message = None, None
    if not old_password or not user.check_password(old_password):
        code = StatusCode.OLD_PASSWORD_IS_INVALID.value
        message = MESSAGES[StatusCode.OLD_PASSWORD_IS_INVALID]
    elif not new_password:
        code = StatusCode.NEW_PASSWORD_IS_INVALID.value
        message = MESSAGES[StatusCode.NEW_PASSWORD_IS_INVALID]
    else:
        code, message = 200, _('Your password has been changed successfully!')
        user.set_password(new_password)
        user.save()
        Token.objects.filter(user=user).delete()
        token = Token.objects.create(user=user)
        obj = "{'code': code, 'message': message, 'token': token.key}"
        return objectResponse(obj)
    return iHttpResponse(code, message)
Esempio n. 5
0
def check_password(user_id, password):
	user = User.objects.get(pk=user_id)
	if user.check_password(password):
		return userResponse(user)
	else:
		return iHttpResponse(StatusCode.PASSWORD_IS_INVALID.value,
			MESSAGES[StatusCode.PASSWORD_IS_INVALID])
Esempio n. 6
0
def send_sms_verification(user, country_code, phone_number, **kwargs):
    print('send_sms_verification: phone %s' % user.phone_number)
    phoneManager = PhoneManager.objects.filter(
        phone_number=phone_number).first()
    if phoneManager:
        phoneManager.user_id = user.id
        phoneManager.save()
    else:
        phoneManager = PhoneManager.objects.create(user=user,
                                                   country_code=country_code,
                                                   phone_number=phone_number)
    if phoneManager.send_verification():
        return iHttpResponse(
            200,
            'Please check the message, activation code has been sent to your phone number.'
        )
    return iHttpResponse(400, 'Error sending verification message!')
Esempio n. 7
0
def signup(request):
	"""
	Signup new user
    With body: 
    {
        "country_code":"string",
        "phone_number":"string",
        "email":"string",
        "password":"******",
        "first_name":"string",
        "last_name":"string"
    }
	"""
	email           = request.data.get('email')
	password        = request.data.get('password')
	country_code    = request.data.get('country_code')
	phone_number    = request.data.get('phone_number')
	first_name      = request.data.get('first_name')
	last_name       = request.data.get('last_name')
	code, message   = validate_user_data(request.data)
	if code and message:
		return iHttpResponse(code, message)
	emailManager = EmailManager.objects.filter(email=email).first()
	if emailManager and emailManager.verified:
		return iHttpResponse(StatusCode.EMAIL_ADDRESS_IS_EXISTS.value,
		    MESSAGES[StatusCode.EMAIL_ADDRESS_IS_EXISTS])

	phoneManager = PhoneManager.objects.filter(phone_number=phone_number).first()
	if not phoneManager:
		user = User.objects.create_user(email, first_name, last_name, phone_number, password)
		send_email_verification(user,email)
		return send_sms_verification(user,country_code,phone_number)

	elif not phoneManager.verified:
		user = User.objects.filter(pk=phoneManager.user_id).first()
		user.email = email
		user.phone_number = phone_number
		user.first_name = first_name
		user.last_name = last_name
		user.set_password(password)
		user.save()
		send_email_verification(user,email)
		return send_sms_verification(user,country_code,phone_number)

	return iHttpResponse(400, 'This phone number already exists in our system')
Esempio n. 8
0
def login(request):
    """
	Login
	With body: 
	{
	    "phone_number":"string",
	    "password":"******"
	}
	"""
    phone_number = request.data.get('phone_number')

    if User.objects.filter(phone_number=phone_number).exists():
        password = request.data.get('password')
        user = User.objects.get(phone_number=phone_number)
        if user.check_password(password):
            return userResponse(user)
        else:
            return iHttpResponse(StatusCode.PASSWORD_IS_INVALID.value,
                                 MESSAGES[StatusCode.PASSWORD_IS_INVALID])
    else:
        return iHttpResponse(StatusCode.PHONE_NUMBER_IS_INVALID.value,
                             MESSAGES[StatusCode.PHONE_NUMBER_IS_INVALID])
Esempio n. 9
0
def authfacebook(request):
    """
    Function for login and register with facebook
    With body: 
    {
        "access_token":"string"
    }
    """
    # data = json.loads(request.body.decode('utf-8'))
    access_token 	= request.data.get('access_token')
    facebook_id 	= ''
    email 			= ''
    try:
    	graph = facebook.GraphAPI(access_token=access_token)
    	user_info = graph.get_object(
    	    id='me',
    	    fields='first_name, middle_name, last_name, id, '
    	    'currency, hometown, location, locale, '
    	    'email, gender, interested_in, picture.type(large),'
    	    ' birthday, cover')
    	facebook_id = user_info.get('id')
    	email 		= user_info.get('email')
    except facebook.GraphAPIError:
    	return iHttpResponse(StatusCode.ACCESS_TOKEN_FB_IS_INVALID.value,
    		MESSAGES[StatusCode.ACCESS_TOKEN_FB_IS_INVALID])

    user = User.objects.get(email=email)
    if user and EmailManager.objects.get(user=user).verified:
    	user.facebook_id       = facebook_id
    	user.facebook_token    = access_token
    	user.save()
    	return userResponse(user)
    user = User.objects.get(facebook_id=facebook_id)
    if user:
        user.facebook_token = access_token
        user.email          = email
        user.save()  
        return userResponse(user)

    user = User.objects.create_user_with_facebok(
    	email, 
    	user_info.get('first_name'), 
    	user_info.get('last_name'), 
    	user_info.get('birthday'), 
    	user_info.get('gender'), 
    	user_info.get('location')['name'], 
    	facebook_id, 
    	access_token)
    return userResponse(user)
Esempio n. 10
0
def forgotpassword(request):
    """
    forgot password
    With body: 
    {
        "email":"string"
    }
    """
    print('forgotpassword', settings.EMAIL_HOST_PASSWORD,
          settings.EMAIL_HOST_USER)
    SITE_URL = get_site_url()
    email_address = request.data.get('email')
    code, message = None, None
    if not email_address:
        code = StatusCode.EMAIL_ADDRESS_IS_EMPTY.value
        message = MESSAGES[StatusCode.EMAIL_ADDRESS_IS_EMPTY]
    elif email_address and not is_email(email_address):
        code = StatusCode.EMAIL_ADDRESS_IS_INVALID.value
        message = MESSAGES[StatusCode.EMAIL_ADDRESS_IS_INVALID]
    else:
        if User.objects.filter(email=email_address).exists():
            user = User.objects.get(email=email_address)
            subject = "Password Reset"
            message_html = "email/reset_password.html"
            email_from = ""
            email_to = [user.email]

            token = default_token_generator.make_token(user)
            uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
            obj_model = {
                'phone_number':
                user.phone_number,
                'full_name':
                user.full_name,
                'reset_pass_url':
                SITE_URL + reverse('resetpassword',
                                   kwargs={
                                       'uidb64': str(uidb64, 'utf-8'),
                                       'token': token
                                   })
            }
            print('reset_pass_url', obj_model['reset_pass_url'])
            send_email(subject, message_html, email_from, email_to, obj_model)
            code = 200
            message = _('Please check your email to get the new password!')
        else:
            code = StatusCode.EMAIL_ADDRESS_IS_INVALID.value
            message = MESSAGES[StatusCode.EMAIL_ADDRESS_IS_INVALID]
    return iHttpResponse(code, message)
Esempio n. 11
0
def confirm_sms_verification(request):
    """
    Phone number verification to complete registration
    With body: 
    {
        "phone_number":"string",
        "verify_code":"string"
    }
    """
    phone_number    = request.data.get('phone_number')
    code            = request.data.get('verify_code')
    if phone_number:
        phoneManager = PhoneManager.objects.filter(phone_number=phone_number, verified=False).first()
        if phoneManager and checkCode(phoneManager.country_code, phone_number, code):
            phoneManager.verified = True
            phoneManager.save()
            user = User.objects.filter(pk=phoneManager.user_id).first()
            return userResponse(user)
    return iHttpResponse('401','Failure')
Esempio n. 12
0
def login(request):
	"""
	Login
    With body: 
    {
        "username":"******",
        "password":"******"
    }
	"""
	username = request.data.get('username')
	password = request.data.get('password')

	emailManager = EmailManager.objects.filter(email=username).first()
	if emailManager and emailManager.verified:
		return check_password(emailManager.user_id, password)

	phoneManager = PhoneManager.objects.filter(phone_number=username).first()
	if phoneManager and phoneManager.verified:
		return check_password(phoneManager.user_id, password)   

	return iHttpResponse(StatusCode.USERNAME_IS_INVALID.value,
			MESSAGES[StatusCode.USERNAME_IS_INVALID])