Package: django_phone_confirmation
# Introduction #A Django app to validate cell phone numbers through SMS messages.It uses Django Rest to implement a couple of endpoints to confirm the number and django-sendsms to send messages.## Installation ##1. Install package:pip install django_phone_confirmation2. Add phone_confirmation app to INSTALLED_APPS in your django settings.py:INSTALLED_APPS = (...,'rest_framework','phone_confirmation',)3. Add in urls.py:urlpatterns = patterns('',url(r'^phone-confirmation/', include('phone_confirmation.urls', namespace='phone_confirmation')),)## A basic flow ##1. User inputs cell phone number.1. The app/page make a POST request to the **phone-confirmation/confirmation/** endpoint with the phone number entered by the user.1. An SMS message is sent to the phone number with a 4 number code.1. The user enter the code on the App/Page1. The app/page make a POST request to the **phone-confirmation/activation-key/** endpoint with the code entered by the user.The response is a signed activation key if the code is correct, or a 400 status response otherwise.1. Then the app/page can use the phone number or save the activation key to use it later.## Endpoints ##### phone-confirmation/confirmation/ ###Request example:curl -X POST \http://localhost:8000/phone-confirmation/confirmation/ \-H 'cache-control: no-cache' \-H 'content-type: application/json' \-d '{"phone_number": "+1-202-555-1234"}'Response example:{"phone_number": "+12025551234"}And the code 6108 (just a example, the code is picked randomly) is sent by SMS to the phone.### phone-confirmation/activation-key/ ###Request example:curl -X POST \http://localhost:8000/phone-confirmation/activation-key/ \-H 'cache-control: no-cache' \-H 'content-type: application/json' \-d '{"phone_number": "+1-202-555-1234","code": "6108"}'Successful response example:{"activation_key":"eyJwaG9uZV9udW1iZXIiOiIrMTIwMjU1NTEyMzQifQ:1dHsio:RvZd7XLwZPvWrN0OI4jA2R5PT8Q"}Fail response example:{"error": "Invalid activation key"}### phone-confirmation/activation-key/{activation key}/ ###Request example:curl -X GET \http://localhost:8000/phone-confirmation/activation-key/eyJwaG9uZV9udW1iZXIiOiIrMTIwMjU1NTEyMzQifQ:1dHsio:RvZd7XLwZPvWrN0OI4jA2R5PT8Q/ \-H 'cache-control: no-cache' \-H 'content-type: application/json'Response example:{"phone_number": "+12025551234"}## Settings ##These are the default settings:PHONE_CONFIRMATION = {"SALT": "phonenumber","ACTIVATION_TIMEOUT": 15,"SMS_MESSAGE": "Your confirmation code is %(code)s","FROM_NUMBER": "","MAX_CONFIRMATIONS": 10}**SALT**Used as salt when creating activation keys.**ACTIVATION_TIMEOUT**How many seconds the user have to confirm the number after the initial requesting**SMS_MESSAGE**The SMS message that will be send to users. The default message is "Your confirmation code is %(code)s".Use %{code}s variable to indicate where the confirmation code should be placed.**FROM_NUMBER**The number to use as sender of the SMS messages. You should use the number provided by your SMS gateway. This is the only required setting.**MAX_CONFIRMATIONS**The maximum number of confirmations to keep in database for each phone number. When this amount is reached, the oldest confirmation is removed.**NOTE:** As we use the django-sendsms package you need to configure it with your SMS Gateway in order to delivery SMS messages.**SILENT_CONFIRMATIONS_FILTER**A callable with a single argument to ignore fake tests numbers. If it returns True the SMS won't be send.Example:SILENT_CONFIRMATIONS_FILTER = lambda to: to[:8] == '+1212555'  # Ignore numbers starting with +1212555.## Throttle Scope ##- phone-number-confirmation: Endpoint to request a phone number confirmation (Wiil sent SMS)- phone-confirmation-activation-key: Endpoints to validate codes and activation keys.## Changelog ##0.3.3 - Changed settings ACTIVATION_MINUTES to ACTIVATION_TIMEOUT and the period time to seconds. Changed settingg SMS_TEMPLATE to SMS_MESSAGE.0.3.4 - Add activation_key_created signal.0.3.5 - Add user to activation_key_created signal.