Implement more advanced 2FA library
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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.
|
||||
"""
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user