kltn20133118 commited on
Commit
a6daf9d
·
verified ·
1 Parent(s): 5958d22

Delete service

Browse files
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