Mark-Lasfar commited on
Commit
2d34eda
·
1 Parent(s): 1a6532e

update auth.py

Browse files
Files changed (1) hide show
  1. api/auth.py +64 -64
api/auth.py CHANGED
@@ -19,7 +19,7 @@ import secrets
19
 
20
  from api.database import User, OAuthAccount, CustomSQLAlchemyUserDatabase, get_user_db # استيراد من database.py
21
  from api.models import UserRead, UserCreate, UserUpdate
22
- from fastapi.responses import RedirectResponse
23
  # إعداد اللوقينج
24
  logger = logging.getLogger(__name__)
25
 
@@ -76,69 +76,69 @@ class UserManager(IntegerIDMixin, BaseUserManager[User, int]):
76
  await self.user_db.session.commit()
77
  await self.user_db.session.refresh(oauth_account)
78
 
79
- async def oauth_callback(
80
- self,
81
- oauth_name: str,
82
- access_token: str,
83
- account_id: str,
84
- account_email: str,
85
- expires_at: Optional[int] = None,
86
- refresh_token: Optional[str] = None,
87
- request: Optional[Request] = None,
88
- *,
89
- associate_by_email: bool = False,
90
- is_verified_by_default: bool = False,
91
- ) -> UP:
92
- logger.info(f"OAuth callback for {oauth_name} account {account_id}")
93
-
94
- oauth_account = OAuthAccount(
95
- oauth_name=oauth_name,
96
- access_token=access_token,
97
- account_id=account_id,
98
- account_email=account_email,
99
- expires_at=expires_at,
100
- refresh_token=refresh_token,
101
- )
102
-
103
- existing_oauth_account = await self.get_by_oauth_account(oauth_name, account_id)
104
- if existing_oauth_account:
105
- logger.info(f"Fetching user for OAuth account with user_id: {existing_oauth_account.user_id}")
106
- statement = select(User).where(User.id == existing_oauth_account.user_id)
107
- result = await self.user_db.session.execute(statement)
108
- user = result.scalar_one_or_none()
109
-
110
- if user:
111
- logger.info(f"User found: {user.email}, proceeding with on_after_login")
112
- await self.on_after_login(user, request)
113
- return RedirectResponse(url="/chat", status_code=302)
114
- else:
115
- logger.error(f"No user found for OAuth account with user_id: {existing_oauth_account.user_id}")
116
- raise ValueError("User not found for existing OAuth account")
117
-
118
- if associate_by_email:
119
- logger.info(f"Associating OAuth account by email: {account_email}")
120
- user = await self.user_db.get_by_email(account_email)
121
- if user:
122
- oauth_account.user_id = user.id
123
- await self.add_oauth_account(oauth_account)
124
- logger.info(f"User associated: {user.email}, proceeding with on_after_login")
125
- await self.on_after_login(user, request)
126
- return RedirectResponse(url="/chat", status_code=302)
127
-
128
- logger.info(f"Creating new user for email: {account_email}")
129
- user_dict = {
130
- "email": account_email,
131
- "hashed_password": self.password_helper.hash(secrets.token_hex(32)),
132
- "is_active": True,
133
- "is_verified": is_verified_by_default,
134
- }
135
-
136
- user = await self.user_db.create(user_dict)
137
- oauth_account.user_id = user.id
138
- await self.add_oauth_account(oauth_account)
139
- logger.info(f"New user created: {user.email}, proceeding with on_after_login")
140
- await self.on_after_login(user, request)
141
- return RedirectResponse(url="/chat", status_code=302)
142
 
143
  # استدعاء user manager من get_user_db
144
  async def get_user_manager(user_db: CustomSQLAlchemyUserDatabase = Depends(get_user_db)):
 
19
 
20
  from api.database import User, OAuthAccount, CustomSQLAlchemyUserDatabase, get_user_db # استيراد من database.py
21
  from api.models import UserRead, UserCreate, UserUpdate
22
+
23
  # إعداد اللوقينج
24
  logger = logging.getLogger(__name__)
25
 
 
76
  await self.user_db.session.commit()
77
  await self.user_db.session.refresh(oauth_account)
78
 
79
+ async def oauth_callback(
80
+ self,
81
+ oauth_name: str,
82
+ access_token: str,
83
+ account_id: str,
84
+ account_email: str,
85
+ expires_at: Optional[int] = None,
86
+ refresh_token: Optional[str] = None,
87
+ request: Optional[Request] = None,
88
+ *,
89
+ associate_by_email: bool = False,
90
+ is_verified_by_default: bool = False,
91
+ ) -> UP:
92
+ logger.info(f"OAuth callback for {oauth_name} account {account_id}")
93
+
94
+ oauth_account = OAuthAccount(
95
+ oauth_name=oauth_name,
96
+ access_token=access_token,
97
+ account_id=account_id,
98
+ account_email=account_email,
99
+ expires_at=expires_at,
100
+ refresh_token=refresh_token,
101
+ )
102
+
103
+ existing_oauth_account = await self.get_by_oauth_account(oauth_name, account_id)
104
+ if existing_oauth_account:
105
+ logger.info(f"Fetching user for OAuth account with user_id: {existing_oauth_account.user_id}")
106
+ statement = select(User).where(User.id == existing_oauth_account.user_id)
107
+ result = await self.user_db.session.execute(statement)
108
+ user = result.scalar_one_or_none()
109
+
110
+ if user:
111
+ logger.info(f"User found: {user.email}, proceeding with on_after_login")
112
+ await self.on_after_login(user, request)
113
+ return user
114
+ else:
115
+ logger.error(f"No user found for OAuth account with user_id: {existing_oauth_account.user_id}")
116
+ raise ValueError("User not found for existing OAuth account")
117
+
118
+ if associate_by_email:
119
+ logger.info(f"Associating OAuth account by email: {account_email}")
120
+ user = await self.user_db.get_by_email(account_email)
121
+ if user:
122
+ oauth_account.user_id = user.id
123
+ await self.add_oauth_account(oauth_account)
124
+ logger.info(f"User associated: {user.email}, proceeding with on_after_login")
125
+ await self.on_after_login(user, request)
126
+ return user
127
+
128
+ logger.info(f"Creating new user for email: {account_email}")
129
+ user_dict = {
130
+ "email": account_email,
131
+ "hashed_password": self.password_helper.hash(secrets.token_hex(32)),
132
+ "is_active": True,
133
+ "is_verified": is_verified_by_default,
134
+ }
135
+
136
+ user = await self.user_db.create(user_dict)
137
+ oauth_account.user_id = user.id
138
+ await self.add_oauth_account(oauth_account)
139
+ logger.info(f"New user created: {user.email}, proceeding with on_after_login")
140
+ await self.on_after_login(user, request)
141
+ return user
142
 
143
  # استدعاء user manager من get_user_db
144
  async def get_user_manager(user_db: CustomSQLAlchemyUserDatabase = Depends(get_user_db)):