Spaces:
Sleeping
Sleeping
Delete service
Browse files- service/AuthService.py +0 -292
- service/ChatService.py +0 -141
- service/DefaultService.py +0 -205
- service/FileService.py +0 -151
- service/MySQLService.py +0 -201
- service/OTPService.py +0 -168
- service/UserService.py +0 -322
- service/app/firebase_certificate.json +0 -0
service/AuthService.py
DELETED
@@ -1,292 +0,0 @@
|
|
1 |
-
from datetime import timedelta, datetime
|
2 |
-
from request import RequestAuth as req
|
3 |
-
from response import ResponseAuth as res
|
4 |
-
import requests
|
5 |
-
import json, re
|
6 |
-
from auth.authentication import signJWT
|
7 |
-
from firebase_admin import credentials, auth, exceptions
|
8 |
-
import firebase_admin
|
9 |
-
from repository import UserLoginRepository, UserRepository, UserInfoRepository, OTPRepository
|
10 |
-
import service.OTPService
|
11 |
-
from function import support_function as sf
|
12 |
-
from dotenv import load_dotenv
|
13 |
-
import os
|
14 |
-
from response import ResponseUser as res
|
15 |
-
load_dotenv()
|
16 |
-
CLIENT_ID_GOOGLE = os.getenv('CLIENT_ID')
|
17 |
-
API_SIGN_UP_FIREBASE_PATH = os.getenv('API_SIGN_UP_FIREBASE')
|
18 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
19 |
-
def get_user1(email):
|
20 |
-
try:
|
21 |
-
user = auth.get_user_by_email(email)
|
22 |
-
return user
|
23 |
-
except exceptions.FirebaseError as e:
|
24 |
-
return None
|
25 |
-
|
26 |
-
def check_email(email):
|
27 |
-
if isinstance(email, str) and re.fullmatch(regex, email):
|
28 |
-
return True
|
29 |
-
else:
|
30 |
-
return False
|
31 |
-
from pathlib import Path
|
32 |
-
try:
|
33 |
-
if not firebase_admin._apps:
|
34 |
-
json_path = Path(__file__).resolve().parent / 'app' / 'firebase_certificate.json'
|
35 |
-
cred = credentials.Certificate(str(json_path))
|
36 |
-
fred = firebase_admin.initialize_app(cred)
|
37 |
-
except:
|
38 |
-
if not firebase_admin._apps:
|
39 |
-
cred = credentials.Certificate("firebase_certificate.json")
|
40 |
-
fred = firebase_admin.initialize_app(cred)
|
41 |
-
def sign_up_with_email_and_password(email, password, username=None, return_secure_token=True):
|
42 |
-
try:
|
43 |
-
rest_api_url = "https://identitytoolkit.googleapis.com/v1/accounts:signUp"
|
44 |
-
payload = {
|
45 |
-
"email": email,
|
46 |
-
"password": password,
|
47 |
-
"returnSecureToken": return_secure_token
|
48 |
-
}
|
49 |
-
if username:
|
50 |
-
payload["displayName"] = username
|
51 |
-
payload = json.dumps(payload)
|
52 |
-
r = requests.post(rest_api_url, params={"key": API_SIGN_UP_FIREBASE_PATH}, data=payload)
|
53 |
-
try:
|
54 |
-
if r.status_code == 200:
|
55 |
-
response_data = r.json()
|
56 |
-
email = response_data.get('email')
|
57 |
-
display_name = response_data.get('displayName')
|
58 |
-
return email, display_name
|
59 |
-
except Exception as e:
|
60 |
-
pass
|
61 |
-
except Exception as e:
|
62 |
-
pass
|
63 |
-
|
64 |
-
def sign_in_with_email_and_password(email=None, password=None, return_secure_token=True):
|
65 |
-
rest_api_url = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword"
|
66 |
-
try:
|
67 |
-
payload = {
|
68 |
-
"returnSecureToken": return_secure_token
|
69 |
-
}
|
70 |
-
if email:
|
71 |
-
payload["email"] = email
|
72 |
-
if password:
|
73 |
-
payload["password"] = password
|
74 |
-
payload = json.dumps(payload)
|
75 |
-
r = requests.post(rest_api_url, params={"key": API_SIGN_UP_FIREBASE_PATH}, data=payload)
|
76 |
-
r.raise_for_status()
|
77 |
-
data = r.json()
|
78 |
-
if 'idToken' in data:
|
79 |
-
return data['email']
|
80 |
-
else:
|
81 |
-
return False
|
82 |
-
except requests.exceptions.RequestException as e:
|
83 |
-
print(f"Error signing in: {e}")
|
84 |
-
return False
|
85 |
-
|
86 |
-
|
87 |
-
def login(request: req.RequestLoginEmail):
|
88 |
-
try:
|
89 |
-
email = request.email
|
90 |
-
password = request.password
|
91 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
92 |
-
if check_email_fc is not True:
|
93 |
-
return check_email_fc
|
94 |
-
if password is None:
|
95 |
-
return res.ReponseError(
|
96 |
-
status=400,
|
97 |
-
data=res.Message(message="Password is empty")
|
98 |
-
)
|
99 |
-
user_check = get_user1(email)
|
100 |
-
if user_check is None:
|
101 |
-
return res.ReponseError(
|
102 |
-
status=404,
|
103 |
-
data=res.Message(message="Email not exits")
|
104 |
-
)
|
105 |
-
user = sign_in_with_email_and_password(email, password)
|
106 |
-
|
107 |
-
if user:
|
108 |
-
check = signJWT(user)
|
109 |
-
if check is False:
|
110 |
-
return res.ReponseError(
|
111 |
-
status=500,
|
112 |
-
data=res.Message(message="Invalid authorization code.")
|
113 |
-
)
|
114 |
-
else:
|
115 |
-
access_token = check["access_token"]
|
116 |
-
refresh_token = check["refresh_token"]
|
117 |
-
expires_in = check["expires_in"]
|
118 |
-
session_id = check["session_id"]
|
119 |
-
return res.ResponseLoginEmail(
|
120 |
-
status=200,
|
121 |
-
data=res.DataLogin(access_token=access_token, refresh_token=refresh_token, expires_in=expires_in,
|
122 |
-
session_id=session_id)
|
123 |
-
)
|
124 |
-
else:
|
125 |
-
return res.ReponseError(
|
126 |
-
status=400,
|
127 |
-
data=res.Message(message="Passwords do not match")
|
128 |
-
)
|
129 |
-
except:
|
130 |
-
return res.ReponseError(
|
131 |
-
status=500,
|
132 |
-
data=res.Message(message="Server Error")
|
133 |
-
)
|
134 |
-
|
135 |
-
def verify_token_google(token):
|
136 |
-
from google.oauth2 import id_token
|
137 |
-
from google.auth.transport import requests
|
138 |
-
try:
|
139 |
-
CLIENT_ID = CLIENT_ID_GOOGLE
|
140 |
-
id_info = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)
|
141 |
-
check = id_info['email_verified']
|
142 |
-
if check is True:
|
143 |
-
return True
|
144 |
-
except ValueError as e:
|
145 |
-
return False
|
146 |
-
|
147 |
-
def login_google(request: req.RequestLoginGoogle):
|
148 |
-
try:
|
149 |
-
email = request.email
|
150 |
-
token_google = request.token_google
|
151 |
-
check_google = verify_token_google(token_google)
|
152 |
-
if check_google is False:
|
153 |
-
return res.ReponseError(
|
154 |
-
status=400,
|
155 |
-
data =res.Message(message="Login google failed")
|
156 |
-
)
|
157 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
158 |
-
if check_email_fc is not True:
|
159 |
-
return check_email_fc
|
160 |
-
user = get_user1(email)
|
161 |
-
if user:
|
162 |
-
check = signJWT(email)
|
163 |
-
if check == False:
|
164 |
-
return res.ReponseError(
|
165 |
-
status=500,
|
166 |
-
data =res.Message(message="Invalid authorization code.")
|
167 |
-
)
|
168 |
-
else:
|
169 |
-
access_token = check["access_token"]
|
170 |
-
refresh_token = check["refresh_token"]
|
171 |
-
expires_in = check["expires_in"]
|
172 |
-
session_id = check["session_id"]
|
173 |
-
return res.ResponseLoginGoogle(
|
174 |
-
status= 200,
|
175 |
-
data = res.DataLogin(access_token=access_token,refresh_token=refresh_token,expires_in=expires_in,session_id=session_id)
|
176 |
-
)
|
177 |
-
else:
|
178 |
-
return res.ReponseError(
|
179 |
-
status= 404,
|
180 |
-
data = res.Message(message="Email not exist")
|
181 |
-
)
|
182 |
-
except:
|
183 |
-
return res.ReponseError(
|
184 |
-
status=500,
|
185 |
-
data=res.Message(message="Server Error")
|
186 |
-
)
|
187 |
-
|
188 |
-
def sign_up(request: req.RequestRegister):
|
189 |
-
try:
|
190 |
-
email = request.email
|
191 |
-
password = request.password
|
192 |
-
confirm_password = request.confirm_password
|
193 |
-
username = request.username
|
194 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
195 |
-
if check_email_fc is not True:
|
196 |
-
return check_email_fc
|
197 |
-
if password is None or password == "":
|
198 |
-
return res.ReponseError(
|
199 |
-
status=400,
|
200 |
-
data =res.Message(message="password is empty")
|
201 |
-
)
|
202 |
-
if confirm_password is None or confirm_password == "":
|
203 |
-
return res.ReponseError(
|
204 |
-
status=400,
|
205 |
-
data =res.Message(message="confirm password is empty")
|
206 |
-
)
|
207 |
-
if confirm_password != password:
|
208 |
-
return res.ReponseError(status=400,
|
209 |
-
data =res.Message(message="password and confirm_password do not match"))
|
210 |
-
user_signup = get_user1(email)
|
211 |
-
if user_signup is not None:
|
212 |
-
return res.ReponseError(
|
213 |
-
status=400,
|
214 |
-
data =res.Message(message="Email exist")
|
215 |
-
)
|
216 |
-
|
217 |
-
user_info, display_name = sign_up_with_email_and_password(email, password, username)
|
218 |
-
if user_info:
|
219 |
-
return res.ResponseSignUp(
|
220 |
-
status=200,
|
221 |
-
data =res.DataSignUp(email=user_info)
|
222 |
-
)
|
223 |
-
else:
|
224 |
-
return res.ReponseError(
|
225 |
-
status=500,
|
226 |
-
data =res.Message(message="Internal Server Error")
|
227 |
-
)
|
228 |
-
except:
|
229 |
-
return res.ReponseError(
|
230 |
-
status=500,
|
231 |
-
data=res.Message(message="Server Error")
|
232 |
-
)
|
233 |
-
|
234 |
-
import pytz, datetime
|
235 |
-
import auth.authentication as auth123
|
236 |
-
from response import ResponseDefault as res1
|
237 |
-
def refresh_token(request: req.RequestRefreshTokenLogin):
|
238 |
-
try:
|
239 |
-
token = request.refresh_token
|
240 |
-
if token is None:
|
241 |
-
return res.ReponseError(
|
242 |
-
status=400,
|
243 |
-
data=res.Message(message="token is empty")
|
244 |
-
)
|
245 |
-
user_token = UserRepository.getUserIdByRefreshToken(token)
|
246 |
-
if user_token is None:
|
247 |
-
return res.ReponseError(
|
248 |
-
status=404,
|
249 |
-
data=res.Message(message="Not found refresh token")
|
250 |
-
)
|
251 |
-
email = UserRepository.getEmailUserById(user_token)
|
252 |
-
if email:
|
253 |
-
rf_token = token
|
254 |
-
result = auth123.get_refresh_token(token, email)
|
255 |
-
token_new = result["access_token"]
|
256 |
-
rf_token_new = result["refresh_token"]
|
257 |
-
seconds1 = result["expires_in"]
|
258 |
-
session_id = result["session_id"]
|
259 |
-
vn_timezone = pytz.timezone('Asia/Ho_Chi_Minh')
|
260 |
-
current_time = datetime.datetime.utcnow().replace(tzinfo=pytz.utc).astimezone(vn_timezone) + timedelta(
|
261 |
-
seconds=seconds1)
|
262 |
-
formatted_time = current_time.strftime('%Y-%m-%d %H:%M:%S ')
|
263 |
-
if rf_token == rf_token_new:
|
264 |
-
UserRepository.updateAccessToken(user_token, token_new, formatted_time)
|
265 |
-
else:
|
266 |
-
UserRepository.UpdateAccessTokenRefreshTokenById(user_token, token_new, rf_token_new, formatted_time)
|
267 |
-
user = token_new
|
268 |
-
if user == False:
|
269 |
-
return res.ReponseError(
|
270 |
-
status=400,
|
271 |
-
data=res.Message(message="Refresh token error")
|
272 |
-
)
|
273 |
-
return res.ResponseRefreshTokenLogin(
|
274 |
-
status=200,
|
275 |
-
data=res.DataRefreshToken(token_new=user, session_id=session_id)
|
276 |
-
)
|
277 |
-
except:
|
278 |
-
return res.ReponseError(
|
279 |
-
status=500,
|
280 |
-
data=res.Message(message="Server Error")
|
281 |
-
)
|
282 |
-
def check_token_is_valid(token):
|
283 |
-
try:
|
284 |
-
check = UserRepository.getEmailUserByAccessToken(token)
|
285 |
-
if check is None:
|
286 |
-
return False
|
287 |
-
return True
|
288 |
-
except:
|
289 |
-
return res.ReponseError(
|
290 |
-
status=500,
|
291 |
-
data=res.Message(message="Server Error")
|
292 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/ChatService.py
DELETED
@@ -1,141 +0,0 @@
|
|
1 |
-
from typing import Union
|
2 |
-
from datetime import timedelta
|
3 |
-
from request import RequestChat as req
|
4 |
-
from response import ResponseChat as res
|
5 |
-
from repository import ChatHistoryRepository, DetailChatRepository, UserRepository
|
6 |
-
import function.chatbot as sf
|
7 |
-
from typing import Dict
|
8 |
-
import json, re
|
9 |
-
from pydantic import BaseModel
|
10 |
-
from function import support_function
|
11 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
12 |
-
|
13 |
-
def check_email(email):
|
14 |
-
if(re.fullmatch(regex, email)):
|
15 |
-
return True
|
16 |
-
else:
|
17 |
-
return False
|
18 |
-
|
19 |
-
class Document(BaseModel):
|
20 |
-
page_content: str
|
21 |
-
metadata: Dict[str, str]
|
22 |
-
type: str
|
23 |
-
|
24 |
-
def query2_upgrade_old(request: req.RequestQuery2UpgradeOld):
|
25 |
-
try:
|
26 |
-
user_id = request.user_id
|
27 |
-
question = request.question
|
28 |
-
text_all = request.text_all
|
29 |
-
chat_name = request.chat_name
|
30 |
-
email = support_function.check_email_service(str(user_id))
|
31 |
-
if isinstance(email, res.ReponseError):
|
32 |
-
return email
|
33 |
-
if question is None:
|
34 |
-
return res.ReponseError(
|
35 |
-
status=400,
|
36 |
-
data =res.Message(message="question is empty")
|
37 |
-
)
|
38 |
-
if chat_name is None:
|
39 |
-
return res.ReponseError(
|
40 |
-
status=400,
|
41 |
-
data =res.Message(message="chat_name is empty")
|
42 |
-
)
|
43 |
-
text_all_dicts = json.loads(text_all)
|
44 |
-
text_all1 = [Document(**doc) for doc in text_all_dicts]
|
45 |
-
test, list1, list2 = sf.handle_query_upgrade_keyword_old(question, text_all1, email)
|
46 |
-
text1 = "<Data_Relevant>".join(list1)
|
47 |
-
text2 = "<Source_File>".join(list2)
|
48 |
-
id = 0
|
49 |
-
if test:
|
50 |
-
chat_id = ChatHistoryRepository.getIdChatHistoryByUserIdAndNameChat(user_id,chat_name)
|
51 |
-
if chat_id:
|
52 |
-
id = DetailChatRepository.addDetailChat(chat_id,question, test, text1, text2)
|
53 |
-
if chat_id is None:
|
54 |
-
ChatHistoryRepository.addChatHistory(user_id,chat_name)
|
55 |
-
chat_id_new = ChatHistoryRepository.getIdChatHistoryByUserIdAndNameChat(user_id,chat_name)
|
56 |
-
id = DetailChatRepository.addDetailChat(chat_id_new, question, test, text1, text2)
|
57 |
-
return res.ResponseQuery2UpgradeOld(
|
58 |
-
status= 200,
|
59 |
-
data = res.DataAnswer1(id = id,
|
60 |
-
answer=test,
|
61 |
-
data_relevant=list1,
|
62 |
-
sources=list2))
|
63 |
-
if test is None or test == "":
|
64 |
-
return res.ReponseError(
|
65 |
-
status=500,
|
66 |
-
data =res.Message(message="No answer")
|
67 |
-
)
|
68 |
-
except:
|
69 |
-
return res.ReponseError(
|
70 |
-
status=500,
|
71 |
-
data =res.Message(message="Server Error")
|
72 |
-
)
|
73 |
-
|
74 |
-
def extract_file(request: req.RequestExtractFile):
|
75 |
-
try:
|
76 |
-
user_id = request.user_id
|
77 |
-
email = support_function.check_email_service(str(user_id))
|
78 |
-
if isinstance(email, res.ReponseError):
|
79 |
-
return email
|
80 |
-
text_all1 = sf.extract_data2(email)
|
81 |
-
if text_all1 is False:
|
82 |
-
return res.ResponseExtractFile(
|
83 |
-
status= 200,
|
84 |
-
data = res.DataExtractFile(text_all="No data response"))
|
85 |
-
return res.ResponseExtractFile(
|
86 |
-
status= 200,
|
87 |
-
data = res.DataExtractFile(text_all=text_all1))
|
88 |
-
except:
|
89 |
-
return res.ReponseError(
|
90 |
-
status=500,
|
91 |
-
data =res.Message(message="Server Error")
|
92 |
-
)
|
93 |
-
|
94 |
-
def generate_question(request: req.RequestGenerateQuestion):
|
95 |
-
try:
|
96 |
-
user_id = request.user_id
|
97 |
-
email = support_function.check_email_service(str(user_id))
|
98 |
-
if isinstance(email, res.ReponseError):
|
99 |
-
return email
|
100 |
-
text_all1 = sf.generate_question(email)
|
101 |
-
if text_all1 is False:
|
102 |
-
return res.ResponseGenerateQuestion(
|
103 |
-
status= 200,
|
104 |
-
data = res.GenerateQuestion(question=False))
|
105 |
-
|
106 |
-
return res.ResponseGenerateQuestion(
|
107 |
-
status= 200,
|
108 |
-
data = res.GenerateQuestion(question=text_all1))
|
109 |
-
except:
|
110 |
-
return res.ReponseError(
|
111 |
-
status=500,
|
112 |
-
data=res.Message(message="Server Error")
|
113 |
-
)
|
114 |
-
|
115 |
-
def delete_chat(request: req.RequestDeleteChat):
|
116 |
-
try:
|
117 |
-
user_id = request.user_id
|
118 |
-
email = support_function.check_email_service(str(user_id))
|
119 |
-
if isinstance(email, res.ReponseError):
|
120 |
-
return email
|
121 |
-
chat_name = request.chat_name
|
122 |
-
if chat_name is None:
|
123 |
-
return res.ReponseError(
|
124 |
-
status=400,
|
125 |
-
data =res.Message(message="chat_name is empty")
|
126 |
-
)
|
127 |
-
DetailChatRepository.delete_chat_detail(chat_name)
|
128 |
-
check = ChatHistoryRepository.deleteChatHistory(user_id,chat_name)
|
129 |
-
if check is False:
|
130 |
-
return res.ResponseDeleteChat(
|
131 |
-
status = 500,
|
132 |
-
data = res.Message(message="Delete conversation chat failed"))
|
133 |
-
else:
|
134 |
-
return res.ResponseDeleteChat(
|
135 |
-
status = 200,
|
136 |
-
data = res.Message(message="Delete conversation chat success"))
|
137 |
-
except:
|
138 |
-
return res.ReponseError(
|
139 |
-
status= 500,
|
140 |
-
data = res.Message(message="Server Error")
|
141 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/DefaultService.py
DELETED
@@ -1,205 +0,0 @@
|
|
1 |
-
from typing import Union
|
2 |
-
from datetime import timedelta
|
3 |
-
from request import RequestDefault as req
|
4 |
-
from response import ResponseDefault as res
|
5 |
-
from response import ResponseUser as res_login
|
6 |
-
from firebase_admin import credentials, auth, exceptions
|
7 |
-
import firebase_admin
|
8 |
-
import base64
|
9 |
-
import auth.authentication as auth123
|
10 |
-
import re
|
11 |
-
from repository import UserRepository, UserInfoRepository
|
12 |
-
from pathlib import Path
|
13 |
-
import cloudinary
|
14 |
-
import cloudinary.uploader
|
15 |
-
from fastapi import FastAPI, File, UploadFile
|
16 |
-
from function import support_function as sf
|
17 |
-
from dotenv import load_dotenv
|
18 |
-
from service import AuthService as authservice
|
19 |
-
import os
|
20 |
-
load_dotenv()
|
21 |
-
CLOUDINARY_CLOUD_NAME=os.getenv("CLOUDINARY_CLOUD_NAME")
|
22 |
-
CLOUDINARY_API_KEY=os.getenv("CLOUDINARY_API_KEY")
|
23 |
-
CLOUDINARY_API_SECRET=os.getenv("CLOUDINARY_API_SECRET")
|
24 |
-
|
25 |
-
cloudinary.config(
|
26 |
-
cloud_name=CLOUDINARY_CLOUD_NAME,
|
27 |
-
api_key=CLOUDINARY_API_KEY,
|
28 |
-
api_secret=CLOUDINARY_API_SECRET
|
29 |
-
)
|
30 |
-
import os
|
31 |
-
|
32 |
-
try:
|
33 |
-
if not firebase_admin._apps:
|
34 |
-
cred = credentials.Certificate("../certificate/firebase_certificate.json")
|
35 |
-
fred = firebase_admin.initialize_app(cred)
|
36 |
-
except:
|
37 |
-
try:
|
38 |
-
if not firebase_admin._apps:
|
39 |
-
cred = credentials.Certificate("firebase_certificate.json")
|
40 |
-
fred = firebase_admin.initialize_app(cred)
|
41 |
-
except:
|
42 |
-
if not firebase_admin._apps:
|
43 |
-
json_path = Path(__file__).resolve().parent / 'app' / 'firebase_certificate.json'
|
44 |
-
cred = credentials.Certificate(str(json_path))
|
45 |
-
fred = firebase_admin.initialize_app(cred)
|
46 |
-
|
47 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
48 |
-
|
49 |
-
def check_email(email):
|
50 |
-
if(re.fullmatch(regex, email)):
|
51 |
-
return True
|
52 |
-
else:
|
53 |
-
return False
|
54 |
-
|
55 |
-
def get_user(email):
|
56 |
-
try:
|
57 |
-
user = auth.get_user_by_email(email)
|
58 |
-
return user
|
59 |
-
except exceptions.FirebaseError as e:
|
60 |
-
return None
|
61 |
-
|
62 |
-
def create_user(email):
|
63 |
-
user = auth.create_user(email=email)
|
64 |
-
return user
|
65 |
-
|
66 |
-
def get_user1(email):
|
67 |
-
try:
|
68 |
-
user = auth.get_user_by_email(email)
|
69 |
-
return user
|
70 |
-
except exceptions.FirebaseError as e:
|
71 |
-
return None
|
72 |
-
|
73 |
-
def create_firebase_user(request: req.RequestCreateFireBaseUserGoogle):
|
74 |
-
try:
|
75 |
-
email = request.email
|
76 |
-
token_google = request.token_google
|
77 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
78 |
-
if check_email_fc is not True:
|
79 |
-
return check_email_fc
|
80 |
-
user = get_user(email)
|
81 |
-
if token_google is None or token_google == "":
|
82 |
-
return res.ReponseError(
|
83 |
-
status=400,
|
84 |
-
data=res.Message(message="token google not empty")
|
85 |
-
)
|
86 |
-
check_google = authservice.verify_token_google(token_google)
|
87 |
-
if check_google == False:
|
88 |
-
return res.ReponseError(
|
89 |
-
status=400,
|
90 |
-
data=res.Message(message="Create user failed")
|
91 |
-
)
|
92 |
-
if user:
|
93 |
-
email1 = user.email
|
94 |
-
display_name = user.display_name
|
95 |
-
uid = user.uid
|
96 |
-
photo_url = user.photo_url
|
97 |
-
return res.ResponseCreateFireBaseUser(
|
98 |
-
status=200,
|
99 |
-
data = res.DataCreateFireBaseUser(localId=uid,
|
100 |
-
email=email1,
|
101 |
-
displayName=display_name,
|
102 |
-
photoUrl=photo_url)
|
103 |
-
)
|
104 |
-
else:
|
105 |
-
return res.ReponseError(
|
106 |
-
status=500,
|
107 |
-
data =res.Message(message="Error")
|
108 |
-
)
|
109 |
-
except:
|
110 |
-
return res.ReponseError(
|
111 |
-
status=500,
|
112 |
-
data =res.Message(message="Server Error")
|
113 |
-
)
|
114 |
-
|
115 |
-
def info_user(request: req.RequestInfoUser):
|
116 |
-
try:
|
117 |
-
user_id = request.user_id
|
118 |
-
email = sf.check_email_service(user_id)
|
119 |
-
if isinstance(email, res.ReponseError):
|
120 |
-
return email
|
121 |
-
user = get_user(email)
|
122 |
-
if user is None:
|
123 |
-
return res.ReponseError(
|
124 |
-
status=404,
|
125 |
-
data=res.Message(message="User not found")
|
126 |
-
)
|
127 |
-
uid = user.uid if user.uid else ""
|
128 |
-
email = user.email if user.email else ""
|
129 |
-
display_name = user.display_name if user.display_name else "N/A"
|
130 |
-
photo_url = user.photo_url if user.photo_url else "N/A"
|
131 |
-
return res.ResponseInfoUser(
|
132 |
-
status=200,
|
133 |
-
data=res.DataInfoUser(
|
134 |
-
uid=uid,
|
135 |
-
email=email,
|
136 |
-
display_name=display_name,
|
137 |
-
photo_url=photo_url
|
138 |
-
)
|
139 |
-
)
|
140 |
-
except Exception as e:
|
141 |
-
return res.ReponseError(
|
142 |
-
status=500,
|
143 |
-
data=res.Message(message="Server Error: " + str(e))
|
144 |
-
)
|
145 |
-
|
146 |
-
def check_email_token(token):
|
147 |
-
try:
|
148 |
-
decoded_token = auth123.decodeJWT(token)
|
149 |
-
sub_value = decoded_token.get("sub")
|
150 |
-
name_user = base64.b85decode(sub_value.encode('ascii')).decode('ascii')
|
151 |
-
return name_user
|
152 |
-
except:
|
153 |
-
return False
|
154 |
-
|
155 |
-
def is_me(request: req.RequestIsMe):
|
156 |
-
try:
|
157 |
-
token = request.token
|
158 |
-
if token is None or token == "":
|
159 |
-
return res.ReponseError(
|
160 |
-
status=400,
|
161 |
-
data =res.Message(message="token is empty")
|
162 |
-
)
|
163 |
-
test = check_email_token(token)
|
164 |
-
if test is not False:
|
165 |
-
user_id = UserRepository.getUserByEmail(test).id
|
166 |
-
return res.ResponseIsMe(
|
167 |
-
status=200,
|
168 |
-
data = res.DataIsMe(user_id = user_id))
|
169 |
-
except:
|
170 |
-
return res.ReponseError(
|
171 |
-
status=500,
|
172 |
-
data=res.Message(message="Server Error")
|
173 |
-
)
|
174 |
-
|
175 |
-
ALLOWED_EXTENSIONS = {'png', 'jpg','jpeg'}
|
176 |
-
def allowed_file(filename):
|
177 |
-
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
178 |
-
|
179 |
-
def upload_image_service(request: req.RequestUpLoadImage):
|
180 |
-
try:
|
181 |
-
user_id = request.user_id
|
182 |
-
file = request.files
|
183 |
-
email = sf.check_email_service(user_id)
|
184 |
-
if isinstance(email, res.ReponseError):
|
185 |
-
return email
|
186 |
-
if not allowed_file(file.filename):
|
187 |
-
return res.ReponseError(
|
188 |
-
status=415,
|
189 |
-
data=res.Message(message=f"File type not allow")
|
190 |
-
)
|
191 |
-
temp_file_path = f"temp_image_{email}.png"
|
192 |
-
contents = file.file.read()
|
193 |
-
with open(temp_file_path, "wb") as temp_file:
|
194 |
-
temp_file.write(contents)
|
195 |
-
upload_result = cloudinary.uploader.upload(temp_file_path, public_id=email)
|
196 |
-
os.remove(temp_file_path)
|
197 |
-
return res.ResponseUploadImage(
|
198 |
-
status=200,
|
199 |
-
data=res.DataUploadImage(url=upload_result["secure_url"])
|
200 |
-
)
|
201 |
-
except:
|
202 |
-
return res.ReponseError(
|
203 |
-
status=500,
|
204 |
-
data=res.Message(message="Server Error")
|
205 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/FileService.py
DELETED
@@ -1,151 +0,0 @@
|
|
1 |
-
from request import RequestFile as req
|
2 |
-
from response import ResponseFile as res
|
3 |
-
from response import ResponseDefault as res1
|
4 |
-
import function.dropbox as sf_dropbox
|
5 |
-
import os
|
6 |
-
import shutil
|
7 |
-
import re
|
8 |
-
from repository import UserRepository
|
9 |
-
from function import support_function as sf
|
10 |
-
ALLOWED_EXTENSIONS = {'csv', 'txt', 'doc', 'docx', 'pdf', 'xlsx', 'pptx', 'json','md'}
|
11 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
12 |
-
|
13 |
-
def check_email(email):
|
14 |
-
if(re.fullmatch(regex, email)):
|
15 |
-
return True
|
16 |
-
else:
|
17 |
-
return False
|
18 |
-
|
19 |
-
def allowed_file(filename):
|
20 |
-
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
21 |
-
|
22 |
-
def listNameFiles(request: req.RequestGetNameFile ):
|
23 |
-
try:
|
24 |
-
user_id = request.user_id
|
25 |
-
email = sf.check_email_service(user_id)
|
26 |
-
if isinstance(email,res1.ReponseError):
|
27 |
-
return email
|
28 |
-
list_files = sf_dropbox.list_files(email)
|
29 |
-
return res.ResponseGetNameFile(
|
30 |
-
status= 200,
|
31 |
-
data = res.DataGetNameFile(files=list_files)
|
32 |
-
)
|
33 |
-
except:
|
34 |
-
return res.ReponseError(
|
35 |
-
status=500,
|
36 |
-
data =res.Message(message="Server Error")
|
37 |
-
)
|
38 |
-
|
39 |
-
def deleteFile(request: req.RequestDeleteFile):
|
40 |
-
try:
|
41 |
-
user_id = request.user_id
|
42 |
-
name_file = request.name_file
|
43 |
-
email = sf.check_email_service(user_id)
|
44 |
-
if isinstance(email, res1.ReponseError):
|
45 |
-
return email
|
46 |
-
if name_file is None or name_file == "":
|
47 |
-
return res.ReponseError(
|
48 |
-
status=400,
|
49 |
-
data =res.Message(message="Name file is empty")
|
50 |
-
)
|
51 |
-
sf_dropbox.delete_file(email,name_file)
|
52 |
-
return res.ResponseDeleteFile(
|
53 |
-
status=200,
|
54 |
-
data =res.Message(message=f"delete {name_file} success")
|
55 |
-
)
|
56 |
-
except:
|
57 |
-
return res.ReponseError(
|
58 |
-
status=500,
|
59 |
-
data =res.Message(message=f"delete {name_file} error")
|
60 |
-
)
|
61 |
-
|
62 |
-
def download_folder(request:req.RequestDownLoadFolder):
|
63 |
-
try:
|
64 |
-
user_id = request.user_id
|
65 |
-
email = sf.check_email_service(user_id)
|
66 |
-
if isinstance(email, res1.ReponseError):
|
67 |
-
return email
|
68 |
-
sf_dropbox.download_folder(email)
|
69 |
-
return res.ResponseDownloadFolder(
|
70 |
-
status=200,
|
71 |
-
data =res.Message(message=f"Downloaded folder {email} success")
|
72 |
-
)
|
73 |
-
except:
|
74 |
-
return res.ReponseError(
|
75 |
-
status=500,
|
76 |
-
data =res.Message(message=f"Server error")
|
77 |
-
)
|
78 |
-
|
79 |
-
def download_file(request:req.RequestDownLoadFile):
|
80 |
-
try:
|
81 |
-
user_id = request.user_id
|
82 |
-
name_file = request.name_file
|
83 |
-
email = sf.check_email_service(user_id)
|
84 |
-
if isinstance(email, res1.ReponseError):
|
85 |
-
return email
|
86 |
-
if name_file is None or name_file == "":
|
87 |
-
return res.ReponseError(
|
88 |
-
status=400,
|
89 |
-
data =res.Message(message="name_file is empty")
|
90 |
-
)
|
91 |
-
sf_dropbox.search_and_download_file(name_file,email)
|
92 |
-
return res.ResponseDownloadFile(
|
93 |
-
status=200,
|
94 |
-
data =res.Message(message=f"Downloaded file '{name_file}' by email: '{email}' success")
|
95 |
-
)
|
96 |
-
except:
|
97 |
-
return res.ReponseError(
|
98 |
-
status=500,
|
99 |
-
data =res.Message(message=f"Server error")
|
100 |
-
)
|
101 |
-
|
102 |
-
ALLOWED_EXTENSIONS = {'csv', 'txt', 'doc', 'docx', 'pdf', 'xlsx', 'pptx', 'json','md'}
|
103 |
-
|
104 |
-
def allowed_file1(filename):
|
105 |
-
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
106 |
-
def upload_files(request: req.RequestUploadFile):
|
107 |
-
try:
|
108 |
-
user_id = request.user_id
|
109 |
-
files = request.files
|
110 |
-
email = sf.check_email_service(user_id)
|
111 |
-
if isinstance(email, res1.ReponseError):
|
112 |
-
return email
|
113 |
-
for file in files:
|
114 |
-
if not allowed_file(file.filename):
|
115 |
-
return res.ReponseError(
|
116 |
-
status=415,
|
117 |
-
data =res.Message(message=f"File type not allow")
|
118 |
-
)
|
119 |
-
temp_dir = f"/code/temp/{email}"
|
120 |
-
os.makedirs(temp_dir, exist_ok=True)
|
121 |
-
file_path = os.path.join(temp_dir, file.filename)
|
122 |
-
with open(file_path, "wb") as buffer:
|
123 |
-
shutil.copyfileobj(file.file, buffer)
|
124 |
-
cloud_path = f"/{email}/{file.filename}"
|
125 |
-
sf_dropbox.upload_file(file_path, cloud_path)
|
126 |
-
return res.ResponseUploadedFile(
|
127 |
-
status=200,
|
128 |
-
data =res.Message(message=f"Load file success")
|
129 |
-
)
|
130 |
-
except:
|
131 |
-
return res.ReponseError(
|
132 |
-
status=500,
|
133 |
-
data =res.Message(message=f"Load file error")
|
134 |
-
)
|
135 |
-
|
136 |
-
def deleteAllFile(request: req.RequestDeleteAllFile):
|
137 |
-
try:
|
138 |
-
user_id = request.user_id
|
139 |
-
email = sf.check_email_service(user_id)
|
140 |
-
if isinstance(email, res.ReponseError):
|
141 |
-
return email
|
142 |
-
sf_dropbox.delete_all_files_in_folder(email)
|
143 |
-
return res.ResponseDeleteAllFile(
|
144 |
-
status=200,
|
145 |
-
data=res.Message(message=f"Delete all file success")
|
146 |
-
)
|
147 |
-
except:
|
148 |
-
return res.ReponseError(
|
149 |
-
status=500,
|
150 |
-
data=res.Message(message=f"Delete all file error")
|
151 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/MySQLService.py
DELETED
@@ -1,201 +0,0 @@
|
|
1 |
-
import json
|
2 |
-
|
3 |
-
from request import RequestMySQL as req
|
4 |
-
from response import ResponseMySQL as res
|
5 |
-
from response import ResponseDefault as res1
|
6 |
-
from repository import ChatHistoryRepository
|
7 |
-
from repository import DetailChatRepository,UserRepository
|
8 |
-
from fastapi.responses import JSONResponse
|
9 |
-
from function import support_function as sf
|
10 |
-
import re
|
11 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
12 |
-
|
13 |
-
def check_email(email):
|
14 |
-
if(re.fullmatch(regex, email)):
|
15 |
-
return True
|
16 |
-
else:
|
17 |
-
return False
|
18 |
-
|
19 |
-
def edit_chat(request: req.RequestEditNameChat):
|
20 |
-
try:
|
21 |
-
user_id = request.user_id
|
22 |
-
name_old = request.name_old
|
23 |
-
name_new = request.name_new
|
24 |
-
email = sf.check_email_service(user_id)
|
25 |
-
if isinstance(email, res1.ReponseError):
|
26 |
-
return email
|
27 |
-
if name_old is None or name_old =="":
|
28 |
-
return res.ReponseError(
|
29 |
-
status=400,
|
30 |
-
data =res.Message(message="name_old is empty")
|
31 |
-
)
|
32 |
-
if name_new is None or name_new == "":
|
33 |
-
return res.ReponseError(
|
34 |
-
status=400,
|
35 |
-
data =res.Message(message="name_new is empty")
|
36 |
-
)
|
37 |
-
chat_exist = ChatHistoryRepository.getIdChatHistoryByUserIdAndNameChatNew(user_id, name_new)
|
38 |
-
if chat_exist:
|
39 |
-
return res.ReponseError(
|
40 |
-
status=400,
|
41 |
-
data=res.Message(message="name_new duplicate")
|
42 |
-
)
|
43 |
-
id_chat = ChatHistoryRepository.getIdChatHistoryByUserIdAndNameChat(user_id, name_old)
|
44 |
-
if id_chat:
|
45 |
-
ChatHistoryRepository.updateNameChatHistory(user_id,name_old,name_new)
|
46 |
-
check = True
|
47 |
-
else:
|
48 |
-
check = False
|
49 |
-
if check is True:
|
50 |
-
return res.ResponseEditChat(
|
51 |
-
status= 200,
|
52 |
-
data= res.Message(message=check)
|
53 |
-
)
|
54 |
-
else:
|
55 |
-
return res.ReponseError(
|
56 |
-
status=500,
|
57 |
-
data =res.Message(message="Update chat error")
|
58 |
-
)
|
59 |
-
except:
|
60 |
-
return res.ReponseError(
|
61 |
-
status=500,
|
62 |
-
data =res.Message(message="Server Error")
|
63 |
-
)
|
64 |
-
|
65 |
-
def delete_chat(request: req.RequestDeleteChat):
|
66 |
-
try:
|
67 |
-
user_id = request.user_id
|
68 |
-
chat_name = request.chat_name
|
69 |
-
email = sf.check_email_service(user_id)
|
70 |
-
if isinstance(email, res1.ReponseError):
|
71 |
-
return email
|
72 |
-
if chat_name is None or chat_name =="":
|
73 |
-
return res.ReponseError(
|
74 |
-
status=400,
|
75 |
-
data =res.Message(message="chat_name is empty")
|
76 |
-
)
|
77 |
-
DetailChatRepository.delete_chat_detail(chat_name)
|
78 |
-
chat_exist = ChatHistoryRepository.getIdChatHistoryByUserIdAndNameChat(user_id, chat_name)
|
79 |
-
if chat_exist is None:
|
80 |
-
return res.ReponseError(
|
81 |
-
status=404,
|
82 |
-
data=res.Message(message="chat_name not exist")
|
83 |
-
)
|
84 |
-
check = ChatHistoryRepository.deleteChatHistory(user_id,chat_name)
|
85 |
-
if check is True:
|
86 |
-
return res.ResponseDeleteChat(
|
87 |
-
status= 200,
|
88 |
-
data= res.Message(message="Delete conversation chat success")
|
89 |
-
)
|
90 |
-
else:
|
91 |
-
return res.ReponseError(
|
92 |
-
status=500,
|
93 |
-
data =res.Message(message="Delete conversation chat error")
|
94 |
-
)
|
95 |
-
except Exception as e:
|
96 |
-
return res.ResponseDeleteChat(
|
97 |
-
status=500,
|
98 |
-
data=res.Message(message=str(e))
|
99 |
-
)
|
100 |
-
|
101 |
-
def delete_chat_detail_by_id(request: req.RequestDeleteDetailChat):
|
102 |
-
try:
|
103 |
-
user_id = request.user_id
|
104 |
-
chat_detail_id = request.id_chat_detail
|
105 |
-
email = sf.check_email_service(user_id)
|
106 |
-
if isinstance(email, res1.ReponseError):
|
107 |
-
return email
|
108 |
-
if chat_detail_id is None or chat_detail_id == " ":
|
109 |
-
return res.ReponseError(
|
110 |
-
status=400,
|
111 |
-
data=res.Message(message="id chat_detail is empty")
|
112 |
-
)
|
113 |
-
check = DetailChatRepository.delete_chat_detail_by_id((chat_detail_id))
|
114 |
-
if check is True:
|
115 |
-
return res.ResponseDeleteChatDetailById(
|
116 |
-
status= 200,
|
117 |
-
data= res.CheckModel(check=check)
|
118 |
-
)
|
119 |
-
else:
|
120 |
-
return res.ResponseDeleteChatDetailById(
|
121 |
-
status=200,
|
122 |
-
data=res.CheckModel(check=check)
|
123 |
-
)
|
124 |
-
except Exception as e:
|
125 |
-
return res.ResponseDeleteChat(
|
126 |
-
status=500,
|
127 |
-
data=res.Message(message=str(e))
|
128 |
-
)
|
129 |
-
|
130 |
-
def render_chat_history(request: req.RequestRenderChatHistory):
|
131 |
-
try:
|
132 |
-
user_id = request.user_id
|
133 |
-
email = sf.check_email_service(user_id)
|
134 |
-
if isinstance(email, res1.ReponseError):
|
135 |
-
return email
|
136 |
-
chat_detail = ChatHistoryRepository.getChatHistoryById(user_id)
|
137 |
-
for item in chat_detail:
|
138 |
-
print(item)
|
139 |
-
chat1 = [res.ListUserChat(id=item.id, email=item.email, chat_name=item.name_chat) for item in chat_detail]
|
140 |
-
return res.ResponseRenderChatHistory(
|
141 |
-
status=200,
|
142 |
-
data=res.UserInfoListResponse(chat=chat1)
|
143 |
-
)
|
144 |
-
except Exception as e:
|
145 |
-
return res.ReponseError(
|
146 |
-
status=500,
|
147 |
-
data=res.Message(message="Server Error")
|
148 |
-
)
|
149 |
-
|
150 |
-
def get_detail_chat_by_chat_id(request: req.RequestGetChatDetails):
|
151 |
-
id = request.id
|
152 |
-
if id is None or id == "":
|
153 |
-
return res.ReponseError(
|
154 |
-
status=400,
|
155 |
-
data=res.Message(message="Id is empty")
|
156 |
-
)
|
157 |
-
chat_detail1 = DetailChatRepository.getDetailChatByChatId(id)
|
158 |
-
if chat_detail1:
|
159 |
-
return res.ResponseChatDetailById(
|
160 |
-
status=200,
|
161 |
-
data=res.ChatDetailById(
|
162 |
-
id = chat_detail1.id,
|
163 |
-
data_relevant = chat_detail1.data_relevant,
|
164 |
-
source_file = chat_detail1.source_file
|
165 |
-
)
|
166 |
-
)
|
167 |
-
else:
|
168 |
-
return res.ReponseError(
|
169 |
-
status=404,
|
170 |
-
data=res.Message(message="Chat not exist")
|
171 |
-
)
|
172 |
-
|
173 |
-
def load_chat_history(request: req.RequestLoadChatHistory):
|
174 |
-
try:
|
175 |
-
chat_id = request.chat_id
|
176 |
-
user_id = request.user_id
|
177 |
-
email = sf.check_email_service(str(user_id))
|
178 |
-
if isinstance(email, res1.ReponseError):
|
179 |
-
return email
|
180 |
-
if chat_id is None or chat_id == "":
|
181 |
-
return res.ReponseError(
|
182 |
-
status = 400,
|
183 |
-
data = res.Message(message="chat_id is empty")
|
184 |
-
)
|
185 |
-
check_exist_chatid_width_user_id = ChatHistoryRepository.getChatHistoryByChatIdAndUserId(chat_id,user_id)
|
186 |
-
if check_exist_chatid_width_user_id is None:
|
187 |
-
return res.ReponseError(
|
188 |
-
status=404,
|
189 |
-
data=res.Message(message="Not found chat width chat_id and user_id")
|
190 |
-
)
|
191 |
-
result = DetailChatRepository.getListDetailChatByChatId(chat_id)
|
192 |
-
chat1 = [res.ChatDetail(id=item.id, chat_id = item.chat_id, question=item.YouMessage,answer=item.AiMessage,data_relevant = item.data_relevant,source_file=item.source_file) for item in result]
|
193 |
-
return res.ResponseLoadChatHistory(
|
194 |
-
status = 200,
|
195 |
-
data = res.ListChatDeTail(detail_chat=chat1)
|
196 |
-
)
|
197 |
-
except:
|
198 |
-
return res.ReponseError(
|
199 |
-
status=500,
|
200 |
-
data=res.Message(message="Server Error")
|
201 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/OTPService.py
DELETED
@@ -1,168 +0,0 @@
|
|
1 |
-
from datetime import timedelta,datetime
|
2 |
-
from request import RequestOTP as req
|
3 |
-
from response import ResponseOTP as res
|
4 |
-
import re
|
5 |
-
from firebase_admin import auth, exceptions
|
6 |
-
from repository import OTPRepository
|
7 |
-
from datetime import datetime, timedelta
|
8 |
-
import datetime, string,random
|
9 |
-
from function import support_function as sf
|
10 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
11 |
-
|
12 |
-
def get_user1(email):
|
13 |
-
try:
|
14 |
-
user = auth.get_user_by_email(email)
|
15 |
-
return user
|
16 |
-
except exceptions.FirebaseError as e:
|
17 |
-
return None
|
18 |
-
|
19 |
-
def check_email(email):
|
20 |
-
if isinstance(email, str) and re.fullmatch(regex, email):
|
21 |
-
return True
|
22 |
-
else:
|
23 |
-
return False
|
24 |
-
|
25 |
-
def generate_otp(length=6):
|
26 |
-
characters = string.ascii_uppercase + string.digits
|
27 |
-
otp = ''.join(random.choice(characters) for _ in range(length))
|
28 |
-
return otp
|
29 |
-
|
30 |
-
def createOTP(request: req.RequestCreateOTP):
|
31 |
-
try:
|
32 |
-
email = request.email
|
33 |
-
otp = generate_otp()
|
34 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
35 |
-
if check_email_fc is not True:
|
36 |
-
return check_email_fc
|
37 |
-
OTPRepository.addOTP(email,otp)
|
38 |
-
return res.ResponseCreateOTP(
|
39 |
-
status=200,
|
40 |
-
data = res.CheckModel(check=True),
|
41 |
-
otp = otp
|
42 |
-
)
|
43 |
-
except:
|
44 |
-
return res.ReponseError(
|
45 |
-
status=500,
|
46 |
-
data=res.Message(message="Server Error")
|
47 |
-
)
|
48 |
-
|
49 |
-
def verifyOTP(request: req.RequestVerifyOTP):
|
50 |
-
try:
|
51 |
-
email = request.email
|
52 |
-
otp = request.otp
|
53 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
54 |
-
if check_email_fc is not True:
|
55 |
-
return check_email_fc
|
56 |
-
if otp is None:
|
57 |
-
return res.ReponseError(
|
58 |
-
status=400,
|
59 |
-
data=res.Message(message="otp is empty")
|
60 |
-
)
|
61 |
-
user_otp = OTPRepository.getOtpByEmail(email)
|
62 |
-
if user_otp:
|
63 |
-
otp_db = user_otp.otp
|
64 |
-
otp_created_at = user_otp.created_at
|
65 |
-
if otp == otp_db:
|
66 |
-
current_time = datetime.datetime.now()
|
67 |
-
otp_expiry_time = otp_created_at + timedelta(minutes=15)
|
68 |
-
if current_time <= otp_expiry_time:
|
69 |
-
OTPRepository.deleteOTP(email, otp)
|
70 |
-
return res.ResponseVerifyOTPSignUp(
|
71 |
-
status=200,
|
72 |
-
data=res.Message(message="OTP is valid")
|
73 |
-
)
|
74 |
-
else:
|
75 |
-
return res.ReponseError(
|
76 |
-
status=400,
|
77 |
-
data=res.Message(message="OTP has expired")
|
78 |
-
)
|
79 |
-
else:
|
80 |
-
return res.ReponseError(
|
81 |
-
status=400,
|
82 |
-
data=res.Message(message="Invalid OTP")
|
83 |
-
)
|
84 |
-
else:
|
85 |
-
return res.ReponseError(
|
86 |
-
status=404,
|
87 |
-
data=res.Message(message="No OTP found for this email")
|
88 |
-
)
|
89 |
-
except:
|
90 |
-
return res.ReponseError(
|
91 |
-
status=500,
|
92 |
-
data=res.Message(message="Server Error")
|
93 |
-
)
|
94 |
-
|
95 |
-
def createOTPReset(email):
|
96 |
-
try:
|
97 |
-
otp = generate_otp()
|
98 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
99 |
-
if check_email_fc is not True:
|
100 |
-
return check_email_fc
|
101 |
-
OTPRepository.addOTP(email,otp)
|
102 |
-
return res.ResponseCreateOTP(
|
103 |
-
status=200,
|
104 |
-
data = res.CheckModel(check=True),
|
105 |
-
otp = otp
|
106 |
-
)
|
107 |
-
except:
|
108 |
-
return res.ReponseError(
|
109 |
-
status=500,
|
110 |
-
data=res.Message(message="Server Error")
|
111 |
-
)
|
112 |
-
|
113 |
-
def generate_random_password(length=8):
|
114 |
-
characters = string.ascii_letters + string.digits
|
115 |
-
password = ''.join(random.choice(characters) for i in range(length))
|
116 |
-
return password
|
117 |
-
|
118 |
-
def verifyOTPReset(request: req.RequestVerifyOTP):
|
119 |
-
try:
|
120 |
-
email = request.email
|
121 |
-
otp = request.otp
|
122 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
123 |
-
if check_email_fc is not True:
|
124 |
-
return check_email_fc
|
125 |
-
if otp is None:
|
126 |
-
return res.ReponseError(
|
127 |
-
status=400,
|
128 |
-
data=res.Message(message="OTP is empty")
|
129 |
-
)
|
130 |
-
user_otp = OTPRepository.getOtpByEmail(email)
|
131 |
-
if user_otp:
|
132 |
-
otp_db = user_otp.otp
|
133 |
-
otp_created_at = user_otp.created_at
|
134 |
-
if otp == otp_db:
|
135 |
-
current_time = datetime.datetime.now() # Lấy thời gian hiện tại với múi giờ hệ thống (múi giờ +7)
|
136 |
-
otp_expiry_time = otp_created_at + timedelta(minutes=15)
|
137 |
-
new_password = generate_random_password()
|
138 |
-
if current_time <= otp_expiry_time:
|
139 |
-
OTPRepository.deleteOTP(email, otp)
|
140 |
-
user_email = auth.get_user_by_email(email)
|
141 |
-
auth.update_user(
|
142 |
-
user_email.uid,
|
143 |
-
password=new_password)
|
144 |
-
return res.ResponseVerifyOTP(
|
145 |
-
status=200,
|
146 |
-
data=res.Message(message="New Password send to Email"),
|
147 |
-
newpassword=new_password
|
148 |
-
)
|
149 |
-
else:
|
150 |
-
return res.ReponseError(
|
151 |
-
status=400,
|
152 |
-
data=res.Message(message="OTP has expired")
|
153 |
-
)
|
154 |
-
else:
|
155 |
-
return res.ReponseError(
|
156 |
-
status=400,
|
157 |
-
data=res.Message(message="Invalid OTP")
|
158 |
-
)
|
159 |
-
else:
|
160 |
-
return res.ReponseError(
|
161 |
-
status=404,
|
162 |
-
data=res.Message(message="No OTP found for this email")
|
163 |
-
)
|
164 |
-
except:
|
165 |
-
return res.ReponseError(
|
166 |
-
status=500,
|
167 |
-
data=res.Message(message="Server Error")
|
168 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/UserService.py
DELETED
@@ -1,322 +0,0 @@
|
|
1 |
-
from datetime import timedelta, datetime
|
2 |
-
from request import RequestUser as req_login
|
3 |
-
from response import ResponseUser as res_login
|
4 |
-
import requests
|
5 |
-
import json, re
|
6 |
-
from auth.authentication import signJWT
|
7 |
-
from firebase_admin import credentials, auth, exceptions
|
8 |
-
import firebase_admin
|
9 |
-
from repository import UserLoginRepository, UserRepository, UserInfoRepository, OTPRepository
|
10 |
-
import service.OTPService
|
11 |
-
from function import support_function as sf
|
12 |
-
from dotenv import load_dotenv
|
13 |
-
import os
|
14 |
-
from response import ResponseUser as res
|
15 |
-
from response import ResponseDefault as res1
|
16 |
-
load_dotenv()
|
17 |
-
CLIENT_ID_GOOGLE = os.getenv('CLIENT_ID')
|
18 |
-
API_SIGN_UP_FIREBASE_PATH = os.getenv('API_SIGN_UP_FIREBASE')
|
19 |
-
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
|
20 |
-
|
21 |
-
def get_user1(email):
|
22 |
-
try:
|
23 |
-
user = auth.get_user_by_email(email)
|
24 |
-
return user
|
25 |
-
except exceptions.FirebaseError as e:
|
26 |
-
return None
|
27 |
-
|
28 |
-
def check_email(email):
|
29 |
-
if isinstance(email, str) and re.fullmatch(regex, email):
|
30 |
-
return True
|
31 |
-
else:
|
32 |
-
return False
|
33 |
-
from pathlib import Path
|
34 |
-
try:
|
35 |
-
if not firebase_admin._apps:
|
36 |
-
json_path = Path(__file__).resolve().parent / 'app' / 'firebase_certificate.json'
|
37 |
-
cred = credentials.Certificate(str(json_path))
|
38 |
-
fred = firebase_admin.initialize_app(cred)
|
39 |
-
except:
|
40 |
-
if not firebase_admin._apps:
|
41 |
-
cred = credentials.Certificate("firebase_certificate.json")
|
42 |
-
fred = firebase_admin.initialize_app(cred)
|
43 |
-
|
44 |
-
def sign_up_with_email_and_password(email, password, username=None, return_secure_token=True):
|
45 |
-
try:
|
46 |
-
rest_api_url = "https://identitytoolkit.googleapis.com/v1/accounts:signUp"
|
47 |
-
payload = {
|
48 |
-
"email": email,
|
49 |
-
"password": password,
|
50 |
-
"returnSecureToken": return_secure_token
|
51 |
-
}
|
52 |
-
if username:
|
53 |
-
payload["displayName"] = username
|
54 |
-
payload = json.dumps(payload)
|
55 |
-
r = requests.post(rest_api_url, params={"key": API_SIGN_UP_FIREBASE_PATH}, data=payload)
|
56 |
-
try:
|
57 |
-
return r.json()['email']
|
58 |
-
except Exception as e:
|
59 |
-
pass
|
60 |
-
except Exception as e:
|
61 |
-
pass
|
62 |
-
|
63 |
-
def sign_in_with_email_and_password(email=None, password=None, return_secure_token=True):
|
64 |
-
rest_api_url = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword"
|
65 |
-
try:
|
66 |
-
payload = {
|
67 |
-
"returnSecureToken": return_secure_token
|
68 |
-
}
|
69 |
-
if email:
|
70 |
-
payload["email"] = email
|
71 |
-
if password:
|
72 |
-
payload["password"] = password
|
73 |
-
payload = json.dumps(payload)
|
74 |
-
r = requests.post(rest_api_url, params={"key": API_SIGN_UP_FIREBASE_PATH}, data=payload)
|
75 |
-
r.raise_for_status()
|
76 |
-
data = r.json()
|
77 |
-
if 'idToken' in data:
|
78 |
-
return data['email']
|
79 |
-
else:
|
80 |
-
return False
|
81 |
-
except requests.exceptions.RequestException as e:
|
82 |
-
print(f"Error signing in: {e}")
|
83 |
-
return False
|
84 |
-
|
85 |
-
def update_info_user(uid, email=None, user_name=None, photo_url=None):
|
86 |
-
user_data = {}
|
87 |
-
if email is not None:
|
88 |
-
user_data['email'] = email
|
89 |
-
if user_name is not None:
|
90 |
-
user_data['display_name'] = user_name
|
91 |
-
if photo_url is not None and photo_url != 'N/A':
|
92 |
-
user_data['photo_url'] = photo_url
|
93 |
-
if user_data:
|
94 |
-
auth.update_user(uid, **user_data)
|
95 |
-
|
96 |
-
def update_user_info(request: req_login.RequestUpdateUserInfo):
|
97 |
-
try:
|
98 |
-
email = request.email
|
99 |
-
user_id = request.user_id
|
100 |
-
email_check = sf.check_email_service(user_id)
|
101 |
-
if isinstance(email_check, res1.ReponseError):
|
102 |
-
return email_check
|
103 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
104 |
-
if check_email_fc is not True:
|
105 |
-
return check_email_fc
|
106 |
-
user = get_user1(email)
|
107 |
-
if user:
|
108 |
-
user_info = UserInfoRepository.getUserInfo(user_id)
|
109 |
-
if user_info:
|
110 |
-
UserInfoRepository.updateUserInfo(
|
111 |
-
request.user_id,
|
112 |
-
request.uid,
|
113 |
-
request.email,
|
114 |
-
request.display_name,
|
115 |
-
request.photo_url)
|
116 |
-
else:
|
117 |
-
UserInfoRepository.addUserInfo(
|
118 |
-
request.uid,
|
119 |
-
request.email,
|
120 |
-
request.display_name,
|
121 |
-
request.photo_url
|
122 |
-
)
|
123 |
-
update_info_user(request.uid,
|
124 |
-
request.email,
|
125 |
-
request.display_name,
|
126 |
-
request.photo_url
|
127 |
-
)
|
128 |
-
return res_login.ResponseUpdateUserInfo(status=200,
|
129 |
-
data = res_login.Message(message=f"User info updated successfully"))
|
130 |
-
else:
|
131 |
-
return res_login.ReponseError(
|
132 |
-
status = 404,
|
133 |
-
data = res_login.Message(message="Not found user")
|
134 |
-
)
|
135 |
-
except:
|
136 |
-
return res_login.ReponseError(
|
137 |
-
status=500,
|
138 |
-
data=res_login.Message(message="Server Error")
|
139 |
-
)
|
140 |
-
|
141 |
-
def check_info_google(request: req_login.RequestCheckInfoGoogle):
|
142 |
-
try:
|
143 |
-
user_id = request.user_id
|
144 |
-
check = UserRepository.getEmailUserByIdFix(user_id)
|
145 |
-
if check is None:
|
146 |
-
return res_login.ReponseError(
|
147 |
-
status = 404,
|
148 |
-
data = res_login.Message(message="user_id not exist")
|
149 |
-
)
|
150 |
-
email = sf.check_email_service(str(user_id))
|
151 |
-
if isinstance(email, res.ReponseError):
|
152 |
-
return email
|
153 |
-
user_info = UserInfoRepository.getUserInfo(user_id)
|
154 |
-
if user_info is not None:
|
155 |
-
email_check = True
|
156 |
-
else:
|
157 |
-
email_check = False
|
158 |
-
if email_check is not None:
|
159 |
-
return res_login.ResponseCheckInfoGoogle(status= 200,data = res_login.CheckModel(check=email_check))
|
160 |
-
except:
|
161 |
-
return res_login.ReponseError(
|
162 |
-
status=500,
|
163 |
-
data=res_login.Message(message="Server Error")
|
164 |
-
)
|
165 |
-
|
166 |
-
def check_info_google_email(request: req_login.RequestCheckInfoGoogleEmail):
|
167 |
-
try:
|
168 |
-
email = request.email
|
169 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
170 |
-
if check_email_fc is not True:
|
171 |
-
return check_email_fc
|
172 |
-
user_info = UserInfoRepository.getUserInfoByEmail(email)
|
173 |
-
if user_info is not None:
|
174 |
-
email_check = True
|
175 |
-
else:
|
176 |
-
email_check = False
|
177 |
-
if email_check is not None:
|
178 |
-
return res_login.ResponseCheckInfoGoogle(status= 200,data = res_login.CheckModel(check=email_check))
|
179 |
-
except:
|
180 |
-
return res_login.ReponseError(
|
181 |
-
status=500,
|
182 |
-
data=res_login.Message(message="Server Error")
|
183 |
-
)
|
184 |
-
|
185 |
-
def check_state_login(request: req_login.RequestCheckStateLogin):
|
186 |
-
try:
|
187 |
-
user_id = request.user_id
|
188 |
-
session_id_now = request.session_id_now
|
189 |
-
email = sf.check_email_service(user_id)
|
190 |
-
if isinstance(email, res1.ReponseError):
|
191 |
-
return email
|
192 |
-
elif session_id_now is None or session_id_now=="":
|
193 |
-
return res_login.ReponseError(
|
194 |
-
status= 400,
|
195 |
-
data =res_login.Message(message="session_id is empty")
|
196 |
-
)
|
197 |
-
user = get_user1(email)
|
198 |
-
if user:
|
199 |
-
check1 = False
|
200 |
-
session_id = UserLoginRepository.getUserSessionIdByUserEmail(user_id)
|
201 |
-
print(f"session_id: {session_id}")
|
202 |
-
if session_id != session_id_now:
|
203 |
-
check1 = False
|
204 |
-
else:
|
205 |
-
check1 = True
|
206 |
-
return res_login.ResponseCheckInfoGoogle(status= 200,data = res_login.CheckModel(check = check1))
|
207 |
-
else:
|
208 |
-
return res_login.ReponseError(
|
209 |
-
status=404,
|
210 |
-
data =res_login.Message(message="Not found user")
|
211 |
-
)
|
212 |
-
except:
|
213 |
-
return res_login.ReponseError(
|
214 |
-
status=500,
|
215 |
-
data=res_login.Message(message="Server Error")
|
216 |
-
)
|
217 |
-
|
218 |
-
import string, random
|
219 |
-
def generate_otp(length=6):
|
220 |
-
characters = string.ascii_uppercase + string.digits
|
221 |
-
otp = ''.join(random.choice(characters) for _ in range(length))
|
222 |
-
return otp
|
223 |
-
|
224 |
-
def createOTPReset(email):
|
225 |
-
otp = generate_otp()
|
226 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
227 |
-
if check_email_fc is not True:
|
228 |
-
return check_email_fc
|
229 |
-
OTPRepository.addOTP(email,otp)
|
230 |
-
return otp
|
231 |
-
|
232 |
-
def reset_password(request: req_login.RequestResetPassword):
|
233 |
-
try:
|
234 |
-
email = request.email
|
235 |
-
check_email_fc = sf.check_email_empty_invalid(email)
|
236 |
-
if check_email_fc is not True:
|
237 |
-
return check_email_fc
|
238 |
-
try:
|
239 |
-
user = get_user1(email)
|
240 |
-
if user is not None:
|
241 |
-
otp = createOTPReset(email)
|
242 |
-
return res_login.ResponseCreateOTP(
|
243 |
-
status= 200,
|
244 |
-
data= res_login.CheckModel(check = True),
|
245 |
-
otp = otp
|
246 |
-
)
|
247 |
-
else:
|
248 |
-
return res_login.ReponseError(
|
249 |
-
status= 404,
|
250 |
-
data =res_login.Message(message="Email not exist")
|
251 |
-
)
|
252 |
-
except auth.UserNotFoundError as e:
|
253 |
-
return res_login.ReponseError(
|
254 |
-
status=500,
|
255 |
-
data =res_login.Message(message=str(e))
|
256 |
-
)
|
257 |
-
except:
|
258 |
-
return res_login.ReponseError(
|
259 |
-
status=500,
|
260 |
-
data=res_login.Message(message="Server Error")
|
261 |
-
)
|
262 |
-
|
263 |
-
def change_password(request: req_login.RequestChangePassword):
|
264 |
-
try:
|
265 |
-
user_id = request.user_id
|
266 |
-
email = sf.check_email_service(user_id)
|
267 |
-
new_password = request.new_password
|
268 |
-
current_password= request.current_password
|
269 |
-
confirm_new_password = request.confirm_new_password
|
270 |
-
if isinstance(email, res1.ReponseError):
|
271 |
-
return email
|
272 |
-
if new_password is None:
|
273 |
-
return res_login.ReponseError(
|
274 |
-
status=400,
|
275 |
-
data =res_login.Message(message="new_password is empty")
|
276 |
-
)
|
277 |
-
if current_password is None or confirm_new_password == "":
|
278 |
-
return res_login.ReponseError(
|
279 |
-
status=400,
|
280 |
-
data =res_login.Message(message="current_password is empty")
|
281 |
-
)
|
282 |
-
if confirm_new_password is None or confirm_new_password == "":
|
283 |
-
return res_login.ReponseError(
|
284 |
-
status=400,
|
285 |
-
data =res_login.Message(message="confirm_new_password is empty")
|
286 |
-
)
|
287 |
-
if current_password == new_password:
|
288 |
-
return res_login.ReponseError(
|
289 |
-
status=400,
|
290 |
-
data=res_login.Message(message="The new_password and the current_password must be different")
|
291 |
-
)
|
292 |
-
if confirm_new_password != new_password:
|
293 |
-
return res_login.ReponseError(
|
294 |
-
status=400,
|
295 |
-
data=res_login.Message(message="The new_password and the confirm_new_password must be similar")
|
296 |
-
)
|
297 |
-
user = sign_in_with_email_and_password(email, current_password)
|
298 |
-
try:
|
299 |
-
if user:
|
300 |
-
user_email = auth.get_user_by_email(email)
|
301 |
-
auth.update_user(
|
302 |
-
user_email.uid,
|
303 |
-
password=new_password
|
304 |
-
)
|
305 |
-
return res_login.ResponseChangePassword(
|
306 |
-
status= 200,
|
307 |
-
data = res_login.Message(message=f"Update password success"))
|
308 |
-
else:
|
309 |
-
return res_login.ReponseError(
|
310 |
-
status=400,
|
311 |
-
data =res_login.Message(message="Current password not valid")
|
312 |
-
)
|
313 |
-
except :
|
314 |
-
return res_login.ReponseError(
|
315 |
-
status=500,
|
316 |
-
data =res_login.Message(message="Server Error")
|
317 |
-
)
|
318 |
-
except:
|
319 |
-
return res_login.ReponseError(
|
320 |
-
status=500,
|
321 |
-
data=res_login.Message(message="Server Error!!")
|
322 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
service/app/firebase_certificate.json
DELETED
File without changes
|