From ce1faae46aa6aded1fa67fe2ce2020da8dfd6bf0 Mon Sep 17 00:00:00 2001 From: Tait Hoyem Date: Fri, 20 Nov 2020 09:03:28 -0700 Subject: [PATCH] Add CSV download option --- viewdownloads/__pycache__/urls.cpython-38.pyc | Bin 316 -> 422 bytes .../__pycache__/views.cpython-38.pyc | Bin 527 -> 1656 bytes .../templates/viewrequests/requests.html | 2 ++ viewdownloads/urls.py | 2 ++ viewdownloads/views.py | 33 ++++++++++++++++-- 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/viewdownloads/__pycache__/urls.cpython-38.pyc b/viewdownloads/__pycache__/urls.cpython-38.pyc index bb2075c202f4b1577c9e143091d9e0f91e27d8aa..3d3d3c7c2610615e09dbbca352d101e068f6e36e 100644 GIT binary patch delta 214 zcmdnPw2WChl$V!_0SF>rY>)o{q#uJg$bcQlaRB0CuZh~4YN?DV?5WIItSKBRY`x4t z9w(5;mcj+%r87sdr*H=|X!1;qGqJB?NiHtaj}j`&Of8R3$uG~#$xlovjt2@>aU|yC z=!0d&z_LItstP|%j)_xMl$n8QqS%2%JW$0g?$V;1g2a-N)S|rNl?+APKsOa}Pdt~x Q2Xa3TBM&nlBM|-t0JUs6XaE2J delta 109 zcmZ3+yoX6Ul$V!_0SKOcSQ=jfq#uJg$bc2daRB0Cy@}eIT94-3n(ylM3W4?8-+%NjJVO3L zV|6)Td?os_+W0f~U%BybjMAU)v+?<|Uj#+K%z1$hnZF_FC)lH$shzTnQ6M!4oM4x=l?@ ziX$PF=%w*&3U*_sIL^}|=C8CC*%(6t9&4eKObjS~_IjaSf_oco^)ZM!8IciH>zZkY z(^I(ih<4|Y6?e2Z^3O`=>Yz76(Z_dwi6LV<`?NLTMG= zC|g6Fr3iZIzp8W*jM8y7zC_O3W#dj1WZ6tqFP`Y3$aOLR%v`$gT0%95WGH+Prd0Gt zkh?NYoWf@d2?X`}(+g@!*GF6sc^@LLz7B^)CPE#{{cxukOfvYe3I_!jp%UqS_gE%C zQXU?QezzYh!NbEzp+$Gh_e0EtUsI{9rMAXX<0Vj!6XZ?RKoAlV+58E?z;pP+EMpqwojFzfunAtPdhizeUv0tO+5PS1&hAbE zGo%s(+HTr@l4}U2fue~5%W6D<85##V!Ia`Po+(*+mpdnH& zdV@mZl$whDT2BE|iNBGyACNG5$F`A|VjY16 zkWCL?AYg?qLS485`VM=<0{Sy;f-c+Oztx2}?Rd29!uLVBd)hg}sc$>GGJu#%4&uVI zl*l^hEAxma$a^So)K(BWfbauwDQtQ>A5?Zg`+qo(;qBdUP6>cvOEB^&gxz^!2|0m( z!G{pAdTJN!-8Qw|)~=f-AI14Wv89HE)Pspu%YO>8V)HW9>wt+&mHp{Njhk-T%AlU$ s#hfHgza4f6G4qGRwc!?EI*lX*whL;lrl}6zG1NOg|8~^|S delta 375 zcmYjMu}T9$5S`iGyM*L|A|eDVMZCgJun|#AVU44&m&i%gK_Qrtrp$>of&UItkjkL0^ zugis`;WRSg3L}Votr(2e&{@y>dG70lq3wEuD_W^$)Wwv>p20M$7d&rA)NkuVz+z;u s_GMb6yJ=j#MeEgSys{I1{CPCZp#CT!>+5^Ekkef4hjVP`UB-le1B%~I_W%F@ diff --git a/viewdownloads/templates/viewrequests/requests.html b/viewdownloads/templates/viewrequests/requests.html index fffb2ff..d4ee552 100644 --- a/viewdownloads/templates/viewrequests/requests.html +++ b/viewdownloads/templates/viewrequests/requests.html @@ -1,6 +1,8 @@ {% extends 'common/master.html' %} {% block body %}

View Download Attempts

+Download as CSV +Download all as CSV diff --git a/viewdownloads/urls.py b/viewdownloads/urls.py index bd6956d..1e41e78 100644 --- a/viewdownloads/urls.py +++ b/viewdownloads/urls.py @@ -3,4 +3,6 @@ from . import views urlpatterns = [ path('', views.index, name='requests_view'), + path('csv/', views.csv, name='view_downloads_csv'), + path('all/csv/', views.csv_all, name='view_all_downloads_csv'), ] \ No newline at end of file diff --git a/viewdownloads/views.py b/viewdownloads/views.py index 51dfb09..e72c881 100644 --- a/viewdownloads/views.py +++ b/viewdownloads/views.py @@ -1,9 +1,38 @@ -from django.shortcuts import render, HttpResponse +from django.shortcuts import render, HttpResponse, redirect +from django.urls import reverse_lazy from download.models import DownloadAttempt +from datetime import datetime # Create your views here. def index(request): + if not request.user.is_authenticated: + return redirect(reverse_lazy('login')) # TODO: Allow search return render(request, 'viewrequests/requests.html', { - 'requests': DownloadAttempt.objects.all().order_by('-timestamp')[:100] + 'requests': DownloadAttempt.objects.all().order_by('-timestamp')[:10] }) + +def csv_resp(max_items=-1): + header = "Email,Address,IP,Geolocation,Timestamp,Valid Code,Email Sent\n" + body = "" + if max_items == -1: + das = DownloadAttempt.objects.all().order_by('-timestamp') + else: + das = DownloadAttempt.objects.all().order_by('-timestamp')[:max_items] + + for dla in das: + body += dla.user.email + ',' + dla.pdf.address.address + ',' + dla.ip + ',"' + dla.geolocation + '",' + dla.timestamp.strftime('%Y/%m/%d %H:%M:%S') + ',' + str(dla.code_correct) + ',' + str(dla.email_sent) + "\n" + resp = HttpResponse(header + body, content_type='text/csv') + resp['Content-Disposition'] = "attachment; filename=download_attempts.csv" + return resp + + +def csv(request): + if not request.user.is_authenticated: + return redirect(reverse_lazy('login')) + return csv_resp(100) + +def csv_all(request): + if not request.user.is_authenticated: + return redirect(reverse_lazy('login')) + return csv_resp() \ No newline at end of file
Email