Skip to content

Commit

Permalink
Add phone validation
Browse files Browse the repository at this point in the history
  • Loading branch information
Clivern committed Sep 17, 2019
1 parent 4541e71 commit ff08a9a
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 18 deletions.
28 changes: 24 additions & 4 deletions app/controllers/api/private/v1/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,14 @@ def post(self, request):
'email': {
'value': request_data["email"],
'sanitize': {
'escape': {},
'strip': {}
},
'validate': {}
'validate': {
'sv_email': {
'error': _('Error! Email is invalid.')
}
}
}
})

Expand All @@ -67,9 +72,14 @@ def post(self, request):
'phone': {
'value': request_data["phone"],
'sanitize': {
'escape': {},
'strip': {}
},
'validate': {}
'validate': {
'sv_phone': {
'error': _('Error! Phone number is invalid.')
}
}
}
})

Expand All @@ -79,16 +89,26 @@ def post(self, request):
'email': {
'value': request_data["email"],
'sanitize': {
'escape': {},
'strip': {}
},
'validate': {}
'validate': {
'sv_email': {
'error': _('Error! Email is invalid.')
}
}
},
'endpoint': {
'value': request_data["endpoint"],
'sanitize': {
'escape': {},
'strip': {}
},
'validate': {}
'validate': {
'sv_url': {
'error': _('Error! Endpoint URL is invalid.')
}
}
},
'auth_token': {
'value': request_data["auth_token"],
Expand Down
33 changes: 20 additions & 13 deletions app/modules/validation/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@

# Standard Library
import re
import os

# Third Party Library
from django.core.signing import Signer
from twilio.rest import Client
from pyvalitron.validator import Validator
from twilio.base.exceptions import TwilioRestException
from django.core.signing import Signer
from django.core.validators import URLValidator
from django.core.validators import validate_slug
from django.core.validators import validate_email
from django.core.validators import validate_ipv4_address
from django.core.validators import validate_ipv6_address
Expand Down Expand Up @@ -97,19 +101,22 @@ def sv_numeric(self):
regex = re.compile(r'^[0-9]+$')
return bool(regex.match(self._input))

def sv_host_slug(self):
regex = re.compile(r'^[a-z0-9-_]+$')
return bool(regex.match(self._input))

def sv_host_name(self):
regex = re.compile(r'^[a-zA-Z0-9-_\s]+$')
return bool(regex.match(self._input))

def sv_host_server(self):
return True
def sv_slug(self):
return True if validate_slug(self._input) is None else False

def sv_tls_certificate(self):
return True
def sv_phone(self):
if os.getenv("TEXT_MESSAGING_DRIVER", "twilio") == "twilio" and os.getenv("TWILIO_ACCOUNT_SID") and os.getenv("TWILIO_AUTH_TOKEN"):
client = Client(os.getenv("TWILIO_ACCOUNT_SID"), os.getenv("TWILIO_AUTH_TOKEN"))
try:
client.lookups.phone_numbers(self._input).fetch(type="carrier")
return True
except TwilioRestException as e:
if e.code == 20404:
return False
else:
raise e
else:
return self.sv_numeric() and len(self._input) >= 9

def optional(self):
return self._input == ""
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def test_subscribe_success02(self):
response = self.client.post(reverse("app.api.private.v1.status_subscribe.endpoint"), {
"type": "phone",
"email": "",
"phone": "+12345678",
"phone": "00312345678",
"endpoint": "",
"auth_token": ""
})
Expand Down

0 comments on commit ff08a9a

Please sign in to comment.