def test_invalid_phone_numbers(self): for raw_number in self.invalid_phone_numbers: try: number = PhoneNumber(raw_number, 'FI') assert not number.is_valid_number() except: pass
def test_invalid_phone_numbers(self, invalid_phone_numbers): for raw_number in invalid_phone_numbers: try: number = PhoneNumber(raw_number, "FI") assert not number.is_valid_number() except: pass
def process_formdata(self, valuelist): import phonenumbers if valuelist: if valuelist[0] == u'': self.data = None else: self.data = valuelist[0] try: self.data = PhoneNumber(valuelist[0], self.region) if not self.data.is_valid_number(): raise ValueError(self.gettext(self.error_msg)) except phonenumbers.phonenumberutil.NumberParseException: raise ValueError(self.gettext(self.error_msg))
def reg(): username = request.form['username'] phone_number = request.form['phone_number'] email = request.form['email'] password = request.form['password'] #check phone number if already exist user_check_phone = Qr.query.filter_by(phone_number=PhoneNumber(phone_number, 'MY')).first() if user_check_phone: if user_check_phone.is_verified: flash("Phone Number already registered", category="danger") return redirect(url_for('sign_up')) #check email if already exist user_check_email = Qr.query.filter_by(email=email).first() if user_check_email: if user_check_email.is_verified: flash("Email already registered", category="danger") return redirect(url_for('sign_up')) if user_check_phone and user_check_email: if user_check_email.is_verified: flash("Email & Phone Number already registered", category="danger") return redirect(url_for('sign_up')) else: salt = bcrypt.gensalt() user_check_phone.password = bcrypt.hashpw(password.encode('utf-8'), salt) user_check_phone.token = secrets.token_urlsafe(90) elif user_check_phone: user_check_phone.email = email salt = bcrypt.gensalt() user_check_phone.password = bcrypt.hashpw(password.encode('utf-8'), salt) user_check_phone.token = secrets.token_urlsafe(90) elif user_check_email: user_check_email.phone_number = PhoneNumber(phone_number, 'MY') salt = bcrypt.gensalt() user_check_email.password = bcrypt.hashpw(password.encode('utf-8'), salt) user_check_email.token = secrets.token_urlsafe(90) else: db.session.add(Qr(name=username, email=email, phone_number=PhoneNumber(phone_number, 'MY'), password=password, token=secrets.token_urlsafe(90))) db.session.commit() qr_user = Qr.query.filter_by(email=email).first() verify_link = url_for('verify_qr', _external=True)+'?token='+qr_user.token msg = Message(subject="Verify Your QR Id Account", sender='*****@*****.**', recipients=[qr_user.email]) msg.html = render_template('mail_verify.html', username=username, verify_link=verify_link) mail.send(msg) return render_template('thank_you.html')
def test_phone_number_str_repr(self): number = PhoneNumber('+358401234567') if six.PY2: assert unicode(number) == number.national # noqa assert str(number) == number.national.encode('utf-8') else: assert str(number) == number.national
def user(self, session, User): user = User() user.name = u'Someone' user.phone_number = PhoneNumber('+35840111222', 'FI') session.add(user) session.commit() return user
def forgot_password(): if request.method == 'POST': phone_email = request.form['phone_email'] for match in phonenumbers.PhoneNumberMatcher(phone_email, 'MY'): phone_number = phonenumbers.format_number(match.number, phonenumbers.PhoneNumberFormat.E164) qr_user = Qr.query.filter_by(phone_number=PhoneNumber(phone_number, 'MY')).first() if qr_user: qr_user.token = secrets.token_urlsafe(90) db.session.commit() reset_link = url_for('reset_password', _external=True)+'?token='+qr_user.token msg = Message(subject="Resetting your QR Id password", sender='Pintar-AI', recipients=[qr_user.email]) msg.html = render_template('mail_reset.html', username=qr_user.name, reset_link=reset_link) mail.send(msg) qr_user = Qr.query.filter_by(email=phone_email).first() if qr_user: qr_user.token = secrets.token_urlsafe(90) db.session.commit() reset_link = url_for('reset_password', _external=True)+'?token='+qr_user.token msg = Message(subject="Resetting your QR Id password", sender='Pintar-AI', recipients=[qr_user.email]) msg.html = render_template('mail_reset.html', username=qr_user.name, reset_link=reset_link) mail.send(msg) flash("If any account related, we sent link to your email", category="success") return redirect(url_for('forgot_password')) else: return render_template('forgot_password.html')
def qr_login(): phone_email = request.form['phone_email'] password = request.form['password'] for match in phonenumbers.PhoneNumberMatcher(phone_email, 'MY'): phone_number = phonenumbers.format_number(match.number, phonenumbers.PhoneNumberFormat.E164) qr_user = Qr.query.filter_by(phone_number=PhoneNumber(phone_number, 'MY')).first() if qr_user: if not bcrypt.checkpw(password.encode('utf-8'), qr_user.password): flash("Wrong password", category="danger") return redirect(url_for('login')) if not qr_user.is_verified: flash("Please verify your account", category="danger") return redirect(url_for('login')) img = string_to_qr("qr_id/" + qr_user.phone_number.e164) return serve_pil_image(img) qr_user = Qr.query.filter_by(email=phone_email).first() if qr_user: if not bcrypt.checkpw(password.encode('utf-8'), qr_user.password): flash("Wrong password", category="danger") return redirect(url_for('login')) if not qr_user.is_verified: flash("Please verify your account", category="danger") return redirect(url_for('login')) img = string_to_qr("qr_id/" + qr_user.phone_number.e164) return serve_pil_image(img) else: flash("Phone number or Email hasn't been registered", category="danger") return redirect(url_for('login'))
def setup_method(self, method): super(TestPhoneNumberType, self).setup_method(method) self.phone_number = PhoneNumber('040 1234567', 'FI') self.user = self.User() self.user.name = u'Someone' self.user.phone_number = self.phone_number self.session.add(self.user) self.session.commit()
class PhoneNumberField(StringField): """ A string field representing a PhoneNumber object from `SQLAlchemy-Utils`_. .. _SQLAlchemy-Utils: https://github.com/kvesteri/sqlalchemy-utils :param region: Country code of the phone number. :param display_format: The format in which the phone number is displayed. """ widget = TelInput() error_msg = u'Not a valid phone number value' def __init__( self, label=None, validators=None, region='US', display_format='national', **kwargs ): super(PhoneNumberField, self).__init__(label, validators, **kwargs) self.region = region self.display_format = display_format def _value(self): # self.data holds a PhoneNumber object if the form is valid, # otherwise it will contain a string. if self.data: try: return getattr(self.data, self.display_format) except AttributeError: return self.data else: return u'' def process_formdata(self, valuelist): import phonenumbers if valuelist: if valuelist[0] == u'': self.data = None else: self.data = valuelist[0] try: self.data = PhoneNumber( valuelist[0], self.region ) if not self.data.is_valid_number(): raise ValueError(self.gettext(self.error_msg)) except phonenumbers.phonenumberutil.NumberParseException: raise ValueError(self.gettext(self.error_msg))
def parse_phone_number(phone_number_str, phone_country_code): try: region_code = phonenumbers.region_code_for_country_code( int(phone_country_code)) phone_number = PhoneNumber(phone_number_str, region_code) return phone_number except ValueError: return None except NumberParseException: return None
def test_phone_number_attributes_for_short_code(self): """ For international and national shortcode remains the same, if we pass short code to PhoneNumber library without giving check_region it will raise exception :return: """ number = PhoneNumber('72404', check_region=False) assert number.e164 == u'+072404' assert number.international == u'72404' assert number.national == u'72404'
def validate_qr(): require = ['serial_number', 'qr_id'] verified, status = verify_request(json=request.json, check_fields=require) if not verified: jsonify({'failed': status}), 400 for match in phonenumbers.PhoneNumberMatcher(request.json['qr_id'], 'MY'): phone_number = phonenumbers.format_number(match.number, phonenumbers.PhoneNumberFormat.E164) qr_user = Qr.query.filter_by(phone_number=PhoneNumber(phone_number, 'MY')).first() if qr_user: return jsonify({'success': True, 'name': qr_user.name, 'contact': phone_number}), 200 return jsonify({'failed': 'qr_id not registered'}), 400
class PhoneNumberField(StringField): """ A string field representing a PhoneNumber object from `SQLAlchemy-Utils`_. .. _SQLAlchemy-Utils: https://github.com/kvesteri/sqlalchemy-utils :param country_code: Country code of the phone number. :param display_format: The format in which the phone number is displayed. """ widget = TelInput() error_msg = u'Not a valid phone number value' def __init__(self, label=None, validators=None, country_code='US', display_format='national', **kwargs): super(PhoneNumberField, self).__init__(label, validators, **kwargs) self.country_code = country_code self.display_format = display_format def _value(self): # self.data holds a PhoneNumber object, use it before falling back # to self.rawdata which holds a string if self.data: return getattr(self.data, self.display_format) elif self.raw_data: return self.raw_data[0] else: return u'' def process_formdata(self, valuelist): import phonenumbers if valuelist: if valuelist[0] == u'': self.data = None else: try: self.data = PhoneNumber( valuelist[0], self.country_code ) if not self.data.is_valid_number(): self.data = None raise ValueError(self.gettext(self.error_msg)) except phonenumbers.phonenumberutil.NumberParseException: self.data = None raise ValueError(self.gettext(self.error_msg))
class PhoneNumberField(StringField): """ A string field representing a PhoneNumber object from `SQLAlchemy-Utils`_. .. _SQLAlchemy-Utils: https://github.com/kvesteri/sqlalchemy-utils :param country_code: Country code of the phone number. :param display_format: The format in which the phone number is displayed. """ widget = TelInput() error_msg = u'Not a valid phone number value' def __init__(self, label=None, validators=None, country_code='US', display_format='national', **kwargs): super(PhoneNumberField, self).__init__(label, validators, **kwargs) self.country_code = country_code self.display_format = display_format def _value(self): # self.data holds a PhoneNumber object, use it before falling back # to self.rawdata which holds a string if self.data: return getattr(self.data, self.display_format) elif self.raw_data: return self.raw_data[0] else: return u'' def process_formdata(self, valuelist): import phonenumbers if valuelist: if valuelist[0] == u'': self.data = None else: try: self.data = PhoneNumber(valuelist[0], self.country_code) if not self.data.is_valid_number(): self.data = None raise ValueError(self.gettext(self.error_msg)) except phonenumbers.phonenumberutil.NumberParseException: self.data = None raise ValueError(self.gettext(self.error_msg))
def record(): require = ['serial_number', 'qr_id', 'temperature'] verified, status = verify_request(json=request.json, check_fields=require) if not verified: jsonify({'failed': status}), 400 for match in phonenumbers.PhoneNumberMatcher(request.json['qr_id'], 'MY'): phone_number = phonenumbers.format_number(match.number, phonenumbers.PhoneNumberFormat.E164) qr_user = Qr.query.filter_by(phone_number=PhoneNumber(phone_number, 'MY')).first() if qr_user: device = Device.query.filter_by(serial_number=request.json['serial_number']).first() db.session.add(Record(qr_id=qr_user.id, device_id=device.id, temperature=request.json['temperature'])) db.session.commit() return jsonify({'success': qr_user.name + " recorded"}), 200 return jsonify({'failed': 'qr_id not registered'}), 400
def process_formdata(self, valuelist): import phonenumbers if valuelist: if valuelist[0] == u"": self.data = None else: try: self.data = PhoneNumber(valuelist[0], self.country_code) if not self.data.is_valid_number(): self.data = None raise ValueError(self.gettext(self.error_msg)) except phonenumbers.phonenumberutil.NumberParseException: self.data = None raise ValueError(self.gettext(self.error_msg))
def setup_method(self, method): super(TestPhoneNumbers, self).setup_method(method) class UserForm(ModelForm): class Meta: model = self.User self.UserForm = UserForm super(TestPhoneNumbers, self).setup_method(method) self.phone_number = PhoneNumber('040 1234567', 'FI') self.user = self.User() self.user.name = u'Someone' self.user.phone_number = self.phone_number self.session.add(self.user) self.session.commit()
def test_agent(): """Tests creating an person.""" person = Person(name='Timmy', tax_id='xyz', country=Country.ES, telephone=PhoneNumber('+34666666666'), email='*****@*****.**') db.session.add(person) db.session.commit() p = schemas.Person().dump(person) assert p['name'] == person.name == 'Timmy' assert p['taxId'] == person.tax_id == 'xyz' assert p['country'] == person.country.name == 'ES' assert p[ 'telephone'] == person.telephone.international == '+34 666 66 66 66' assert p['email'] == person.email == '*****@*****.**'
def test_marshmallow_phone(): class Foo(Schema): foo = Phone() foo = Foo() foo.load({'foo': '+34936666666'}) with pytest.raises(PhoneNumberParseException): # Phone number cannot be parsed foo.load({'foo': 'this is not a phone number'}) with pytest.raises(ValueError, match='The phone number is invalid.'): # Phone number is invalid for the country rules foo.load({'foo': '+3401'}) serialized = foo.dump({'foo': PhoneNumber('+34936666666')}) assert serialized == {'foo': '+34 936 66 66 66'} serialized = foo.dump({'foo': None}) assert serialized == {'foo': None}
def _deserialize(self, value: str, attr, data): phone = PhoneNumber(value) if not phone.is_valid_number(): raise ValueError('The phone number is invalid.') return phone
def format_phone(turget, number, *args): return PhoneNumber(number, region="RU").international
def test_valid_phone_numbers(self): for raw_number in self.valid_phone_numbers: number = PhoneNumber(raw_number, 'FI') assert number.is_valid_number()
def test_phone_number_in_form(self): form = self.UserForm( MultiDict(name=u'Matti Meikäläinen', phone_number='+358401231233')) form.validate() assert len(form.errors) == 0 assert form.data['phone_number'] == PhoneNumber('+358401231233')
def test_phone_number_str_repr(self): number = PhoneNumber('+358401234567') assert number.__unicode__() == number.national assert number.__str__() == number.national.encode('utf-8')
def test_invalid_phone_numbers__is_valid_number(self, raw_number): number = PhoneNumber(raw_number, 'FI') assert not number.is_valid_number()
def test_invalid_phone_numbers__constructor_fails(self, raw_number): with pytest.raises(PhoneNumberParseException): PhoneNumber(raw_number, 'FI')
def test_phone_number_hash(self): number1 = PhoneNumber('+821023456789') number2 = PhoneNumber('+82 10-2345-6789') assert hash(number1) == hash(number2) assert hash(number1) == hash(number1.e164) assert {number1} == {number2}
def test_valid_phone_numbers(self, valid_phone_numbers): for raw_number in valid_phone_numbers: number = PhoneNumber(raw_number, "FI") assert number.is_valid_number()
def test_phone_number_attributes(self): number = PhoneNumber('+358401234567') assert number.e164 == u'+358401234567' assert number.international == u'+358 40 1234567' assert number.national == u'040 1234567'
def phone_number(): return PhoneNumber( '040 1234567', 'FI' )
def init(): _admins.extend( PhoneNumber(phone_number, region="UA") for phone_number in os.environ[ADMIN].split(",") if phone_number)
def init(): _admins.extend( PhoneNumber(phone_number, region="UA") for phone_number in os.environ["TELEGRAM_BOT_ADMIN"].split(",") if phone_number)