def add_phone(): form = NewPhoneForm() if form.validate_on_submit(): userphone = UserPhoneClaim.get(user=g.user, phone=form.phone.data) if userphone is None: userphone = UserPhoneClaim(user=g.user, phone=form.phone.data, type=form.type.data) db.session.add(userphone) try: send_phone_verify_code(userphone) db.session.commit( ) # Commit after sending because send_phone_verify_code saves the message sent flash(_("We sent a verification code to your phone number"), 'success') user_data_changed.send(g.user, changes=['phone-claim']) return render_redirect(url_for('.verify_phone', number=userphone.phone), code=303) except ValueError as e: db.session.rollback() form.phone.errors.append(unicode(e)) return render_form(form=form, title=_("Add a phone number"), formid='phone_add', submit=_("Add phone"), ajax=True)
def validate_phone(self, field): # Step 1: Remove punctuation in number number = strip_phone(field.data) # Step 2: Check length if len(number) > 16: raise forms.ValidationError( _("This is too long to be a valid phone number")) # Step 3: Validate number format if not valid_phone(number): raise forms.ValidationError( _("Invalid phone number (must be in international format with a leading + symbol)" )) # Step 4: Check if Indian number (startswith('+91')) if number.startswith('+91') and len(number) != 13: raise forms.ValidationError( _("This does not appear to be a valid Indian mobile number")) # Step 5: Check if number has already been claimed existing = UserPhone.get(phone=number) if existing is not None: if existing.user == current_auth.user: raise forms.ValidationError( _("You have already registered this phone number")) else: raise forms.ValidationError( _("This phone number has already been claimed")) existing = UserPhoneClaim.get(phone=number, user=current_auth.user) if existing is not None: raise forms.ValidationError( _("This phone number is pending verification")) field.data = number # Save stripped number
def validate_phone(self, field): # TODO: Use the phonenumbers library to validate this # Step 1: Remove punctuation in number number = strip_phone(field.data) # Step 2: Check length if len(number) > 16: raise forms.ValidationError(_("This is too long to be a valid phone number")) # Step 3: Validate number format if not valid_phone(number): raise forms.ValidationError(_("Invalid phone number (must be in international format with a leading + symbol)")) # Step 4: Check if Indian number (startswith('+91')) if number.startswith('+91') and len(number) != 13: raise forms.ValidationError(_("This does not appear to be a valid Indian mobile number")) # Step 5: Check if number has already been claimed existing = UserPhone.get(phone=number) if existing is not None: if existing.user == current_auth.user: raise forms.ValidationError(_("You have already registered this phone number")) else: raise forms.ValidationError(_("This phone number has already been claimed")) existing = UserPhoneClaim.get(phone=number, user=current_auth.user) if existing is not None: raise forms.ValidationError(_("This phone number is pending verification")) field.data = number # Save stripped number
def add_phone(): form = NewPhoneForm() if form.validate_on_submit(): userphone = UserPhoneClaim.get(user=g.user, phone=form.phone.data) if userphone is None: userphone = UserPhoneClaim(user=g.user, phone=form.phone.data) db.session.add(userphone) send_phone_verify_code(userphone) db.session.commit() # Commit after sending because send_phone_verify_code saves the message sent flash("We sent a verification code to your phone number.", 'success') user_data_changed.send(g.user, changes=['phone-claim']) return render_redirect(url_for('.verify_phone', number=userphone.phone), code=303) return render_form(form=form, title="Add a phone number", formid="phone_add", submit="Add phone", ajax=True)
def add_phone(): form = NewPhoneForm() if form.validate_on_submit(): userphone = UserPhoneClaim.get(user=current_auth.user, phone=form.phone.data) if userphone is None: userphone = UserPhoneClaim(user=current_auth.user, phone=form.phone.data) db.session.add(userphone) try: send_phone_verify_code(userphone) db.session.commit() # Commit after sending because send_phone_verify_code saves the message sent flash(_("We sent a verification code to your phone number"), 'success') user_data_changed.send(current_auth.user, changes=['phone-claim']) return render_redirect(url_for('.verify_phone', number=userphone.phone), code=303) except ValueError as e: db.session.rollback() form.phone.errors.append(unicode(e)) return render_form(form=form, title=_("Add a phone number"), formid='phone_add', submit=_("Verify phone"), ajax=True)
def validate_phone(self, field): existing = UserPhone.get(phone=field.data) if existing is not None: if existing.user == g.user: raise wtforms.ValidationError("You have already registered this phone number.") else: raise wtforms.ValidationError("This phone number has already been claimed.") existing = UserPhoneClaim.get(phone=field.data, user=g.user) if existing is not None: raise wtforms.ValidationError("This phone number is pending verification.") # Step 1: Remove punctuation in number field.data = strip_phone(field.data) # Step 2: Validate number format if not valid_phone(field.data): raise wtforms.ValidationError("Invalid phone number (must be in international format with a leading + symbol)") # Step 3: Check if Indian number (startswith('+91')) if not field.data.startswith('+91') or len(field.data) != 13: raise wtforms.ValidationError("Only Indian mobile numbers are allowed at this time")
def add_phone(): form = NewPhoneForm() if form.validate_on_submit(): userphone = UserPhoneClaim.get(user=g.user, phone=form.phone.data) if userphone is None: userphone = UserPhoneClaim(user=g.user, phone=form.phone.data) db.session.add(userphone) send_phone_verify_code(userphone) db.session.commit( ) # Commit after sending because send_phone_verify_code saves the message sent flash("We sent a verification code to your phone number.", 'success') user_data_changed.send(g.user, changes=['phone-claim']) return render_redirect(url_for('.verify_phone', number=userphone.phone), code=303) return render_form(form=form, title="Add a phone number", formid="phone_add", submit="Add phone", ajax=True)
def validate_phone(self, field): existing = UserPhone.get(phone=field.data) if existing is not None: if existing.user == g.user: raise wtforms.ValidationError( "You have already registered this phone number.") else: raise wtforms.ValidationError( "This phone number has already been claimed.") existing = UserPhoneClaim.get(phone=field.data, user=g.user) if existing is not None: raise wtforms.ValidationError( "This phone number is pending verification.") # Step 1: Remove punctuation in number field.data = strip_phone(field.data) # Step 2: Validate number format if not valid_phone(field.data): raise wtforms.ValidationError( "Invalid phone number (must be in international format with a leading + symbol)" ) # Step 3: Check if Indian number (startswith('+91')) if not field.data.startswith('+91') or len(field.data) != 13: raise wtforms.ValidationError( "Only Indian mobile numbers are allowed at this time")