mirror of
https://github.com/viq/NewsBlur.git
synced 2025-08-05 16:49:45 +00:00
49 lines
2 KiB
Python
49 lines
2 KiB
Python
![]() |
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
from django.conf import settings
|
||
|
|
||
|
|
||
|
def duplicate_txn_id(ipn_obj):
|
||
|
"""Returns True if a record with this transaction id exists."""
|
||
|
return ipn_obj._default_manager.filter(txn_id=ipn_obj.txn_id).count() > 0
|
||
|
|
||
|
def make_secret(form_instance, secret_fields=None):
|
||
|
"""
|
||
|
Returns a secret for use in a EWP form or an IPN verification based on a
|
||
|
selection of variables in params. Should only be used with SSL.
|
||
|
|
||
|
"""
|
||
|
# @@@ Moved here as temporary fix to avoid dependancy on auth.models.
|
||
|
from django.contrib.auth.models import get_hexdigest
|
||
|
# @@@ amount is mc_gross on the IPN - where should mapping logic go?
|
||
|
# @@@ amount / mc_gross is not nessecarily returned as it was sent - how to use it? 10.00 vs. 10.0
|
||
|
# @@@ the secret should be based on the invoice or custom fields as well - otherwise its always the same.
|
||
|
|
||
|
# Build the secret with fields availible in both PaymentForm and the IPN. Order matters.
|
||
|
if secret_fields is None:
|
||
|
secret_fields = ['business', 'item_name']
|
||
|
|
||
|
data = ""
|
||
|
for name in secret_fields:
|
||
|
if hasattr(form_instance, 'cleaned_data'):
|
||
|
if name in form_instance.cleaned_data:
|
||
|
data += unicode(form_instance.cleaned_data[name])
|
||
|
else:
|
||
|
# Initial data passed into the constructor overrides defaults.
|
||
|
if name in form_instance.initial:
|
||
|
data += unicode(form_instance.initial[name])
|
||
|
elif name in form_instance.fields and form_instance.fields[name].initial is not None:
|
||
|
data += unicode(form_instance.fields[name].initial)
|
||
|
|
||
|
secret = get_hexdigest('sha1', settings.SECRET_KEY, data)
|
||
|
return secret
|
||
|
|
||
|
def check_secret(form_instance, secret):
|
||
|
"""
|
||
|
Returns true if received `secret` matches expected secret for form_instance.
|
||
|
Used to verify IPN.
|
||
|
|
||
|
"""
|
||
|
# @@@ add invoice & custom
|
||
|
# secret_fields = ['business', 'item_name']
|
||
|
return make_secret(form_instance) == secret
|