# Path: locksmith/common.py
# def get_signature(params, signkey):
#     # sorted k,v pairs of everything but signature
#     data = sorted([(k,unicode(v).encode('utf-8'))
#                    for k,v in params.iteritems()
#                    if k != 'signature'])
#     qs = urllib.urlencode(data)
#     return hmac.new(str(signkey), qs, hashlib.sha1).hexdigest()
# 
# Path: locksmith/auth/models.py
# class ApiKey(models.Model):
#     key = models.CharField(max_length=32, primary_key=True)
#     email = models.EmailField('Email Address')
#     status = models.CharField(max_length=1, choices=KEY_STATUSES, default='U')
# 
#     issued_on = models.DateTimeField(default=datetime.datetime.now, editable=False)
# 
#     def active(self):
#         return status == 'A'
# 
#     def __unicode__(self):
#         return '%s (%s) [%s]' % (self.email, self.key, self.get_status_display())
# 
#     class Meta:
#         db_table = 'locksmith_auth_apikey'


from uuid import UUID
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt
from locksmith.common import get_signature
from locksmith.auth.models import ApiKey
def update_key(request, get_by='key'):
    if not verify_signature(request.POST):
        return HttpResponseBadRequest('bad signature')
    # get the key
    if get_by == 'key':
        key = get_object_or_404(ApiKey, key=request.POST['key'])
    elif get_by == 'email':
        key = get_object_or_404(ApiKey, email=request.POST['email'])

    # update key
    key.key = request.POST['key']
    key.email = request.POST['email']
    key.status = request.POST['status']
    key.save()

    return HttpResponse('OK')


@csrf_exempt
@require_POST
def accept_key(request, key_uuid):
    if not verify_signature(request.POST):
        return HttpResponseBadRequest('bad signature')

    if u'status' not in request.POST:
        return HttpResponseBadRequest('no status specified')

    if u'email' not in request.POST:
        return HttpResponseBadRequest('no email specified')


# Path: locksmith/common.py
# def get_signature(params, signkey):
#     # sorted k,v pairs of everything but signature
#     data = sorted([(k,unicode(v).encode('utf-8'))
#                    for k,v in params.iteritems()
#                    if k != 'signature'])
#     qs = urllib.urlencode(data)
#     return hmac.new(str(signkey), qs, hashlib.sha1).hexdigest()
# 
# Path: locksmith/auth/models.py
# class ApiKey(models.Model):
#     key = models.CharField(max_length=32, primary_key=True)
#     email = models.EmailField('Email Address')
#     status = models.CharField(max_length=1, choices=KEY_STATUSES, default='U')
# 
#     issued_on = models.DateTimeField(default=datetime.datetime.now, editable=False)
# 
#     def active(self):
#         return status == 'A'
# 
#     def __unicode__(self):
#         return '%s (%s) [%s]' % (self.email, self.key, self.get_status_display())
# 
#     class Meta:
#         db_table = 'locksmith_auth_apikey'


# Path: locksmith/auth/views.py
from uuid import UUID
from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt
from locksmith.common import get_signature
from locksmith.auth.models import ApiKey

def update_key(request, get_by='key'):
    if not verify_signature(request.POST):
        return HttpResponseBadRequest('bad signature')
    # get the key
    if get_by == 'key':
        key = get_object_or_404(ApiKey, key=request.POST['key'])
    elif get_by == 'email':
        key = get_object_or_404(ApiKey, email=request.POST['email'])

    # update key
    key.key = request.POST['key']
    key.email = request.POST['email']
    key.status = request.POST['status']
    key.save()

    return HttpResponse('OK')


@csrf_exempt
@require_POST
def accept_key(request, key_uuid):
    if not verify_signature(request.POST):
        return HttpResponseBadRequest('bad signature')

    if u'status' not in request.POST:
        return HttpResponseBadRequest('no status specified')

    if u'email' not in request.POST:
        return HttpResponseBadRequest('no email specified')


    (key, created) = ApiKey.objects.get_or_create(key=key_uuid)