254 lines
10 KiB
Python
254 lines
10 KiB
Python
from django.shortcuts import render, redirect
|
|
import random
|
|
from django.contrib.auth import authenticate, login
|
|
from .forms import *
|
|
from Device .forms import DevicesForm
|
|
from django.db import IntegrityError
|
|
from django.conf import settings
|
|
from .models import*
|
|
from django.http import HttpResponse
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.template.loader import render_to_string
|
|
from django.utils.html import strip_tags
|
|
from django.contrib import messages
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.http import JsonResponse
|
|
from django.contrib.auth import logout
|
|
from django.utils.decorators import method_decorator
|
|
from django.contrib.auth.decorators import login_required
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from .models import UserProfile
|
|
from Device .models import Devices
|
|
from .serializers import UserProfileSerializer, DeviceSerializer
|
|
import os
|
|
|
|
#________________________________________________________Mail Functions____________________________________________
|
|
|
|
def tech4biz_generate_otp(length=6):
|
|
otp = ""
|
|
for _ in range(length):
|
|
otp += str(random.randint(0, 9))
|
|
return otp
|
|
|
|
def tech4biz_send_otp_email(email):
|
|
otp = tech4biz_generate_otp()
|
|
subject = 'Your OTP for Signup'
|
|
html_content = render_to_string('accounts/otp_template.html', {'otp': otp})
|
|
text_content = strip_tags(html_content)
|
|
email_message = EmailMultiAlternatives(subject, text_content, settings.EMAIL_HOST_USER, [email])
|
|
email_message.attach_alternative(html_content, "text/html")
|
|
try:
|
|
email_message.send()
|
|
return otp
|
|
except Exception as e:
|
|
return None
|
|
|
|
#________________________________________________________Signup Login___________________________________________________
|
|
|
|
# def tech4biz_Signup(request):
|
|
# if request.method == 'POST':
|
|
# form = SignUpForm(request.POST)
|
|
# if form.is_valid():
|
|
# request.session['form_data'] = form.cleaned_data
|
|
# email = form.cleaned_data['email']
|
|
# try:
|
|
# otp = tech4biz_send_otp_email(email)
|
|
# print(otp)
|
|
# request.session['sent_otp'] = otp
|
|
# return redirect('otp_verification')
|
|
# except Exception as e:
|
|
# return HttpResponse(f'Failed to send OTP email: {e}')
|
|
# else:
|
|
# form = SignUpForm()
|
|
# return render(request, 'accounts/signup.html', {'form': form})
|
|
|
|
|
|
|
|
# def tech4biz_Signup(request):
|
|
# if request.method == 'POST':
|
|
# form = SignUpForm(request.POST)
|
|
# if form.is_valid():
|
|
# user_profile = form.save() # Saves both the user and user profile
|
|
# request.session['user_id'] = user_profile.user.id # Assuming user_profile has a related User object
|
|
|
|
# return JsonResponse({
|
|
# "message": "User registered successfully",
|
|
# "user_id": user_profile.user.id # Include user.id in the response
|
|
# }, status=200)
|
|
# else:
|
|
# # Return a more user-friendly error message
|
|
# error_messages = form.errors.as_json() # Get errors in JSON format
|
|
# return JsonResponse({"error": error_messages}, status=400) # Return form errors as JSON
|
|
# else:
|
|
# form = SignUpForm() # Instantiate an empty form
|
|
|
|
# return render(request, 'accounts/signup.html', {'form': form})
|
|
def tech4biz_Signup(request):
|
|
mapbox_access_token = 'pk.eyJ1IjoiZmxleHhvbiIsImEiOiJjbHVtYzNoM2cwNXI2MnFveW51c2tyejVwIn0.ceqt6Ot6nU67CUmxVAWPEQ'
|
|
print("Received a request to tech4biz_Signup")
|
|
|
|
if request.method == 'POST':
|
|
print("Processing POST request")
|
|
|
|
form = SignUpForm(request.POST)
|
|
device_form = DevicesForm(request.POST)
|
|
|
|
print("SignUpForm and DevicesForm created")
|
|
|
|
if form.is_valid():
|
|
# Save the user profile from SignUpForm
|
|
user_profile = form.save()
|
|
print("User profile created:", user_profile)
|
|
user_id = user_profile.user.id # Access the ID of the newly created user from user_profile
|
|
print("Extracted user ID:", user_id)
|
|
|
|
# Set the user_id in the session
|
|
request.session['user_id'] = user_id
|
|
# Set 'used_by' field directly in device_form's data before validation
|
|
device_form.data = device_form.data.copy()
|
|
device_form.data['used_by'] = user_profile
|
|
if device_form.is_valid():
|
|
# Create device instance from device_form without saving it yet
|
|
device_instance = device_form.save(commit=False)
|
|
device_instance.used_by = user_profile # Set the user as 'used_by'
|
|
|
|
print('Device instance prepared for saving:', device_instance)
|
|
try:
|
|
# Save the device instance
|
|
device_instance.save()
|
|
print("Device instance saved successfully")
|
|
# Set the device ID in environment variable
|
|
os.environ['DEVICE_ID'] = str(device_instance.id)
|
|
print("Device ID set in OS environment:", os.environ['DEVICE_ID'])
|
|
|
|
device_id = device_instance.id
|
|
|
|
return JsonResponse({
|
|
"message": "User and device registered successfully",
|
|
"user_id": user_profile.user.id,
|
|
"device_id": device_id
|
|
}, status=200)
|
|
except IntegrityError as e:
|
|
error_message = str(e)
|
|
print("IntegrityError occurred:", error_message)
|
|
form.add_error(None, error_message)
|
|
device_form.add_error(None, error_message)
|
|
else:
|
|
# Print device form errors if it is not valid
|
|
print("Device form errors:", device_form.errors)
|
|
return JsonResponse({
|
|
"device_errors": device_form.errors.as_json()
|
|
}, status=400)
|
|
else:
|
|
# Return form errors if any exist
|
|
error_messages = form.errors.as_json()
|
|
device_error_messages = device_form.errors.as_json()
|
|
print("Form errors:", error_messages)
|
|
print("Device form errors:", device_error_messages)
|
|
return JsonResponse({
|
|
"error": error_messages,
|
|
"device_errors": device_error_messages
|
|
}, status=400)
|
|
else:
|
|
print("Request method is not POST")
|
|
form = SignUpForm()
|
|
device_form = DevicesForm()
|
|
|
|
return render(request, 'accounts/signup.html', {
|
|
'form': form,
|
|
'device_form': device_form,
|
|
"mapbox_access_token": mapbox_access_token
|
|
})
|
|
|
|
def otp_verification(request):
|
|
if request.method == 'POST':
|
|
# Get individual OTP digits
|
|
entered_otp1 = request.POST.get('email_otp1')
|
|
entered_otp2 = request.POST.get('email_otp2')
|
|
entered_otp3 = request.POST.get('email_otp3')
|
|
entered_otp4 = request.POST.get('email_otp4')
|
|
entered_otp5 = request.POST.get('email_otp5')
|
|
entered_otp6 = request.POST.get('email_otp6')
|
|
|
|
# Combine OTP digits into a single string
|
|
entered_otp = entered_otp1 + entered_otp2 + entered_otp3 + entered_otp4 + entered_otp5 + entered_otp6
|
|
|
|
print(entered_otp, "otp") # Just for debugging
|
|
|
|
stored_otp = request.session.get('sent_otp')
|
|
|
|
if entered_otp == stored_otp:
|
|
form_data = request.session.get('form_data')
|
|
form = SignUpForm(form_data)
|
|
if form.is_valid():
|
|
form.save()
|
|
del request.session['form_data']
|
|
del request.session['sent_otp']
|
|
return redirect('login')
|
|
else:
|
|
messages.error(request, 'Form data is not valid.')
|
|
return redirect('signup')
|
|
else:
|
|
messages.error(request, 'Invalid OTP. Please try again.')
|
|
return redirect('otp_verification')
|
|
|
|
return render(request, 'accounts/otp_verification.html')
|
|
|
|
@csrf_exempt
|
|
def tech4biz_Login(request):
|
|
if request.user.is_authenticated: # Check if the user is already logged in
|
|
return redirect('home')
|
|
if request.method == 'POST':
|
|
form = UserLoginForm(request.POST)
|
|
if form.is_valid():
|
|
email = form.cleaned_data['email']
|
|
password = form.cleaned_data['password']
|
|
user = authenticate(request, username=email, password=password)
|
|
if user is not None:
|
|
login(request, user)
|
|
return redirect('home')
|
|
else:
|
|
return render(request, 'accounts/login.html', {'form': form, 'invalid_login': True})
|
|
else:
|
|
form = UserLoginForm()
|
|
return render(request, 'accounts/login.html', {'form': form})
|
|
|
|
|
|
def user_logout(request):
|
|
logout(request)
|
|
return redirect('login')
|
|
|
|
def profile(request):
|
|
return render(request, 'profile/profile.html')
|
|
#____________________________________________________________________________________________________________________
|
|
|
|
@api_view(['GET'])
|
|
@login_required # Ensures the user is logged in
|
|
def get_user_details_and_device_pods(request):
|
|
try:
|
|
# Get the logged-in user's UserProfile
|
|
user_profile = UserProfile.objects.get(user=request.user)
|
|
|
|
# Get the devices associated with the logged-in user
|
|
devices = Devices.objects.filter(used_by=user_profile)
|
|
|
|
# Construct the response data
|
|
response_data = {
|
|
"user_details": {
|
|
"user": user_profile.user.id,
|
|
"email": user_profile.email,
|
|
"phone_number": user_profile.phone_number,
|
|
"company_name": user_profile.company_name,
|
|
},
|
|
"device_pods": [{"pod": device.pod} for device in devices]
|
|
}
|
|
print('response data',response_data)
|
|
# Return data as JSON response
|
|
return JsonResponse(response_data, status=200)
|
|
|
|
except UserProfile.DoesNotExist:
|
|
return JsonResponse({"error": "User profile not found."}, status=404)
|
|
except Exception as e:
|
|
return JsonResponse({"error": str(e)}, status=500) |