Spaces:
Sleeping
Sleeping
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() | |
def index(request): | |
context = { | |
'user': request.user | |
} | |
return render(request, 'index.html', context=context) | |
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') | |
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') | |
def user_logout(request): | |
logout(request) | |
messages.success(request, ('You have been logged out!')) | |
# print('logged out') | |
return redirect('index') | |
def upload(request): | |
return render(request, 'upload.html') | |
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/') | |
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'], file['id'], file["iconLink"].replace("/16/", "/32/"), file["webContentLink"]]) | |
elif file['mimeType'] == 'application/vnd.google-apps.folder': | |
folders.append([file['title'], "/list/"+file['id'][::-1]]) | |
else: | |
pass | |
context = {'files': files, 'folders': folders, 'back': False} | |
return render(request, 'list.html', context=context) | |
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'], file['id'], file["iconLink"].replace("/16/", "/32/"), file["webContentLink"]]) | |
elif file['mimeType'] == 'application/vnd.google-apps.folder': | |
folders.append([file['title'], "/list/"+file['id'][::-1]]) | |
else: | |
pass | |
context = {'files': files, 'folders': folders, 'back': True} | |
return render(request, 'list.html', context=context) | |
def deleteFile(request): | |
if request.method == 'POST': | |
file_id = json.loads(request.body)['file_id'] | |
file = DRIVE.CreateFile({'id': file_id}) | |
file.Trash() | |
return HttpResponse(json.dumps({'status': 'success'}), content_type='application/json') | |
def renameFile(request): | |
if request.method == 'POST': | |
data = json.loads(request.body) | |
file_id = data['file_id'] | |
new_name = data['new_name'] | |
file = DRIVE.CreateFile({'id': file_id}) | |
file.FetchMetadata(fields="title") | |
file['title'] = new_name | |
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') | |
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') | |