Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
from flask import Flask, jsonify, request
|
| 2 |
from flask_cors import CORS
|
| 3 |
from pymongo.mongo_client import MongoClient
|
| 4 |
from pymongo.server_api import ServerApi
|
|
@@ -14,7 +14,11 @@ from controllers.demo import get_initial_data
|
|
| 14 |
from controllers.mindmap import saveMindmap, getMindmap, getMindmapHistory, deleteMindmap, getMindmapByid, saveMindmapById, saveGeneratedData
|
| 15 |
import json
|
| 16 |
from bson import ObjectId, json_util
|
|
|
|
|
|
|
|
|
|
| 17 |
from dotenv import load_dotenv
|
|
|
|
| 18 |
import os
|
| 19 |
import re
|
| 20 |
import requests
|
|
@@ -44,6 +48,7 @@ users_collection = db["users"]
|
|
| 44 |
interviews_collection = db["interviews"]
|
| 45 |
savedMindmap = db["savedMindmap"]
|
| 46 |
roadmap_collection = db['roadmaps']
|
|
|
|
| 47 |
|
| 48 |
# Send a ping to confirm a successful connection
|
| 49 |
try:
|
|
@@ -83,9 +88,7 @@ safety_settings = [
|
|
| 83 |
},
|
| 84 |
]
|
| 85 |
|
| 86 |
-
model = genai.GenerativeModel('gemini-1.0-pro',
|
| 87 |
-
generation_config=generation_config,
|
| 88 |
-
safety_settings=safety_settings)
|
| 89 |
|
| 90 |
# Caches to reduce no of queries to MongoDB...
|
| 91 |
user_id_ping = {'current': 0}
|
|
@@ -378,6 +381,7 @@ def interview():
|
|
| 378 |
|
| 379 |
- It is required that the response should be an object. Don't include any other verbose explanations and don't include the markdown syntax anywhere.''')
|
| 380 |
print(response.text)
|
|
|
|
| 381 |
temp = json.loads(response.text)
|
| 382 |
user_chats[user_id]['qa'] = [{'question': temp['question']}]
|
| 383 |
return jsonify({'success': True, 'data': response.text})
|
|
@@ -530,12 +534,11 @@ def useridping():
|
|
| 530 |
|
| 531 |
|
| 532 |
# User Routes
|
| 533 |
-
@app.route('/user/
|
| 534 |
-
def
|
| 535 |
data = request.json
|
| 536 |
name = data.get('name')
|
| 537 |
email = data.get('email')
|
| 538 |
-
password = data.get('password')
|
| 539 |
|
| 540 |
if not email:
|
| 541 |
return jsonify({"error": "Invalid email"}), 400
|
|
@@ -544,23 +547,61 @@ def signup():
|
|
| 544 |
|
| 545 |
if existing_user:
|
| 546 |
return jsonify({"message": "User already exists"}), 404
|
|
|
|
|
|
|
| 547 |
|
| 548 |
-
|
|
|
|
|
|
|
|
|
|
| 549 |
|
| 550 |
-
|
| 551 |
-
|
| 552 |
-
"email": email,
|
| 553 |
-
"password": hashed_password
|
| 554 |
-
})
|
| 555 |
|
| 556 |
-
|
| 557 |
|
| 558 |
-
|
| 559 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 560 |
|
| 561 |
-
|
|
|
|
| 562 |
|
| 563 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 564 |
|
| 565 |
@app.route('/user/signin', methods=['POST'])
|
| 566 |
def signin():
|
|
|
|
| 1 |
+
from flask import Flask, jsonify, render_template, request
|
| 2 |
from flask_cors import CORS
|
| 3 |
from pymongo.mongo_client import MongoClient
|
| 4 |
from pymongo.server_api import ServerApi
|
|
|
|
| 14 |
from controllers.mindmap import saveMindmap, getMindmap, getMindmapHistory, deleteMindmap, getMindmapByid, saveMindmapById, saveGeneratedData
|
| 15 |
import json
|
| 16 |
from bson import ObjectId, json_util
|
| 17 |
+
from email.message import EmailMessage
|
| 18 |
+
import smtplib
|
| 19 |
+
import ssl
|
| 20 |
from dotenv import load_dotenv
|
| 21 |
+
import random
|
| 22 |
import os
|
| 23 |
import re
|
| 24 |
import requests
|
|
|
|
| 48 |
interviews_collection = db["interviews"]
|
| 49 |
savedMindmap = db["savedMindmap"]
|
| 50 |
roadmap_collection = db['roadmaps']
|
| 51 |
+
otps_collection = db['otps']
|
| 52 |
|
| 53 |
# Send a ping to confirm a successful connection
|
| 54 |
try:
|
|
|
|
| 88 |
},
|
| 89 |
]
|
| 90 |
|
| 91 |
+
model = genai.GenerativeModel('gemini-1.0-pro', generation_config=generation_config, safety_settings=safety_settings)
|
|
|
|
|
|
|
| 92 |
|
| 93 |
# Caches to reduce no of queries to MongoDB...
|
| 94 |
user_id_ping = {'current': 0}
|
|
|
|
| 381 |
|
| 382 |
- It is required that the response should be an object. Don't include any other verbose explanations and don't include the markdown syntax anywhere.''')
|
| 383 |
print(response.text)
|
| 384 |
+
print(response.text)
|
| 385 |
temp = json.loads(response.text)
|
| 386 |
user_chats[user_id]['qa'] = [{'question': temp['question']}]
|
| 387 |
return jsonify({'success': True, 'data': response.text})
|
|
|
|
| 534 |
|
| 535 |
|
| 536 |
# User Routes
|
| 537 |
+
@app.route('/user/verifymail', methods=['POST'])
|
| 538 |
+
def verifymail():
|
| 539 |
data = request.json
|
| 540 |
name = data.get('name')
|
| 541 |
email = data.get('email')
|
|
|
|
| 542 |
|
| 543 |
if not email:
|
| 544 |
return jsonify({"error": "Invalid email"}), 400
|
|
|
|
| 547 |
|
| 548 |
if existing_user:
|
| 549 |
return jsonify({"message": "User already exists"}), 404
|
| 550 |
+
|
| 551 |
+
msg = EmailMessage()
|
| 552 |
|
| 553 |
+
otp = str(random.randint(100000, 999999))
|
| 554 |
+
msg["Subject"] = "GenUP Nexus Verification"
|
| 555 |
+
msg["From"] = "GenUP Nexus Team"
|
| 556 |
+
msg["To"] = email
|
| 557 |
|
| 558 |
+
html_content = render_template('email.html', name=name, otp=otp)
|
| 559 |
+
msg.set_content(html_content, subtype='html')
|
|
|
|
|
|
|
|
|
|
| 560 |
|
| 561 |
+
context = ssl.create_default_context()
|
| 562 |
|
| 563 |
+
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
|
| 564 |
+
smtp.login('smilecheck100@gmail.com', os.getenv('GMAIL_SSL_KEY'))
|
| 565 |
+
smtp.send_message(msg)
|
| 566 |
+
|
| 567 |
+
otps_collection.insert_one({"email": email, "otp": otp})
|
| 568 |
+
|
| 569 |
+
return jsonify({"success": True}), 200
|
| 570 |
+
|
| 571 |
+
|
| 572 |
+
@app.route('/user/signup', methods=['POST'])
|
| 573 |
+
def signup():
|
| 574 |
+
data = request.json
|
| 575 |
+
print(data)
|
| 576 |
+
form = data.get('form')
|
| 577 |
+
name = form['name']
|
| 578 |
+
email = form['email']
|
| 579 |
+
password = form['password']
|
| 580 |
+
otp = data.get('otp')
|
| 581 |
|
| 582 |
+
if not email:
|
| 583 |
+
return jsonify({"error": "Invalid email"}), 400
|
| 584 |
|
| 585 |
+
stored_otp = otps_collection.find_one({"email": email}, sort=[('_id', -1)])
|
| 586 |
+
|
| 587 |
+
if stored_otp['otp'] == otp:
|
| 588 |
+
hashed_password = bcrypt.generate_password_hash(password).decode('utf-8')
|
| 589 |
+
|
| 590 |
+
result = users_collection.insert_one({
|
| 591 |
+
"name": name,
|
| 592 |
+
"email": email,
|
| 593 |
+
"password": hashed_password
|
| 594 |
+
})
|
| 595 |
+
|
| 596 |
+
expires = timedelta(days=7)
|
| 597 |
+
access_token = create_access_token(identity={"email": email, "id": str(result.inserted_id)}, expires_delta=expires)
|
| 598 |
+
|
| 599 |
+
res = {"name": name, "email": email, "userId": str(result.inserted_id)}
|
| 600 |
+
|
| 601 |
+
return jsonify({"result": res, "token": access_token}), 201
|
| 602 |
+
|
| 603 |
+
else:
|
| 604 |
+
return jsonify({"error": "Invalid otp"}), 400
|
| 605 |
|
| 606 |
@app.route('/user/signin', methods=['POST'])
|
| 607 |
def signin():
|