|
from fastapi import APIRouter, HTTPException, status |
|
from typing import List, Optional |
|
from fastapi import FastAPI, HTTPException, Depends, Body, Path |
|
from fastapi.responses import JSONResponse |
|
from .utils.helperfx import get_mikrotik, MikrotikAPI |
|
from .schema import ( |
|
UserCreate, |
|
RegisterResponse, |
|
LogoutResponse, |
|
UserStatsResponse, |
|
ActiveUsersResponse, |
|
UserStatusResponse, |
|
) |
|
|
|
mikrotik_router = APIRouter(tags=["Mikrotik"]) |
|
|
|
|
|
|
|
@mikrotik_router.post("/users/{phone}/remove-session") |
|
async def remove_active_session( |
|
phone: str = Path(..., description="User phone number"), |
|
mikrotik: MikrotikAPI = Depends(get_mikrotik), |
|
): |
|
"""Remove an active session for a hotspot user""" |
|
response = mikrotik.remove_active_session(phone) |
|
if not response["success"]: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response, |
|
) |
|
return JSONResponse(content={"message": f"User {phone} session removed"}) |
|
|
|
|
|
@mikrotik_router.post("/users/register", response_model=RegisterResponse) |
|
async def register_user( |
|
user: UserCreate = Body(...), mikrotik: MikrotikAPI = Depends(get_mikrotik) |
|
): |
|
"""Register a new hotspot user""" |
|
response = mikrotik.add_hotspot_user( |
|
phone=user.phoneNumber, password=user.password, profile=user.profile |
|
) |
|
print(response) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response.__dict__ |
|
|
|
|
|
@mikrotik_router.post("/users/logout/{phone}", response_model=LogoutResponse) |
|
async def logout_user( |
|
phone: str = Path(..., description="User phone number"), |
|
mikrotik: MikrotikAPI = Depends(get_mikrotik), |
|
): |
|
"""Logout a hotspot user""" |
|
response = mikrotik.logout_hotspot_user(phone) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response.__dict__ |
|
|
|
|
|
@mikrotik_router.post("/users/{phone}/disable", response_model=UserStatusResponse) |
|
async def disable_user( |
|
phone: str = Path(..., description="User phone number"), |
|
mikrotik: MikrotikAPI = Depends(get_mikrotik), |
|
): |
|
"""Disable a hotspot user""" |
|
response = mikrotik.set_user_status(phone, disabled=True) |
|
print(response) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response, |
|
) |
|
return response.__dict__ |
|
|
|
|
|
@mikrotik_router.post("/users/{phone}/enable", response_model=UserStatusResponse) |
|
async def enable_user( |
|
phone: str = Path(..., description="User phone number"), |
|
mikrotik: MikrotikAPI = Depends(get_mikrotik), |
|
): |
|
"""Enable a hotspot user""" |
|
response = mikrotik.set_user_status(phone, disabled=False) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response.__dict__ |
|
|
|
|
|
@mikrotik_router.get("/users/active", response_model=ActiveUsersResponse) |
|
async def get_active_users(mikrotik: MikrotikAPI = Depends(get_mikrotik)): |
|
"""Get list of active hotspot users""" |
|
response = mikrotik.get_active_users() |
|
print(response) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response |
|
|
|
|
|
@mikrotik_router.get("/users/stats", response_model=UserStatsResponse) |
|
async def get_users_stats( |
|
phone: Optional[str] = None, mikrotik: MikrotikAPI = Depends(get_mikrotik) |
|
): |
|
"""Get user statistics""" |
|
response = mikrotik.get_user_stats(phone) |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response.__dict__ |
|
|
|
|
|
@mikrotik_router.get("/users") |
|
async def get_users_list(mikrotik: MikrotikAPI = Depends(get_mikrotik)): |
|
"""Get list of all hotspot users""" |
|
response = mikrotik.get_users_list() |
|
if not response.code == 200: |
|
return JSONResponse( |
|
status_code=400, |
|
content=response.__dict__, |
|
) |
|
return response |
|
|