CloudStorage / home /views.py
thejagstudio's picture
Update home/views.py
36c062e verified
raw
history blame
7.78 kB
from django.shortcuts import render, redirect, HttpResponse
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
import json
from .models import Userdata, ip_address
import threading
from django.core.files.storage import FileSystemStorage
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.core.mail import send_mail
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import requests
import geocoder
import folium
from oauth2client import client
gauth = GoogleAuth()
content = os.environ.get('token')
gauth.credentials = client.Credentials.new_from_json(content)
if gauth.access_token_expired:
# Refresh them if expired
gauth.Refresh()
else:
gauth.Authorize()
DRIVE = GoogleDrive(gauth)
def GoogleDriveUpload(filename, folder):
file1 = DRIVE.CreateFile({'title': filename, 'parents': [{'id': folder}]})
file1.SetContentFile("files/"+filename)
file1.Upload()
@csrf_exempt
def index(request):
context = {
'user': request.user
}
return render(request, 'index.html', context=context)
@csrf_exempt
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
messages.success(request, ('You have been logged in!'))
# print('logged in')
return redirect('index')
else:
messages.success(request, ('Error logging in - please try again.'))
# print('error logging in')
return render(request, 'login.html')
return render(request, 'login.html')
@csrf_exempt
def sign_up(request):
if request.method == 'POST':
name = request.POST['name']
email = request.POST['email']
password = request.POST['password']
password2 = request.POST['password1']
user = authenticate(request, email=email, password=password)
if user is not None and password == password2:
login(request, user)
messages.success(request, ('You have been logged in!'))
# print('logged in')
return redirect('index')
elif user is None and password == password2:
user = User.objects.create_user(username=email, email=email, password=password, first_name=name)
user.save()
messages.success(request, ('Created new user!'))
login(request, user)
folder = '1N3uD81zuXY_23esOFWRvN2Fp4zEbCrzy'
new_folder = DRIVE.CreateFile({'title': name, 'mimeType': 'application/vnd.google-apps.folder', 'parents': [{'id': folder}]})
new_folder.Upload()
new_folder.InsertPermission({'type': 'user', 'value': email, 'role': 'writer'})
dataObj = Userdata(user_id=request.user, folder=new_folder['id'])
dataObj.save()
# print('new user created')
return redirect('index')
else:
pass
return render(request, 'signup.html')
@csrf_exempt
@login_required
def user_logout(request):
logout(request)
messages.success(request, ('You have been logged out!'))
# print('logged out')
return redirect('index')
@csrf_exempt
@login_required
def upload(request):
return render(request, 'upload.html')
@csrf_exempt
@login_required
def uploader(request):
if request.method == 'POST':
folder = 'files/'
file = request.FILES['file']
title = request.POST['title']
if title == '':
title = file.name
fs = FileSystemStorage(location=folder)
filename = fs.save(title, file)
# print(filename)
if file.name == '':
return redirect('../upload/')
folder_id = Userdata.objects.get(user_id=request.user).folder
thread = threading.Thread(target=GoogleDriveUpload, args=(title, folder_id))
thread.start()
thread.join()
os.remove(folder+"/"+filename)
return redirect('../upload/')
@csrf_exempt
@login_required
def list(request):
files = []
folders = []
folder_id = Userdata.objects.get(user_id=request.user).folder
list_files = DRIVE.ListFile({'q': "'%s' in parents and trashed=false" % folder_id}).GetList()
for file in list_files:
if file['title'] != 'Deleted' and file['title'] != 'DeletedFile' and file['mimeType'] != 'application/vnd.google-apps.folder':
files.append([file['title'], file['embedLink']])
elif file['mimeType'] == 'application/vnd.google-apps.folder':
folders.append([file['title'], "/list/"+file['id'][::-1]])
else:
pass
context = {'files': files, 'folders': folders}
return render(request, 'list.html', context=context)
@csrf_exempt
@login_required
def folder_list(request, id):
files = []
folders = []
folder_id = id[::-1] # Userdata.objects.get(user_id=request.user).folder
list_files = DRIVE.ListFile({'q': "'%s' in parents and trashed=false" % folder_id}).GetList()
for file in list_files:
if file['title'] != 'Deleted' and file['mimeType'] != 'application/vnd.google-apps.folder':
files.append([file['title'], file['embedLink']])
elif file['mimeType'] == 'application/vnd.google-apps.folder':
folders.append([file['title'], "/list/"+file['id'][::-1]])
else:
pass
context = {'files': files, 'folders': folders}
return render(request, 'folder_list.html', context=context)
@csrf_exempt
@login_required
def deleteFile(request):
if request.method == 'POST':
file_id = json.loads(request.body)['file_id']
print(file_id)
file = DRIVE.CreateFile({'id': file_id})
file.FetchMetadata(fields="title")
file['title'] = 'Deleted'
file.SetContentString('')
file.Upload()
return HttpResponse(json.dumps({'status': 'success'}), content_type='application/json')
def emailSender(request):
name = request.GET.get('name', '')
email = request.GET.get('email', '')
subject = request.GET.get('subject', '')
message = request.GET.get('message', '')
print(name, email, subject, message)
subject = subject + ' - ' + name + ' - ' + email
response = requests.get('https://script.google.com/macros/s/AKfycbwQxoJPZYttDmLEym7btUB2F-KIbvITr9EWSdfC5TaYJZybnA-s/exec?email=tempmailpatel@gmail.com&subject='+subject+'&body='+message+'&html=false')
print(response.json())
'''message = message
from_email = settings.EMAIL_HOST_USER
to_email = settings.EMAIL_HOST_USER
send_mail(subject, message, from_email, [to_email], fail_silently=True)'''
return redirect('index')
def ipGetter(request):
ip = request.GET.get('ip', '')
ipIn = ip_address.objects.filter(ip=ip).first()
if ipIn is None:
new_entry = ip_address(ip=ip)
new_entry.save()
print(ip)
return HttpResponse(json.dumps({'status': 'success'}), content_type='application/json')
@login_required
def godMode(request):
if request.user.is_superuser:
ips = ip_address.objects.all()
ipF = ips[0].ip
g = geocoder.ip(ipF)
myAddress = g.latlng
my_map1 = folium.Map(location=myAddress, zoom_start=12)
for ip in ips:
g = geocoder.ip(ip.ip)
myAddress = g.latlng
folium.Marker(myAddress).add_to(my_map1)
my_map1.save('templates/godMode.html')
return render(request, 'godMode.html')