Update main.py
Browse files
main.py
CHANGED
@@ -123,6 +123,40 @@ def create_assessment(
|
|
123 |
print(f"Assessment name: {assessment_name}")
|
124 |
return response
|
125 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
# Dependency for verifying the user's token
|
127 |
def get_current_user(token: str = Depends(verify_token)):
|
128 |
if not token:
|
|
|
123 |
print(f"Assessment name: {assessment_name}")
|
124 |
return response
|
125 |
"""
|
126 |
+
|
127 |
+
@app.post("/verify-google-token")
|
128 |
+
async def verify_google_token(token_data: TokenData, db: Session = Depends(get_db)):
|
129 |
+
# Verify the token with Google
|
130 |
+
response = requests.get(f'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={token_data.token}')
|
131 |
+
if response.status_code != 200:
|
132 |
+
raise HTTPException(status_code=400, detail="Invalid Google token")
|
133 |
+
|
134 |
+
google_user_info = response.json()
|
135 |
+
email = google_user_info.get('email')
|
136 |
+
|
137 |
+
# Check if user exists in database and verify them
|
138 |
+
db_user = db.query(User).filter(User.email == email).first()
|
139 |
+
if not db_user:
|
140 |
+
# Create a new user if doesn't exist
|
141 |
+
db_user = User(email=email, is_verified=True, name=google_user_info.get('name'))
|
142 |
+
db.add(db_user)
|
143 |
+
db.commit()
|
144 |
+
db.refresh(db_user)
|
145 |
+
elif not db_user.is_verified:
|
146 |
+
# Verify the user if not already verified
|
147 |
+
db_user.is_verified = True
|
148 |
+
db.commit()
|
149 |
+
|
150 |
+
# Create an access token for the user
|
151 |
+
access_token = auth_views.create_access_token(
|
152 |
+
data={"sub": db_user.email},
|
153 |
+
expires_delta=timedelta(minutes=auth_views.ACCESS_TOKEN_EXPIRE_MINUTES)
|
154 |
+
)
|
155 |
+
|
156 |
+
# Redirect the user to the protected route
|
157 |
+
response = RedirectResponse(url="/protected")
|
158 |
+
response.set_cookie(key="access_token", value=f"Bearer {access_token}", httponly=True)
|
159 |
+
return response
|
160 |
# Dependency for verifying the user's token
|
161 |
def get_current_user(token: str = Depends(verify_token)):
|
162 |
if not token:
|