Mark-Lasfar commited on
Commit
8df87b3
·
1 Parent(s): 5fb061b

Update authorize for google

Browse files
Files changed (1) hide show
  1. main.py +57 -29
main.py CHANGED
@@ -12,7 +12,7 @@ from starlette.middleware.sessions import SessionMiddleware
12
  from fastapi.openapi.docs import get_swagger_ui_html
13
  from fastapi.middleware.cors import CORSMiddleware
14
  from api.endpoints import router as api_router
15
- from api.auth import fastapi_users, auth_backend, current_active_user, google_oauth_client, github_oauth_client
16
  from api.database import get_db, engine, Base
17
  from api.models import User, UserRead, UserCreate, Conversation
18
  from motor.motor_asyncio import AsyncIOMotorClient
@@ -27,7 +27,6 @@ from hashlib import md5
27
  from datetime import datetime
28
  import re
29
  from httpx_oauth.exceptions import GetIdEmailError
30
- from fastapi_users.router.oauth import OAuth2AuthorizeCallback
31
 
32
  # Setup logging
33
  logging.basicConfig(level=logging.INFO)
@@ -97,10 +96,13 @@ app.mount("/static", StaticFiles(directory="static"), name="static")
97
  # CORS setup
98
  app.add_middleware(
99
  CORSMiddleware,
100
- allow_origins=["*"],
 
 
 
101
  allow_credentials=True,
102
- allow_methods=["*"],
103
- allow_headers=["*"],
104
  )
105
 
106
  # Include routers
@@ -155,24 +157,37 @@ async def debug_routes():
155
  @app.get("/auth/google/callback", response_class=RedirectResponse)
156
  async def google_oauth_callback(
157
  request: Request,
158
- callback: OAuth2AuthorizeCallback = Depends(
159
- OAuth2AuthorizeCallback(google_oauth_client, redirect_url="https://mgzon-mgzon-app.hf.space/auth/google/callback")
160
- ),
161
  ):
162
  try:
163
  logger.info("Processing Google OAuth callback")
164
- token, state = await callback
165
- logger.info(f"Google OAuth token received: {token}")
166
- user_info = await google_oauth_client.get_id_email(token["access_token"])
 
 
167
  logger.info(f"Google user info: {user_info}")
168
- user = await fastapi_users.get_oauth_user_account(
169
- oauth_client=google_oauth_client,
170
- token=token,
171
- backend=auth_backend,
172
- request=request
 
 
 
 
 
 
173
  )
 
 
 
174
  logger.info("Google OAuth callback processed, redirecting to /chat")
175
- return RedirectResponse(url="/chat", status_code=302)
 
 
176
  except Exception as e:
177
  logger.error(f"Google OAuth callback error: {str(e)}")
178
  return RedirectResponse(url=f"/login?error=Google%20OAuth%20failed:%20{str(e)}", status_code=302)
