Implement more advanced 2FA library

This commit is contained in:
2022-11-28 19:45:22 +00:00
parent 7a64759ceb
commit 0fc7c5c712
31 changed files with 406 additions and 41 deletions

View File

@@ -4,6 +4,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.views import View
from two_factor.views.mixins import OTPRequiredMixin
from core.forms import AccountForm
from core.models import Account
@@ -13,7 +14,7 @@ from core.views import ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate
log = logs.get_logger(__name__)
class AccountInfo(LoginRequiredMixin, View):
class AccountInfo(LoginRequiredMixin, OTPRequiredMixin, View):
VIEWABLE_FIELDS_MODEL = [
"name",
"exchange",
@@ -69,7 +70,7 @@ class AccountInfo(LoginRequiredMixin, View):
return render(request, template_name, context)
class AccountList(LoginRequiredMixin, ObjectList):
class AccountList(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
list_template = "partials/account-list.html"
model = Account
page_title = "List of accounts"
@@ -80,7 +81,7 @@ class AccountList(LoginRequiredMixin, ObjectList):
submit_url_name = "account_create"
class AccountCreate(LoginRequiredMixin, ObjectCreate):
class AccountCreate(LoginRequiredMixin, OTPRequiredMixin, ObjectCreate):
model = Account
form_class = AccountForm
@@ -103,7 +104,7 @@ class AccountCreate(LoginRequiredMixin, ObjectCreate):
# )
class AccountUpdate(LoginRequiredMixin, ObjectUpdate):
class AccountUpdate(LoginRequiredMixin, OTPRequiredMixin, ObjectUpdate):
model = Account
form_class = AccountForm
@@ -113,7 +114,7 @@ class AccountUpdate(LoginRequiredMixin, ObjectUpdate):
submit_url_name = "account_update"
class AccountDelete(LoginRequiredMixin, ObjectDelete):
class AccountDelete(LoginRequiredMixin, OTPRequiredMixin, ObjectDelete):
model = Account
list_url_name = "accounts"

View File

@@ -94,7 +94,7 @@ class Signup(CreateView):
def get(self, request, *args, **kwargs):
if not settings.REGISTRATION_OPEN:
return render(request, "registration/registration_closed.html")
super().get(request, *args, **kwargs)
return super().get(request, *args, **kwargs)
class Portal(LoginRequiredMixin, View):

View File

@@ -5,6 +5,7 @@ from django.http import HttpResponseBadRequest
from django.shortcuts import render
from django.views import View
from rest_framework.parsers import FormParser
from two_factor.views.mixins import OTPRequiredMixin
from core.exchanges import GenericAPIError
from core.models import Account
@@ -27,14 +28,14 @@ def get_positions(user, account_id=None):
return items
class Positions(LoginRequiredMixin, View):
class Positions(LoginRequiredMixin, OTPRequiredMixin, View):
allowed_types = ["modal", "widget", "window", "page"]
window_content = "window-content/objects.html"
list_template = "partials/position-list.html"
page_title = "Live positions from all exchanges"
page_subtitle = "Manual trades are editable under 'Bot Trades' tab."
async def get(self, request, type, account_id=None):
def get(self, request, type, account_id=None):
if type not in self.allowed_types:
return HttpResponseBadRequest
template_name = f"wm/{type}.html"
@@ -55,12 +56,12 @@ class Positions(LoginRequiredMixin, View):
return render(request, template_name, context)
class PositionAction(LoginRequiredMixin, View):
class PositionAction(LoginRequiredMixin, OTPRequiredMixin, View):
allowed_types = ["modal", "widget", "window", "page"]
window_content = "window-content/view-position.html"
parser_classes = [FormParser]
async def get(self, request, type, account_id, symbol):
def get(self, request, type, account_id, symbol):
"""
Get live information for a trade.
"""

View File

@@ -1,17 +1,17 @@
from django.contrib.auth.mixins import LoginRequiredMixin
# from django.urls import reverse
from two_factor.views.mixins import OTPRequiredMixin
from core.forms import StrategyForm
from core.models import Strategy
from core.util import logs
from core.views import ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate
# from django.urls import reverse
log = logs.get_logger(__name__)
class StrategyList(LoginRequiredMixin, ObjectList):
class StrategyList(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
list_template = "partials/strategy-list.html"
model = Strategy
page_title = "List of strategies"
@@ -22,7 +22,7 @@ class StrategyList(LoginRequiredMixin, ObjectList):
submit_url_name = "strategy_create"
class StrategyCreate(LoginRequiredMixin, ObjectCreate):
class StrategyCreate(LoginRequiredMixin, OTPRequiredMixin, ObjectCreate):
model = Strategy
form_class = StrategyForm
list_url_name = "strategies"
@@ -31,7 +31,7 @@ class StrategyCreate(LoginRequiredMixin, ObjectCreate):
submit_url_name = "strategy_create"
class StrategyUpdate(LoginRequiredMixin, ObjectUpdate):
class StrategyUpdate(LoginRequiredMixin, OTPRequiredMixin, ObjectUpdate):
model = Strategy
form_class = StrategyForm
@@ -41,7 +41,7 @@ class StrategyUpdate(LoginRequiredMixin, ObjectUpdate):
submit_url_name = "strategy_update"
class StrategyDelete(LoginRequiredMixin, ObjectDelete):
class StrategyDelete(LoginRequiredMixin, OTPRequiredMixin, ObjectDelete):
model = Strategy
list_url_name = "strategies"

View File

@@ -1,6 +1,7 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render
from django.views import View
from two_factor.views.mixins import OTPRequiredMixin
from core.forms import TradeForm
from core.models import Trade
@@ -16,7 +17,7 @@ from core.views import (
log = logs.get_logger(__name__)
class TradeList(LoginRequiredMixin, ObjectList):
class TradeList(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
list_template = "partials/trade-list.html"
model = Trade
page_title = (
@@ -32,7 +33,7 @@ class TradeList(LoginRequiredMixin, ObjectList):
delete_all_url_name = "trade_delete_all"
class TradeCreate(LoginRequiredMixin, ObjectCreate):
class TradeCreate(LoginRequiredMixin, OTPRequiredMixin, ObjectCreate):
model = Trade
form_class = TradeForm
list_url_name = "trades"
@@ -45,7 +46,7 @@ class TradeCreate(LoginRequiredMixin, ObjectCreate):
log.debug(f"Posting trade {obj}")
class TradeUpdate(LoginRequiredMixin, ObjectUpdate):
class TradeUpdate(LoginRequiredMixin, OTPRequiredMixin, ObjectUpdate):
model = Trade
form_class = TradeForm
list_url_name = "trades"
@@ -54,14 +55,14 @@ class TradeUpdate(LoginRequiredMixin, ObjectUpdate):
submit_url_name = "trade_update"
class TradeDelete(LoginRequiredMixin, ObjectDelete):
class TradeDelete(LoginRequiredMixin, OTPRequiredMixin, ObjectDelete):
model = Trade
list_url_name = "trades"
list_url_args = ["type"]
class TradeDeleteAll(LoginRequiredMixin, ObjectNameMixin, View):
class TradeDeleteAll(LoginRequiredMixin, OTPRequiredMixin, ObjectNameMixin, View):
template_name = "partials/notify.html"
model = Trade