Projekt

Obecné

Profil

Stáhnout (3.46 KB) Statistiky
| Větev: | Tag: | Revize:
1
from typing import List
2
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form
3
from datetime import datetime
4
from sqlalchemy.orm import Session
5
from sql_app import crud, models, schemas
6
from ..database import SessionLocal, engine
7
from fastapi import FastAPI, Request
8
from fastapi.responses import HTMLResponse
9
from fastapi_jwt_auth import AuthJWT
10
from fastapi.staticfiles import StaticFiles
11
from fastapi.templating import Jinja2Templates
12

    
13
models.Base.metadata.create_all(bind=engine)
14

    
15
# Path to html templates used in this file
16
templates = Jinja2Templates(directory="templates/usb-logs")
17

    
18
# prefix used for all endpoints in this file
19
usblogs_web = APIRouter(prefix="")
20

    
21

    
22
# Dependency
23
def get_db():
24
    db = SessionLocal()
25
    try:
26
        yield db
27
    finally:
28
        db.close()
29

    
30

    
31
@usblogs_web.get("/logs-web", response_class=HTMLResponse)
32
async def read_logs(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db),
33
                    Authorize: AuthJWT = Depends()):
34
    """
35
    Returns template with all usb logs currently saved in database with its pcs, teams and licenses.
36
    """
37
    Authorize.jwt_optional()
38
    current_user = Authorize.get_jwt_subject()
39
    logs = crud.get_logs(db, skip=skip, limit=limit)
40
    pcs = []
41
    for log in logs:
42
        if log.pc_id not in pcs:
43
            pcs.append(log.pc_id)
44
    pc_obj = crud.find_pcs(db, pcs)
45
    teams = crud.get_teams(db, skip=skip, limit=limit)
46
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
47
    if current_user == "admin":
48
        return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams,
49
                                                        "licenses": licenses, "user": current_user})
50
    else:
51
        current_user = "guest"
52
        return templates.TemplateResponse("logs_normal.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams,
53
                                                        "licenses": licenses, "user": current_user})
54

    
55

    
56
@usblogs_web.post("/logs-web", response_class=HTMLResponse)
57
async def filter_logs(request: Request, pc: str = Form("all"), team: str = Form("all"), lic: str = Form("all"),
58
                      skip: int = 0, limit: int = 100,
59
                      db: Session = Depends(get_db), Authorize: AuthJWT = Depends()):
60
    """
61
    Endpoint used for filtering usb logs by user given form inputs.
62
    """
63
    Authorize.jwt_optional()
64
    current_user = Authorize.get_jwt_subject()
65
    log = crud.get_filtered_logs(db, pc, team, lic)
66
    logs_ids = []
67
    for l in log:
68
        logs_ids.append(l[0])
69
    logs = crud.find_filtered_logs(db, logs_ids)
70
    pc_obj = crud.get_pcs(db, skip=skip, limit=limit)
71
    teams = crud.get_teams(db, skip=skip, limit=limit)
72
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
73
    if current_user == "admin":
74
        return templates.TemplateResponse("logs.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams,
75
                                                        "licenses": licenses, "user": current_user})
76
    else:
77
        current_user = "guest"
78
        return templates.TemplateResponse("logs_normal.html", {"request": request, "logs": logs, "pcs": pc_obj, "teams": teams,
79
                                                        "licenses": licenses, "user": current_user})
80

    
81

    
82
@usblogs_web.get("/", response_class=HTMLResponse)
83
async def crossroad(request: Request):
84
    return templates.TemplateResponse("crossroad.html", {"request": request})
(14-14/15)