Skip to content

Commit

Permalink
Merge branch 'master' of ssh://dit.polylan.ch:1025/agepoly/polybanking
Browse files Browse the repository at this point in the history
  • Loading branch information
the-glu committed Jan 18, 2014
2 parents 4e5d176 + 97c1960 commit c961da0
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 101 deletions.
4 changes: 3 additions & 1 deletion client/httpd.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"""This example show a full http server.
"""
from flask import Flask
from flask import render_template
from flask import request
Expand All @@ -22,7 +24,7 @@ def home():
def start():
"""Start a new paiement"""

(result, url) = api.new_transation(request.args.get('amount', ''), str(uuid.uuid4()))
(result, url) = api.new_transaction(request.args.get('amount', ''), str(uuid.uuid4()))

return render_template('start.html', result=result, url=url)

Expand Down
8 changes: 4 additions & 4 deletions client/libs/polybanking.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def escape_chars(s):

return h.hexdigest()

def new_transation(self, amount, reference, extra_data=''):
def new_transaction(self, amount, reference, extra_data=''):
"""Start a new transation, with the specified amount and reference. The reference must be unique.
Return (Status, the URL where the user should be redirected or None)
Status can be 'OK', 'KEY_ERROR', 'CONFIG_ERROR', 'AMOUNT_ERROR', 'REFERENCE_ERROR', 'ERROR'"""
Expand Down Expand Up @@ -75,7 +75,7 @@ def get_transactions(self, max_transaction=100):
data['max_transaction'] = max_transaction

try:
result = requests.post(self.server + '/api/transactions/', data=data).json()
result = requests.get(self.server + '/api/transactions/', params=data).json()
if result['result'] != 'ok':
return None

Expand All @@ -94,7 +94,7 @@ def get_transaction(self, reference):
data['reference'] = reference

try:
result = requests.post(self.server + '/api/transactions/' + reference + '/', data=data).json()
result = requests.get(self.server + '/api/transactions/' + reference + '/', params=data).json()
if result['result'] != 'ok':
return None

Expand All @@ -113,7 +113,7 @@ def get_transaction_logs(self, reference):
data['reference'] = reference

try:
result = requests.post(self.server + '/api/transactions/' + reference + '/logs/', data=data).json()
result = requests.get(self.server + '/api/transactions/' + reference + '/logs/', params=data).json()
if result['result'] != 'ok':
return None

Expand Down
45 changes: 22 additions & 23 deletions server/api/views.py
Original file line number Diff line number Diff line change
@@ -1,68 +1,67 @@
# -*- coding: utf-8 -*-

from django.shortcuts import get_object_or_404, render_to_response, redirect
from django.template import RequestContext
from django.core.context_processors import csrf
from django.shortcuts import get_object_or_404
from django.views.decorators.csrf import csrf_exempt
from django.http import Http404, HttpResponse, HttpResponseForbidden, HttpResponseNotFound
from django.utils.encoding import smart_str
from django.conf import settings
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.decorators import login_required, user_passes_test
from django.http import HttpResponseRedirect
from django.db import connections
from django.core.paginator import InvalidPage, EmptyPage, Paginator
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.contrib import messages
from django.http import HttpResponse
from django.views.decorators import require_GET
from django.utils.translation import ugettext_lazy as _


import json


from configs.models import Config
from paiements.models import Transaction, TransactionLog
from paiements.models import Transaction


@csrf_exempt
@require_GET
def transactions_list(request):
"""Return the list of transaction"""
config_pk = request.GET.get('config_id', -1)
secret = request.GET.get('secret', '#')

config = get_object_or_404(Config, pk=request.POST.get('config_id', -1), key_api=request.POST.get('secret', '#'))

max_transaction = int(request.POST.get('max_transaction', '100'))
config = get_object_or_404(Config, pk=config_pk, key_api=secret)
try:
max_transaction = int(request.GET['max_transaction'])
except (ValueError, KeyError):
max_transaction = 100

retour = []

for transaction in config.transaction_set.order_by('-creation_date').all()[:max_transaction]:
for transaction in config.transaction_set.order_by('-creation_date')[:max_transaction]:
retour.append({'reference': transaction.reference})

return HttpResponse(json.dumps({'result': 'ok', 'data': retour}))


@csrf_exempt
@require_GET
def transactions_show(request, reference):
"""Return details of a transaction"""
config_pk = request.GET.get('config_id', -1)
secret = request.GET.get('secret', '#')

config = get_object_or_404(Config, pk=request.POST.get('config_id', -1), key_api=request.POST.get('secret', '#'))
config = get_object_or_404(Config, pk=config_pk, key_api=secret)

transaction = get_object_or_404(Transaction, config=config, reference=reference)

return HttpResponse(json.dumps({'result': 'ok', 'data': transaction.dump_api()}))


@csrf_exempt
@require_GET
def transactions_show_logs(request, reference):
"""Return logs of a transaction"""
config_pk = request.GET.get('config_id', -1)
secret = request.GET.get('secret', '#')

config = get_object_or_404(Config, pk=request.POST.get('config_id', -1), key_api=request.POST.get('secret', '#'))
config = get_object_or_404(Config, pk=config_pk, key_api=secret)

transaction = get_object_or_404(Transaction, config=config, reference=reference)

retour = []

for log in transaction.transactionlog_set.order_by('-when').all():
for log in transaction.transactionlog_set.order_by('-when'):
retour.append(log.dump_api())

