Spaces:
Sleeping
Sleeping
Commit
·
9381a7e
1
Parent(s):
09e95aa
add user search
Browse files- .gitignore +1 -0
- main.py +23 -2
.gitignore
CHANGED
|
@@ -2,3 +2,4 @@ sessions_db.json
|
|
| 2 |
users_db.json
|
| 3 |
deviceinfo.py
|
| 4 |
.env
|
|
|
|
|
|
| 2 |
users_db.json
|
| 3 |
deviceinfo.py
|
| 4 |
.env
|
| 5 |
+
_pycache_
|
main.py
CHANGED
|
@@ -59,6 +59,15 @@ class LoginRequest(BaseModel):
|
|
| 59 |
username: str
|
| 60 |
password: str
|
| 61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
class TokenResponse(BaseModel):
|
| 63 |
access_token: str
|
| 64 |
token_type: str = "bearer"
|
|
@@ -155,7 +164,7 @@ def signup(request: SignupRequest):
|
|
| 155 |
save_databases()
|
| 156 |
return {"message": "User created successfully"}
|
| 157 |
|
| 158 |
-
@auth_router.post("/login", response_model=
|
| 159 |
def login(request: LoginRequest, user_agent: str = Header(...)):
|
| 160 |
user_id = next((uid for uid, user in users_db.items() if user["username"] == request.username), None)
|
| 161 |
if not user_id or not verify_password(request.password, users_db[user_id]["password"]):
|
|
@@ -173,7 +182,15 @@ def login(request: LoginRequest, user_agent: str = Header(...)):
|
|
| 173 |
sessions_db[user_id].append({"token": token, "expires": expiration_time, "device": user_agent})
|
| 174 |
save_databases()
|
| 175 |
|
| 176 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
|
| 178 |
@auth_router.post("/logout")
|
| 179 |
def logout(user_id: str, token: str):
|
|
@@ -216,6 +233,10 @@ def validate_token(user_id: str, token: str, user_agent: str = Header(...)):
|
|
| 216 |
status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token"
|
| 217 |
)
|
| 218 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 219 |
# Admin Routes
|
| 220 |
@admin_router.get("/users", response_model=List[UserResponse])
|
| 221 |
def get_all_users(user_id: str, token: str, user_agent: str = Header(...)):
|
|
|
|
| 59 |
username: str
|
| 60 |
password: str
|
| 61 |
|
| 62 |
+
class LoginResponse(BaseModel):
|
| 63 |
+
user_id: str
|
| 64 |
+
username: str
|
| 65 |
+
email: EmailStr
|
| 66 |
+
access_level: str
|
| 67 |
+
date_joined: datetime
|
| 68 |
+
access_token: str
|
| 69 |
+
token_type: str = "bearer"
|
| 70 |
+
|
| 71 |
class TokenResponse(BaseModel):
|
| 72 |
access_token: str
|
| 73 |
token_type: str = "bearer"
|
|
|
|
| 164 |
save_databases()
|
| 165 |
return {"message": "User created successfully"}
|
| 166 |
|
| 167 |
+
@auth_router.post("/login", response_model=LoginResponse)
|
| 168 |
def login(request: LoginRequest, user_agent: str = Header(...)):
|
| 169 |
user_id = next((uid for uid, user in users_db.items() if user["username"] == request.username), None)
|
| 170 |
if not user_id or not verify_password(request.password, users_db[user_id]["password"]):
|
|
|
|
| 182 |
sessions_db[user_id].append({"token": token, "expires": expiration_time, "device": user_agent})
|
| 183 |
save_databases()
|
| 184 |
|
| 185 |
+
user = users_db[user_id]
|
| 186 |
+
return LoginResponse(
|
| 187 |
+
user_id=user_id,
|
| 188 |
+
username=user["username"],
|
| 189 |
+
email=user["email"],
|
| 190 |
+
access_level=user["access_level"],
|
| 191 |
+
date_joined=user["date_joined"],
|
| 192 |
+
access_token=token
|
| 193 |
+
)
|
| 194 |
|
| 195 |
@auth_router.post("/logout")
|
| 196 |
def logout(user_id: str, token: str):
|
|
|
|
| 233 |
status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token"
|
| 234 |
)
|
| 235 |
|
| 236 |
+
@auth_router.get("/search-users", response_model=List[str])
|
| 237 |
+
def search_users(query: str):
|
| 238 |
+
return [user["username"] for user in users_db.values() if query.lower() in user["username"].lower()]
|
| 239 |
+
|
| 240 |
# Admin Routes
|
| 241 |
@admin_router.get("/users", response_model=List[UserResponse])
|
| 242 |
def get_all_users(user_id: str, token: str, user_agent: str = Header(...)):
|