devnamdev2003 commited on
Commit ·
dbb7932
1
Parent(s): 3784aa0
up3
Browse files- api/views.py +60 -42
api/views.py
CHANGED
|
@@ -1,8 +1,14 @@
|
|
| 1 |
from rest_framework.views import APIView
|
| 2 |
from rest_framework.response import Response
|
| 3 |
from rest_framework import status
|
| 4 |
-
from .models import UserData, AIKey, AppVersion
|
| 5 |
from django.shortcuts import get_object_or_404
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
|
| 8 |
class UserDataPostView(APIView):
|
|
@@ -90,24 +96,9 @@ class GetFieldView(APIView):
|
|
| 90 |
if hasattr(obj, field):
|
| 91 |
return Response({field: getattr(obj, field)})
|
| 92 |
return Response({"error": "Invalid field"}, status=status.HTTP_400_BAD_REQUEST)
|
| 93 |
-
|
| 94 |
|
| 95 |
|
| 96 |
-
|
| 97 |
-
from .serializers import ContactSerializer
|
| 98 |
-
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView, CreateAPIView
|
| 99 |
-
import os
|
| 100 |
-
import os
|
| 101 |
-
import smtplib
|
| 102 |
-
from email.mime.text import MIMEText
|
| 103 |
-
from email.mime.multipart import MIMEMultipart
|
| 104 |
-
|
| 105 |
-
EMAIL_HOST = "smtp.gmail.com"
|
| 106 |
-
EMAIL_PORT = 587
|
| 107 |
-
EMAIL_USER = os.getenv('EMAIL_HOST_USER')
|
| 108 |
-
EMAIL_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
|
| 109 |
-
|
| 110 |
-
upper_body="""
|
| 111 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 112 |
<html
|
| 113 |
xmlns="http://www.w3.org/1999/xhtml"
|
|
@@ -337,7 +328,7 @@ upper_body="""
|
|
| 337 |
>
|
| 338 |
<p style="line-height: 160%">
|
| 339 |
Dear
|
| 340 |
-
"""
|
| 341 |
lower_body = """,
|
| 342 |
</p>
|
| 343 |
<p style="line-height: 160%"> </p>
|
|
@@ -966,37 +957,64 @@ lower_body = """,
|
|
| 966 |
|
| 967 |
"""
|
| 968 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 969 |
class ContactList1(CreateAPIView):
|
| 970 |
queryset = Contact.objects.all()
|
| 971 |
serializer_class = ContactSerializer
|
|
|
|
| 972 |
def perform_create(self, serializer):
|
| 973 |
instance = serializer.save()
|
| 974 |
user_ip = self.get_client_ip(self.request)
|
| 975 |
-
|
| 976 |
-
|
| 977 |
-
|
| 978 |
-
|
| 979 |
-
|
| 980 |
-
|
| 981 |
-
|
| 982 |
-
|
| 983 |
-
|
| 984 |
-
|
| 985 |
-
|
| 986 |
-
|
| 987 |
-
|
| 988 |
-
|
| 989 |
-
|
| 990 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 991 |
def get_client_ip(self, request):
|
| 992 |
-
x_forwarded_for = request.META.get(
|
| 993 |
if x_forwarded_for:
|
| 994 |
-
ip = x_forwarded_for.split(
|
| 995 |
else:
|
| 996 |
-
ip = request.META.get(
|
| 997 |
return ip
|
| 998 |
-
|
| 999 |
-
|
| 1000 |
-
# class ContactList2(RetrieveUpdateDestroyAPIView):
|
| 1001 |
-
# queryset = Contact.objects.all()
|
| 1002 |
-
# serializer_class = ContactSerializer
|
|
|
|
| 1 |
from rest_framework.views import APIView
|
| 2 |
from rest_framework.response import Response
|
| 3 |
from rest_framework import status
|
| 4 |
+
from .models import UserData, AIKey, AppVersion, Contact
|
| 5 |
from django.shortcuts import get_object_or_404
|
| 6 |
+
from .serializers import ContactSerializer
|
| 7 |
+
from rest_framework.generics import CreateAPIView
|
| 8 |
+
import os
|
| 9 |
+
import smtplib
|
| 10 |
+
from email.mime.text import MIMEText
|
| 11 |
+
from email.mime.multipart import MIMEMultipart
|
| 12 |
|
| 13 |
|
| 14 |
class UserDataPostView(APIView):
|
|
|
|
| 96 |
if hasattr(obj, field):
|
| 97 |
return Response({field: getattr(obj, field)})
|
| 98 |
return Response({"error": "Invalid field"}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
| 99 |
|
| 100 |
|
| 101 |
+
upper_body = """
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| 103 |
<html
|
| 104 |
xmlns="http://www.w3.org/1999/xhtml"
|
|
|
|
| 328 |
>
|
| 329 |
<p style="line-height: 160%">
|
| 330 |
Dear
|
| 331 |
+
"""
|
| 332 |
lower_body = """,
|
| 333 |
</p>
|
| 334 |
<p style="line-height: 160%"> </p>
|
|
|
|
| 957 |
|
| 958 |
"""
|
| 959 |
|
| 960 |
+
EMAIL_HOST = "smtp.gmail.com"
|
| 961 |
+
EMAIL_PORT = 587
|
| 962 |
+
EMAIL_USER = os.getenv("EMAIL_HOST_USER")
|
| 963 |
+
EMAIL_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD")
|
| 964 |
+
|
| 965 |
+
|
| 966 |
class ContactList1(CreateAPIView):
|
| 967 |
queryset = Contact.objects.all()
|
| 968 |
serializer_class = ContactSerializer
|
| 969 |
+
|
| 970 |
def perform_create(self, serializer):
|
| 971 |
instance = serializer.save()
|
| 972 |
user_ip = self.get_client_ip(self.request)
|
| 973 |
+
|
| 974 |
+
email = instance.email
|
| 975 |
+
name = instance.name
|
| 976 |
+
message = instance.message
|
| 977 |
+
|
| 978 |
+
try:
|
| 979 |
+
msg = MIMEMultipart()
|
| 980 |
+
msg["From"] = EMAIL_USER
|
| 981 |
+
msg["To"] = email
|
| 982 |
+
msg["Subject"] = "Confirmation: We've Received Your Message"
|
| 983 |
+
|
| 984 |
+
body = upper_body + name + lower_body
|
| 985 |
+
msg.attach(MIMEText(body, "html"))
|
| 986 |
+
|
| 987 |
+
# 🔥 IMPORTANT: timeout added
|
| 988 |
+
server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT, timeout=10)
|
| 989 |
+
server.starttls()
|
| 990 |
+
server.login(EMAIL_USER, EMAIL_PASSWORD)
|
| 991 |
+
|
| 992 |
+
server.sendmail(EMAIL_USER, email, msg.as_string())
|
| 993 |
+
|
| 994 |
+
admin_text = (
|
| 995 |
+
f"Subject: Form Submission from {name}\n\n"
|
| 996 |
+
f"Name: {name}\n"
|
| 997 |
+
f"Email: {email}\n"
|
| 998 |
+
f"Message: {message}\n"
|
| 999 |
+
f"IP Address: {user_ip}"
|
| 1000 |
+
)
|
| 1001 |
+
|
| 1002 |
+
server.sendmail(EMAIL_USER, "devnamdevcse@gmail.com", admin_text)
|
| 1003 |
+
|
| 1004 |
+
except Exception as e:
|
| 1005 |
+
# ❗ Prevent worker crash
|
| 1006 |
+
print("Email error:", e)
|
| 1007 |
+
|
| 1008 |
+
finally:
|
| 1009 |
+
try:
|
| 1010 |
+
server.quit()
|
| 1011 |
+
except:
|
| 1012 |
+
pass
|
| 1013 |
+
|
| 1014 |
def get_client_ip(self, request):
|
| 1015 |
+
x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
|
| 1016 |
if x_forwarded_for:
|
| 1017 |
+
ip = x_forwarded_for.split(",")[0]
|
| 1018 |
else:
|
| 1019 |
+
ip = request.META.get("REMOTE_ADDR")
|
| 1020 |
return ip
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|