@@ -180,24 +195,37 @@ async def google_oauth_callback(
180
  @app.get("/auth/github/callback", response_class=RedirectResponse)
181
  async def github_oauth_callback(
182
  request: Request,
183
- callback: OAuth2AuthorizeCallback = Depends(
184
- OAuth2AuthorizeCallback(github_oauth_client, redirect_url="https://mgzon-mgzon-app.hf.space/auth/github/callback")
185
- ),
186
  ):
187
  try:
188
  logger.info("Processing GitHub OAuth callback")
189
- token, state = await callback
190
- logger.info(f"GitHub OAuth token received: {token}")
191
- user_info = await github_oauth_client.get_id_email(token["access_token"])
 
 
192
  logger.info(f"GitHub user info: {user_info}")
193
- user = await fastapi_users.get_oauth_user_account(
194
- oauth_client=github_oauth_client,
195
- token=token,
196
- backend=auth_backend,
197
- request=request
 
 
 
 
 
 
198
  )
 
 
 
199
  logger.info("GitHub OAuth callback processed, redirecting to /chat")
200
- return RedirectResponse(url="/chat", status_code=302)
 
 
201
  except Exception as e:
202
  logger.error(f"GitHub OAuth callback error: {str(e)}")
203
  return RedirectResponse(url=f"/login?error=GitHub%20OAuth%20failed:%20{str(e)}", status_code=302)
 
12
  from fastapi.openapi.docs import get_swagger_ui_html
13
  from fastapi.middleware.cors import CORSMiddleware
14
  from api.endpoints import router as api_router
15
+ from api.auth import fastapi_users, auth_backend, google_oauth_client, github_oauth_client
16
  from api.database import get_db, engine, Base
17
  from api.models import User, UserRead, UserCreate, Conversation
18
  from motor.motor_asyncio import AsyncIOMotorClient
 
27
  from datetime import datetime
28
  import re
29
  from httpx_oauth.exceptions import GetIdEmailError
 
30
 
31
  # Setup logging
32
  logging.basicConfig(level=logging.INFO)
 
96
  # CORS setup
97
  app.add_middleware(
98
  CORSMiddleware,
99
+ allow_origins=[
100
+ "https://mgzon-mgzon-app.hf.space",
101
+ "http://localhost:7860",
102
+ ],
103
  allow_credentials=True,
104
+ allow_methods=["GET", "POST", "OPTIONS"],
105
+ allow_headers=["Accept", "Content-Type", "Authorization"],
106
  )
107
 
108
  # Include routers
 
157
  @app.get("/auth/google/callback", response_class=RedirectResponse)
158
  async def google_oauth_callback(
159
  request: Request,
160
+ token: str = Query(...),
161
+ state: str = Query(...),
162
+ db: Session = Depends(get_db)
163
  ):
164
  try:
165
  logger.info("Processing Google OAuth callback")
166
+ # Exchange code for access token
167
+ token_data = await google_oauth_client.get_access_token(token, "https://mgzon-mgzon-app.hf.space/auth/google/callback")
168
+ logger.info(f"Google OAuth token received: {token_data}")
169
+ # Get user info
170
+ user_info = await google_oauth_client.get_id_email(token_data["access_token"])
171
  logger.info(f"Google user info: {user_info}")
172
+ # Create or update user
173
+ user_manager = fastapi_users.user_manager
174
+ user = await user_manager.oauth_callback(
175
+ oauth_name="google",
176
+ access_token=token_data["access_token"],
177
+ account_id=user_info["id"],
178
+ account_email=user_info["email"],
179
+ expires_at=token_data.get("expires_at"),
180
+ refresh_token=token_data.get("refresh_token"),
181
+ request=request,
182
+ db=db
183
  )
184
+ logger.info("Google OAuth user processed, creating session")
185
+ # Create JWT token
186
+ token = await auth_backend.get_login_response(user, request)
187
  logger.info("Google OAuth callback processed, redirecting to /chat")
188
+ response = RedirectResponse(url="/chat", status_code=302)
189
+ response.set_cookie("Authorization", f"Bearer {token.access_token}", httponly=True)
190
+ return response
191
  except Exception as e:
192
  logger.error(f"Google OAuth callback error: {str(e)}")
193
  return RedirectResponse(url=f"/login?error=Google%20OAuth%20failed:%20{str(e)}", status_code=302)
 
195
  @app.get("/auth/github/callback", response_class=RedirectResponse)
196
  async def github_oauth_callback(
197
  request: Request,
198
+ token: str = Query(...),
199
+ state: str = Query(...),
200
+ db: Session = Depends(get_db)
201
  ):
202
  try:
203
  logger.info("Processing GitHub OAuth callback")
204
+ # Exchange code for access token
205
+ token_data = await github_oauth_client.get_access_token(token, "https://mgzon-mgzon-app.hf.space/auth/github/callback")
206
+ logger.info(f"GitHub OAuth token received: {token_data}")
207
+ # Get user info
208
+ user_info = await github_oauth_client.get_id_email(token_data["access_token"])
209
  logger.info(f"GitHub user info: {user_info}")
210
+ # Create or update user
211
+ user_manager = fastapi_users.user_manager
212
+ user = await user_manager.oauth_callback(
213
+ oauth_name="github",
214
+ access_token=token_data["access_token"],
215
+ account_id=user_info["id"],
216
+ account_email=user_info["email"],
217
+ expires_at=token_data.get("expires_at"),
218
+ refresh_token=token_data.get("refresh_token"),
219
+ request=request,
220
+ db=db
221
  )
222
+ logger.info("GitHub OAuth user processed, creating session")
223
+ # Create JWT token
224
+ token = await auth_backend.get_login_response(user, request)
225
  logger.info("GitHub OAuth callback processed, redirecting to /chat")
226
+ response = RedirectResponse(url="/chat", status_code=302)
227
+ response.set_cookie("Authorization", f"Bearer {token.access_token}", httponly=True)
228
+ return response
229
  except Exception as e:
230
  logger.error(f"GitHub OAuth callback error: {str(e)}")
231
  return RedirectResponse(url=f"/login?error=GitHub%20OAuth%20failed:%20{str(e)}", status_code=302)