Files
brewman/brewman/routers/auth/client.py
T
tanshu 6dbab6442f Renamed groups to roles in the frontend
Working:
 Account
 Cost Centre
 Employee
 Product Group
 Product
 Role
 User
 Client
2020-05-12 01:44:57 +05:30

127 lines
3.4 KiB
Python

import traceback
import uuid
from fastapi import APIRouter, HTTPException, status, Depends, Security
from sqlalchemy import desc
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session
from ...schemas.auth import UserToken
from ...core.security import get_current_active_user as get_user
from ...db.session import SessionLocal
from ...models.auth import Client, LoginHistory
import brewman.schemas.auth as schemas
router = APIRouter()
# Dependency
def get_db():
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.put("/{id_}")
def update(
id_: uuid.UUID,
data: schemas.ClientIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["clients"]),
):
try:
item: Client = db.query(Client).filter(Client.id == id_).first()
item.enabled = data.enabled
if item.enabled:
item.otp = None
item.name = data.name
db.commit()
return {}
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e),
)
except Exception:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=traceback.format_exc(),
)
@router.delete("/{id_}")
def delete(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["clients"]),
):
try:
item: Client = db.query(Client).filter(Client.id == id_).first()
db.execute(LoginHistory.__table__.delete(LoginHistory.client_id == item.id))
db.delete(item)
db.commit()
return {}
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e),
)
except Exception:
db.rollback()
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=traceback.format_exc(),
)
@router.get("/list")
async def show_list(
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["clients"]),
):
list_ = db.query(Client).order_by(Client.name).all()
clients = []
for item in list_:
last_login = (
db.query(LoginHistory)
.filter(LoginHistory.client_id == item.id)
.order_by(desc(LoginHistory.date))
.first()
)
last_login = (
"Never"
if last_login is None
else last_login.date.strftime("%d-%b-%Y %H:%M")
)
clients.append(
{
"id": item.id,
"code": item.code,
"name": item.name,
"enabled": item.enabled,
"otp": item.otp,
"creationDate": item.creation_date.strftime("%d-%b-%Y %H:%M"),
"lastLogin": last_login,
}
)
return clients
@router.get("/{id_}")
def show_id(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["clients"]),
):
item: Client = db.query(Client).filter(Client.id == id_).first()
return {
"id": item.id,
"code": item.code,
"name": item.name,
"enabled": item.enabled,
"otp": item.otp,
}