You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.2 KiB
Python

from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render
from django.urls import reverse
from django.views import View
from mixins.views import ObjectCreate, ObjectDelete, ObjectList, ObjectUpdate
from two_factor.views.mixins import OTPRequiredMixin
from core.clients.platforms.agora import AgoraClient
from core.forms import AdForm
from core.models import Ad
from core.views.helpers import synchronize_async_helper
class Cheat(LoginRequiredMixin, OTPRequiredMixin, View):
template_name = "mixins/partials/notify.html"
def get(self, request):
ads = Ad.objects.filter(user=request.user, enabled=True)
for ad in ads:
for platform in ad.platforms.all():
run = synchronize_async_helper(AgoraClient(platform))
synchronize_async_helper(run.cheat())
context = {"class": "success", "message": "Cheat run"}
return render(request, self.template_name, context)
class AdNuke(LoginRequiredMixin, OTPRequiredMixin, View):
template_name = "mixins/partials/notify.html"
def get(self, request):
ads = Ad.objects.filter(user=request.user, enabled=True)
for ad in ads:
for platform in ad.platforms.all():
run = synchronize_async_helper(AgoraClient(platform))
synchronize_async_helper(run.nuke_ads())
context = {"class": "success", "message": "Ads nuked"}
return render(request, self.template_name, context)
class AdDist(LoginRequiredMixin, OTPRequiredMixin, View):
template_name = "mixins/partials/notify.html"
def get(self, request):
ads = Ad.objects.filter(user=request.user, enabled=True)
for ad in ads:
for platform in ad.platforms.all():
run = synchronize_async_helper(AgoraClient(platform))
synchronize_async_helper(run.dist_countries(ad))
context = {"class": "success", "message": "Ads distributed"}
return render(request, self.template_name, context)
class AdRedist(LoginRequiredMixin, OTPRequiredMixin, View):
template_name = "mixins/partials/notify.html"
def get(self, request):
ads = Ad.objects.filter(user=request.user, enabled=True)
for ad in ads:
for platform in ad.platforms.all():
run = synchronize_async_helper(AgoraClient(platform))
synchronize_async_helper(run.redist_countries(ad))
context = {"class": "success", "message": "Ads updated"}
return render(request, self.template_name, context)
class AdList(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
list_template = "partials/ad-list.html"
model = Ad
page_title = "List of ads"
list_url_name = "ads"
list_url_args = ["type"]
submit_url_name = "ad_create"
def get_context_data(self):
context = super().get_context_data()
self.extra_buttons = [
{
"url": reverse("ad_dist"),
"action": "distribute",
"method": "get",
"label": "Distribute ads",
"icon": "fa-solid fa-upload",
},
{
"url": reverse("ad_redist"),
"action": "redistribute",
"method": "get",
"label": "Update ads",
"icon": "fa-solid fa-refresh",
},
{
"url": reverse("cheat"),
"action": "cheat",
"method": "get",
"label": "Run cheat",
"icon": "fa-solid fa-bolt",
},
{
"url": reverse("ad_nuke"),
"action": "nuke",
"method": "get",
"label": "Nuke ads",
"icon": "fa-solid fa-bomb",
"confirm": True,
},
]
return context
class AdCreate(LoginRequiredMixin, OTPRequiredMixin, ObjectCreate):
model = Ad
form_class = AdForm
submit_url_name = "ad_create"
class AdUpdate(LoginRequiredMixin, OTPRequiredMixin, ObjectUpdate):
model = Ad
form_class = AdForm
submit_url_name = "ad_update"
class AdDelete(LoginRequiredMixin, OTPRequiredMixin, ObjectDelete):
model = Ad