Spaces:
Sleeping
Sleeping
Commit
·
fdce0db
1
Parent(s):
56d9508
1.0.6 debug
Browse files
main.py
CHANGED
|
@@ -14,7 +14,7 @@ from typing import Optional
|
|
| 14 |
load_dotenv()
|
| 15 |
|
| 16 |
SERVER_NAME = "Nexus Authentication Service"
|
| 17 |
-
VERSION = "1.0.
|
| 18 |
|
| 19 |
# Supabase Configuration
|
| 20 |
SUPABASE_URL = os.getenv("SUPABASE_URL")
|
|
@@ -64,6 +64,10 @@ class UserResponse(BaseModel):
|
|
| 64 |
access_level: str
|
| 65 |
date_joined: datetime
|
| 66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
class UpdateUserRequest(BaseModel):
|
| 68 |
password: Optional[str] = None
|
| 69 |
email: Optional[EmailStr] = None
|
|
@@ -171,8 +175,6 @@ async def signup(request: SignupRequest):
|
|
| 171 |
created_user = await create_user(request.username, hash_password(request.password), request.email)
|
| 172 |
return {"message": "User created successfully", "user": created_user}
|
| 173 |
|
| 174 |
-
from datetime import datetime, timedelta, timezone
|
| 175 |
-
|
| 176 |
@auth_router.post("/login", response_model=LoginResponse)
|
| 177 |
async def login(request: LoginRequest, user_agent: str = Header(...)):
|
| 178 |
# Query the user based on the username
|
|
@@ -235,9 +237,6 @@ async def logout(user_id: str, token: str):
|
|
| 235 |
|
| 236 |
return {"message": "Session forcefully expired"}
|
| 237 |
|
| 238 |
-
|
| 239 |
-
from datetime import datetime, timezone
|
| 240 |
-
|
| 241 |
@auth_router.get("/validate", response_model=TokenResponse)
|
| 242 |
async def validate_token(user_id: str, token: str, user_agent: str = Header(...)):
|
| 243 |
# Query to validate session by user_id, token, and device
|
|
@@ -274,11 +273,24 @@ async def validate_token(user_id: str, token: str, user_agent: str = Header(...)
|
|
| 274 |
|
| 275 |
return TokenResponse(access_token=token)
|
| 276 |
|
| 277 |
-
|
| 278 |
@auth_router.get("/search-users", response_model=List[str])
|
| 279 |
async def search_users(query: str):
|
| 280 |
users = supabase.table("users").select("username").ilike("username", f"%{query}%").execute()
|
| 281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
|
| 283 |
@auth_router.get("/get-user-id", response_model=str)
|
| 284 |
async def get_user_id(username: str):
|
|
|
|
| 14 |
load_dotenv()
|
| 15 |
|
| 16 |
SERVER_NAME = "Nexus Authentication Service"
|
| 17 |
+
VERSION = "1.0.6 debug"
|
| 18 |
|
| 19 |
# Supabase Configuration
|
| 20 |
SUPABASE_URL = os.getenv("SUPABASE_URL")
|
|
|
|
| 64 |
access_level: str
|
| 65 |
date_joined: datetime
|
| 66 |
|
| 67 |
+
class UsernameAvailabilityResponse(BaseModel):
|
| 68 |
+
username: str
|
| 69 |
+
is_available: bool
|
| 70 |
+
|
| 71 |
class UpdateUserRequest(BaseModel):
|
| 72 |
password: Optional[str] = None
|
| 73 |
email: Optional[EmailStr] = None
|
|
|
|
| 175 |
created_user = await create_user(request.username, hash_password(request.password), request.email)
|
| 176 |
return {"message": "User created successfully", "user": created_user}
|
| 177 |
|
|
|
|
|
|
|
| 178 |
@auth_router.post("/login", response_model=LoginResponse)
|
| 179 |
async def login(request: LoginRequest, user_agent: str = Header(...)):
|
| 180 |
# Query the user based on the username
|
|
|
|
| 237 |
|
| 238 |
return {"message": "Session forcefully expired"}
|
| 239 |
|
|
|
|
|
|
|
|
|
|
| 240 |
@auth_router.get("/validate", response_model=TokenResponse)
|
| 241 |
async def validate_token(user_id: str, token: str, user_agent: str = Header(...)):
|
| 242 |
# Query to validate session by user_id, token, and device
|
|
|
|
| 273 |
|
| 274 |
return TokenResponse(access_token=token)
|
| 275 |
|
|
|
|
| 276 |
@auth_router.get("/search-users", response_model=List[str])
|
| 277 |
async def search_users(query: str):
|
| 278 |
users = supabase.table("users").select("username").ilike("username", f"%{query}%").execute()
|
| 279 |
+
usernames = [user["username"] for user in users.data]
|
| 280 |
+
|
| 281 |
+
# Exclude SYSTEM_USER from the list if it's present
|
| 282 |
+
if SYSTEM_USER and SYSTEM_USER in usernames:
|
| 283 |
+
usernames.remove(SYSTEM_USER)
|
| 284 |
+
|
| 285 |
+
return usernames
|
| 286 |
+
|
| 287 |
+
@auth_router.get("/is-username-available", response_model=UsernameAvailabilityResponse)
|
| 288 |
+
async def is_username_available(query: str):
|
| 289 |
+
users = supabase.table("users").select("username").eq("username", query).execute()
|
| 290 |
+
return UsernameAvailabilityResponse(
|
| 291 |
+
username=query,
|
| 292 |
+
is_available=len(users.data) == 0 # If no users are found, the username is available
|
| 293 |
+
)
|
| 294 |
|
| 295 |
@auth_router.get("/get-user-id", response_model=str)
|
| 296 |
async def get_user_id(username: str):
|