Пример #1
0
 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
Пример #3
0
 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
Пример #4
0
    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))
Пример #5
0
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')
Пример #6
0
 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
Пример #7
0
 def user(self, session, User):
     user = User()
     user.name = u'Someone'
     user.phone_number = PhoneNumber('+35840111222', 'FI')
     session.add(user)
     session.commit()
     return user
Пример #8
0
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')
Пример #9
0
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'))
Пример #10
0
 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()
Пример #11
0
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
Пример #13
0
 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'
Пример #14
0
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))
Пример #16
0
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))
Пример #17
0
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
Пример #18
0
    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))
Пример #19
0
    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()
Пример #20
0
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 == '*****@*****.**'
Пример #21
0
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}
Пример #22
0
 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
Пример #23
0
def format_phone(turget, number, *args):
    return PhoneNumber(number, region="RU").international
Пример #24
0
 def test_valid_phone_numbers(self):
     for raw_number in self.valid_phone_numbers:
         number = PhoneNumber(raw_number, 'FI')
         assert number.is_valid_number()
Пример #25
0
 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')
Пример #26
0
 def test_phone_number_str_repr(self):
     number = PhoneNumber('+358401234567')
     assert number.__unicode__() == number.national
     assert number.__str__() == number.national.encode('utf-8')
Пример #27
0
 def test_invalid_phone_numbers__is_valid_number(self, raw_number):
     number = PhoneNumber(raw_number, 'FI')
     assert not number.is_valid_number()
Пример #28
0
 def test_invalid_phone_numbers__constructor_fails(self, raw_number):
     with pytest.raises(PhoneNumberParseException):
         PhoneNumber(raw_number, 'FI')
Пример #29
0
 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}
Пример #30
0
 def test_valid_phone_numbers(self):
     for raw_number in self.valid_phone_numbers:
         number = PhoneNumber(raw_number, 'FI')
         assert number.is_valid_number()
Пример #31
0
 def test_phone_number_str_repr(self):
     number = PhoneNumber('+358401234567')
     assert number.__unicode__() == number.national
     assert number.__str__() == number.national.encode('utf-8')
Пример #32
0
 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()
Пример #33
0
 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'
Пример #34
0
def phone_number():
    return PhoneNumber(
        '040 1234567',
        'FI'
    )
 def test_invalid_phone_numbers__is_valid_number(self, raw_number):
     number = PhoneNumber(raw_number, 'FI')
     assert not number.is_valid_number()
Пример #36
0
def init():
    _admins.extend(
        PhoneNumber(phone_number, region="UA")
        for phone_number in os.environ[ADMIN].split(",") if phone_number)
Пример #37
0
def init():
    _admins.extend(
        PhoneNumber(phone_number, region="UA")
        for phone_number in os.environ["TELEGRAM_BOT_ADMIN"].split(",")
        if phone_number)