return HttpResponse(json.dumps({'result': 'ok', 'data': retour}))
4 changes: 2 additions & 2 deletions server/configs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import uuid
import datetime
import hashlib
import os
import random


class Config(models.Model):
Expand Down Expand Up @@ -81,7 +81,7 @@ def gen_key(self):
h = hashlib.sha512()

for i in range(2):
h.update(str(os.random()))
h.update(str(random.SystemRandom().random()))
h.update(str(uuid.uuid4()))
h.update(str(datetime.datetime.now()))
h.update(str(self.pk))
Expand Down
6 changes: 2 additions & 4 deletions server/configs/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@
url(r'^(?P<pk>[0-9]+)/show/$', 'show'),
url(r'^(?P<pk>[0-9]+)/edit/$', 'edit'),
url(r'^(?P<pk>[0-9]+)/logs/$', 'show_logs'),

#url(r'^(?P<pk>[0-9]+)/delete/$', 'delete'),

url(r'^(?P<pk>[0-9]+)/keys/ipn/new/$', 'new_ipn_key'),
url(r'^(?P<pk>[0-9]+)/keys/requests/new/$', 'new_requests_key'),
url(r'^(?P<pk>[0-9]+)/keys/api/new/$', 'new_api_key'),
url(r'^(?P<pk>[0-9]+)/keys/(?P<key_type>(ipn|requests|api))/new/$', 'new_ipn_key'),

)
94 changes: 27 additions & 67 deletions server/configs/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,9 @@

from django.shortcuts import get_object_or_404, render_to_response, redirect
from django.template import RequestContext
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_exempt
from django.http import Http404, HttpResponse, HttpResponseForbidden, HttpResponseNotFound
from django.utils.encoding import smart_str
from django.conf import settings
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.decorators import login_required, user_passes_test
from django.http import HttpResponseRedirect
from django.db import connections
from django.core.paginator import InvalidPage, EmptyPage, Paginator
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.http import Http404
from django.views.decorators import require_POST, require_GET
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _

Expand All @@ -23,15 +14,16 @@


@login_required
@require_GET
def list(request):
"""Show the list of configs"""

if request.user.is_superuser:
list = Config.objects.order_by('name').all()
configs = Config.objects.order_by('name')
else:
list = Config.objects.filter(allowed_users=request.user).order_by('name').all()
configs = Config.objects.filter(allowed_users=request.user).order_by('name')

return render_to_response('configs/configs/list.html', {'list': list}, context_instance=RequestContext(request))
return render_to_response('configs/configs/list.html', {'list': configs}, context_instance=RequestContext(request))


@login_required
Expand Down Expand Up @@ -96,6 +88,7 @@ def edit(request, pk):


@login_required
@require_GET
def show(request, pk):
"""Show a config"""

Expand All @@ -108,58 +101,25 @@ def show(request, pk):


@login_required
def new_ipn_key(request, pk):
"""Generate a new ipn key"""
@require_GET
def new_key(request, pk, key_type):
config = get_object_or_404(Config, pk=pk)

object = get_object_or_404(Config, pk=pk)

if not object.is_user_allowed(request.user):
raise Http404

object.gen_key_ipn()
object.save()

ConfigLogs(config=object, user=request.user, text=_('A new IPN key has been generated.')).save()

messages.success(request, _('A new IPN key has been generated !'))

return redirect('configs.views.show', pk=pk)


@login_required
def new_requests_key(request, pk):
"""Generate a new request key"""

object = get_object_or_404(Config, pk=pk)

if not object.is_user_allowed(request.user):
raise Http404

object.gen_key_request()
object.save()

ConfigLogs(config=object, user=request.user, text=_('A new requests key has been generated.')).save()

messages.success(request, _('A new requests key has been generated !'))

return redirect('configs.views.show', pk=pk)


@login_required
def new_api_key(request, pk):
"""Generate a new api key"""

object = get_object_or_404(Config, pk=pk)

if not object.is_user_allowed(request.user):
if not config.is_user_allowed(request.user):
raise Http404

object.gen_key_api()
object.save()
if key_type == "request":
config.gen_key_request()
elif key_type == "ipn":
config.gen_key_ipn()
elif key_type == "api":
config.gen_key_api()
config.save()

log_message = _(u"A new {} key has been generated".format(key_type))
ConfigLogs(config=config, user=request.user, text=log_message).save()

ConfigLogs(config=object, user=request.user, text=_('A new api key has been generated.')).save()

messages.success(request, _('A new api key has been generated !'))
messages.success(request, log_message)

return redirect('configs.views.show', pk=pk)

Expand All @@ -168,11 +128,11 @@ def new_api_key(request, pk):
def show_logs(request, pk):
"""Display config's logs"""

object = get_object_or_404(Config, pk=pk)
config = get_object_or_404(Config, pk=pk)

if not object.is_user_allowed(request.user):
if not config.is_user_allowed(request.user):
raise Http404

list = object.configlogs_set.order_by('-when').all()
list = config.configlogs_set.order_by('-when')

return render_to_response('configs/configs/logs.html', {'object': object, 'list': list}, context_instance=RequestContext(request))
return render_to_response('configs/configs/logs.html', {'object': config, 'list': list}, context_instance=RequestContext(request))

0 comments on commit c961da0

Please sign in to comment.