Skip to content

Commit

Permalink
added Token model and static price redeem
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeremy Kun committed Jun 1, 2016
1 parent cb15dde commit 87e2a40
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 2 deletions.
21 changes: 21 additions & 0 deletions hello/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from django.db import models
from django.utils import timezone


class Token(models.Model):
'''
A model representing a token given to the user.
'''

created = models.DateTimeField(default=timezone.now)

'''
The value of the token, given to the user, which is a hashid of the
database id.
'''
value = models.CharField(max_length=100, null=True, default=None)

'''
True when the token has successfully been redeemed, False otherwise.
'''
redeemed = models.BooleanField(default=False)
2 changes: 2 additions & 0 deletions hello/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
TWO1_USERNAME = os.environ.get("TWO1_USERNAME")
WALLET = Two1Wallet.import_from_mnemonic(mnemonic=TWO1_WALLET_MNEMONIC)

HASHIDS_SALT = os.environ.get("HASHIDS_SALT")


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
Expand Down
1 change: 1 addition & 0 deletions hello/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^buy$', hello.views.buy),
url(r'^redeem$', hello.views.redeem),
url(r'^manifest$', hello.views.manifest),
]
47 changes: 45 additions & 2 deletions hello/views.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,59 @@
import sys
import yaml
import hashids
import logging

from django.http import HttpResponse, JsonResponse
from django.core.exceptions import ObjectDoesNotExist
from django.http import JsonResponse
from rest_framework.decorators import api_view
from two1.bitserv.django import payment

from hello import settings
from hello.models import Token

hasher = hashids.Hashids(salt=settings.HASHIDS_SALT, min_length=5)

logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.INFO)


@api_view(['GET'])
@payment.required(100)
def buy(request):
return HttpResponse('Hello 21!', status=200)
new_token = Token.objects.create()
new_token.value = hasher.encode(new_token.id)
new_token.save()

return JsonResponse({'token': new_token.value}, status=200)


def _redeem(token):
try:
requested_token = Token.objects.get(value=token)

if requested_token.redeemed:
raise ValueError()
except ObjectDoesNotExist:
logger.error('User requested token {} that does not exist'.format(token))
return JsonResponse({'success': False, 'error': 'Invalid or redeemed token.'}, status=400)
except ValueError:
logger.error('User requested token {} that was already redeemed'.format(token))
return JsonResponse({'success': False, 'error': 'Invalid or redeemed token.'}, status=400)

requested_token.redeemed = True
requested_token.save()

return JsonResponse({'success': True, "message": "Thanks!"}, status=200)


@api_view(['POST'])
def redeem(request):
try:
token = request.data['token']
except KeyError:
return JsonResponse({'error': 'POST data must include "token"'}, status=400)

return _redeem(token)


@api_view(['GET'])
Expand Down

0 comments on commit 87e2a40

Please sign in to comment.