application instead of application client id
This commit is contained in:
parent
ca78b94653
commit
ba6507c8f9
9 changed files with 78 additions and 42 deletions
|
|
@ -4,7 +4,7 @@ from django.contrib.auth.views import LoginView
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.views.generic import DetailView
|
from django.views.generic import DetailView, UpdateView
|
||||||
from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
|
from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope
|
||||||
from rest_framework import generics, status, permissions
|
from rest_framework import generics, status, permissions
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
@ -97,18 +97,29 @@ class ChangePasswordView(generics.UpdateAPIView):
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
|
class OTPLoginView(LoginView):
|
||||||
|
template_name = 'users/login.html'
|
||||||
|
"""
|
||||||
|
Display the login form and handle the login action.
|
||||||
|
"""
|
||||||
|
form_class = OTPAuthenticationForm
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(login_required, name='dispatch')
|
@method_decorator(login_required, name='dispatch')
|
||||||
class ProfileView(DetailView):
|
class ProfileView(DetailView):
|
||||||
model = User
|
model = User
|
||||||
template_name = 'registration/profile.html'
|
template_name = 'users/profile_detail.html'
|
||||||
pk_url_kwarg = 'uuid'
|
pk_url_kwarg = 'uuid'
|
||||||
|
|
||||||
def get_object(self, queryset=None):
|
def get_object(self, queryset=None):
|
||||||
return self.request.user
|
return self.request.user
|
||||||
|
|
||||||
|
|
||||||
class OTPLoginView(LoginView):
|
@method_decorator(login_required, name='dispatch')
|
||||||
"""
|
class ProfileUpdate(UpdateView):
|
||||||
Display the login form and handle the login action.
|
model = User
|
||||||
"""
|
template_name = 'users/profile_update.html'
|
||||||
form_class = OTPAuthenticationForm
|
pk_url_kwarg = 'uuid'
|
||||||
|
|
||||||
|
def get_object(self, queryset=None):
|
||||||
|
return self.request.user
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,9 @@ class TransactionAdmin(admin.ModelAdmin):
|
||||||
'state',
|
'state',
|
||||||
'delay',
|
'delay',
|
||||||
'detail_id',
|
'detail_id',
|
||||||
'application_client_id'
|
'application'
|
||||||
]
|
]
|
||||||
readonly_fields = ['uuid', 'last_update', 'create', 'detail_id', 'application_client_id']
|
readonly_fields = ['uuid', 'last_update', 'create', 'detail_id', 'application']
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Transaction, TransactionAdmin)
|
admin.site.register(Transaction, TransactionAdmin)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Generated by Django 4.1 on 2022-09-08 12:16
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
|
||||||
|
('wallet', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='transaction',
|
||||||
|
name='application_client_id',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='transaction',
|
||||||
|
name='application',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='transactions', to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -7,7 +7,7 @@ from django.db.models import F
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from model_utils.choices import Choices
|
from model_utils.choices import Choices
|
||||||
from rest_framework.exceptions import APIException, ValidationError
|
from rest_framework.exceptions import APIException, ValidationError
|
||||||
|
from django.conf import settings
|
||||||
from .constans import STATE_CHOICES
|
from .constans import STATE_CHOICES
|
||||||
from apps.users.models import User
|
from apps.users.models import User
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ class TransactionManager(models.Manager):
|
||||||
payer: User = None,
|
payer: User = None,
|
||||||
delay=0,
|
delay=0,
|
||||||
# detail_id=None,
|
# detail_id=None,
|
||||||
application_client_id=None,
|
application=None,
|
||||||
# state=None,
|
# state=None,
|
||||||
uuid=None
|
uuid=None
|
||||||
):
|
):
|
||||||
|
|
@ -40,7 +40,7 @@ class TransactionManager(models.Manager):
|
||||||
amount=amount,
|
amount=amount,
|
||||||
delay=delay,
|
delay=delay,
|
||||||
# detail_id=detail_id,
|
# detail_id=detail_id,
|
||||||
application_client_id=application_client_id
|
application=application
|
||||||
)
|
)
|
||||||
# if state:
|
# if state:
|
||||||
# transaction.state = state
|
# transaction.state = state
|
||||||
|
|
@ -60,13 +60,14 @@ class Transaction(models.Model):
|
||||||
state = models.IntegerField(choices=STATE_CHOICES, default=STATE_CHOICES.created)
|
state = models.IntegerField(choices=STATE_CHOICES, default=STATE_CHOICES.created)
|
||||||
create = models.DateTimeField(_('create'), blank=True, null=True, auto_now=True)
|
create = models.DateTimeField(_('create'), blank=True, null=True, auto_now=True)
|
||||||
last_update = models.DateTimeField(_('last update'), blank=True, null=True, auto_now=True)
|
last_update = models.DateTimeField(_('last update'), blank=True, null=True, auto_now=True)
|
||||||
application_client_id = models.CharField(max_length=100, db_index=True, null=True)
|
application = models.ForeignKey(settings.OAUTH2_PROVIDER_APPLICATION_MODEL, on_delete=models.PROTECT,
|
||||||
|
related_name='transactions', null=True)
|
||||||
detail_id = models.IntegerField(null=True, blank=True) # TODO: or better detail url
|
detail_id = models.IntegerField(null=True, blank=True) # TODO: or better detail url
|
||||||
|
|
||||||
objects = TransactionManager()
|
objects = TransactionManager()
|
||||||
|
|
||||||
# class Meta:
|
# class Meta:
|
||||||
# unique_together = ('application_client_id', 'detail_id',)
|
# unique_together = ('application', 'detail_id',)
|
||||||
|
|
||||||
def pay(self, payer=None):
|
def pay(self, payer=None):
|
||||||
if not self.payer and not payer:
|
if not self.payer and not payer:
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ class TransactionSerializer(serializers.ModelSerializer):
|
||||||
payer = PublicUserSerializer(required=False)
|
payer = PublicUserSerializer(required=False)
|
||||||
payee = PublicUserSerializer(required=False, read_only=True)
|
payee = PublicUserSerializer(required=False, read_only=True)
|
||||||
|
|
||||||
# application_client_id = serializers.IntegerField(required=False, read_only=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Transaction
|
model = Transaction
|
||||||
fields = ('uuid',
|
fields = ('uuid',
|
||||||
|
|
@ -24,10 +22,9 @@ class TransactionSerializer(serializers.ModelSerializer):
|
||||||
'delay',
|
'delay',
|
||||||
'last_update',
|
'last_update',
|
||||||
# 'detail_id',
|
# 'detail_id',
|
||||||
# 'application_client_id'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
read_only_fields = ['uuid', 'last_update', 'state', 'create'] # , 'detail_id'] #, 'application_client_id']
|
read_only_fields = ['uuid', 'last_update', 'state', 'create'] # , 'detail_id']
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
# payer = validated_data.get('payer')
|
# payer = validated_data.get('payer')
|
||||||
|
|
@ -59,10 +56,9 @@ class DepositSerializer(serializers.ModelSerializer):
|
||||||
'delay',
|
'delay',
|
||||||
'last_update',
|
'last_update',
|
||||||
# 'detail_id',
|
# 'detail_id',
|
||||||
# 'application_client_id'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
read_only_fields = ['last_update', 'state', 'create', 'payer'] # , 'detail_id'] #, 'application_client_id']
|
read_only_fields = ['last_update', 'state', 'create', 'payer'] # , 'detail_id']
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
with atomic():
|
with atomic():
|
||||||
|
|
@ -90,10 +86,9 @@ class WithdrawSerializer(serializers.ModelSerializer):
|
||||||
'delay',
|
'delay',
|
||||||
'last_update',
|
'last_update',
|
||||||
# 'detail_id',
|
# 'detail_id',
|
||||||
# 'application_client_id'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
read_only_fields = ['last_update', 'state', 'create', 'payee'] # , 'detail_id'] #, 'application_client_id']
|
read_only_fields = ['last_update', 'state', 'create', 'payee'] # , 'detail_id']
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
with atomic():
|
with atomic():
|
||||||
|
|
|
||||||
|
|
@ -18,17 +18,12 @@ from .forms import TransactionActionForm
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
def get_application(request):
|
||||||
def get_application_client_id(request):
|
|
||||||
try:
|
try:
|
||||||
application = request.auth.application
|
application = request.auth.application
|
||||||
if application:
|
|
||||||
application_client_id = application.client_id
|
|
||||||
else:
|
|
||||||
application_client_id = request.auth.detail.get('client_id')
|
|
||||||
except:
|
except:
|
||||||
application_client_id = None
|
application = None
|
||||||
return application_client_id
|
return application
|
||||||
|
|
||||||
# TODO: this is user invoice create view
|
# TODO: this is user invoice create view
|
||||||
# class TransactionList(generics.ListCreateAPIView):
|
# class TransactionList(generics.ListCreateAPIView):
|
||||||
|
|
@ -45,7 +40,7 @@ def get_application_client_id(request):
|
||||||
#
|
#
|
||||||
# def perform_create(self, serializer):
|
# def perform_create(self, serializer):
|
||||||
# user = self.request.user
|
# user = self.request.user
|
||||||
# serializer.save(payee=user, application_client_id=get_application_client_id(self.request))
|
# serializer.save(payee=user, application=get_application(self.request))
|
||||||
|
|
||||||
|
|
||||||
# this is application create invoice view
|
# this is application create invoice view
|
||||||
|
|
@ -64,7 +59,7 @@ class TransactionList(generics.ListCreateAPIView):
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
payer = self.request.user
|
payer = self.request.user
|
||||||
payee = self.request.auth.application.user
|
payee = self.request.auth.application.user
|
||||||
serializer.save(payer=payer, payee=payee, application_client_id=get_application_client_id(self.request))
|
serializer.save(payer=payer, payee=payee, application=get_application(self.request))
|
||||||
|
|
||||||
|
|
||||||
class TransactionDetail(generics.RetrieveAPIView):
|
class TransactionDetail(generics.RetrieveAPIView):
|
||||||
|
|
@ -118,12 +113,12 @@ class DepositSubmit(generics.CreateAPIView):
|
||||||
required_scopes = ['wallet.deposit:submit']
|
required_scopes = ['wallet.deposit:submit']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
application_client_id = get_application_client_id(self.request)
|
application = get_application(self.request)
|
||||||
return Transaction.objects.filter(application_client_id=application_client_id).all()
|
return Transaction.objects.filter(application=application).all()
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
payer = self.request.auth.application.user
|
payer = self.request.auth.application.user
|
||||||
serializer.save(payer=payer, application_client_id=get_application_client_id(self.request))
|
serializer.save(payer=payer, application=get_application(self.request))
|
||||||
|
|
||||||
|
|
||||||
class DepositVerify(generics.RetrieveAPIView):
|
class DepositVerify(generics.RetrieveAPIView):
|
||||||
|
|
@ -133,8 +128,8 @@ class DepositVerify(generics.RetrieveAPIView):
|
||||||
required_scopes = ['wallet.deposit:verify']
|
required_scopes = ['wallet.deposit:verify']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
application_client_id = get_application_client_id(self.request)
|
application = get_application(self.request)
|
||||||
return Transaction.objects.filter(application_client_id=application_client_id).all()
|
return Transaction.objects.filter(application=application).all()
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
|
|
@ -151,12 +146,12 @@ class WithdrawSubmit(generics.CreateAPIView):
|
||||||
required_scopes = ['wallet.withdraw:submit']
|
required_scopes = ['wallet.withdraw:submit']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
application_client_id = get_application_client_id(self.request)
|
application = get_application(self.request)
|
||||||
return Transaction.objects.filter(application_client_id=application_client_id).all()
|
return Transaction.objects.filter(application=application).all()
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
payee = self.request.auth.application.user
|
payee = self.request.auth.application.user
|
||||||
serializer.save(payee=payee, application_client_id=get_application_client_id(self.request))
|
serializer.save(payee=payee, application=get_application(self.request))
|
||||||
|
|
||||||
|
|
||||||
class WithdrawVerify(generics.RetrieveAPIView):
|
class WithdrawVerify(generics.RetrieveAPIView):
|
||||||
|
|
@ -166,8 +161,8 @@ class WithdrawVerify(generics.RetrieveAPIView):
|
||||||
required_scopes = ['wallet.withdraw:verify']
|
required_scopes = ['wallet.withdraw:verify']
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
application_client_id = get_application_client_id(self.request)
|
application = get_application(self.request)
|
||||||
return Transaction.objects.filter(application_client_id=application_client_id).all()
|
return Transaction.objects.filter(application=application).all()
|
||||||
|
|
||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
|
|
|
||||||
9
templates/users/profile_update.html
Normal file
9
templates/users/profile_update.html
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{% extends "base_generic.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h2>Homepage</h2>
|
||||||
|
<p>Hello {{ user.username }}!</p>
|
||||||
|
<p>your phone number {{ user.phone_number }}!</p>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
Loading…
Add table
Reference in a new issue