mirror of
https://gitea.publichub.eu/oscar.krause/fastapi-dls.git
synced 2026-04-07 00:05:47 +03:00
implemented basic ui
This commit is contained in:
67
app/main.py
67
app/main.py
@@ -15,9 +15,11 @@ from calendar import timegm
|
||||
from jose import jws, jwk, jwt
|
||||
from jose.constants import ALGORITHMS
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
from starlette.responses import StreamingResponse, JSONResponse, HTMLResponse, Response, RedirectResponse
|
||||
from starlette.responses import StreamingResponse, JSONResponse, Response, RedirectResponse
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from starlette.staticfiles import StaticFiles
|
||||
from starlette.templating import Jinja2Templates
|
||||
|
||||
from util import load_key, load_file
|
||||
from orm import Origin, Lease, init as db_init, migrate
|
||||
@@ -29,6 +31,9 @@ VERSION, COMMIT, DEBUG = env('VERSION', 'unknown'), env('COMMIT', 'unknown'), bo
|
||||
|
||||
config = dict(openapi_url='/-/openapi.json', docs_url='/-/docs', redoc_url='/-/redoc')
|
||||
app = FastAPI(title='FastAPI-DLS', description='Minimal Delegated License Service (DLS).', version=VERSION, **config)
|
||||
app.mount('/static', StaticFiles(directory='static', html=True), name='static'),
|
||||
templates = Jinja2Templates(directory='templates')
|
||||
|
||||
db = create_engine(str(env('DATABASE', 'sqlite:///db.sqlite')))
|
||||
db_init(db), migrate(db)
|
||||
|
||||
@@ -63,9 +68,9 @@ def __get_token(request: Request) -> dict:
|
||||
return jwt.decode(token=token, key=jwt_decode_key, algorithms=ALGORITHMS.RS256, options={'verify_aud': False})
|
||||
|
||||
|
||||
@app.get('/', summary='Index')
|
||||
@app.get('/', summary='* Index')
|
||||
async def index():
|
||||
return RedirectResponse('/-/readme')
|
||||
return RedirectResponse('/-/')
|
||||
|
||||
|
||||
@app.get('/status', summary='* Status', description='returns current service status, version (incl. git-commit) and some variables.', deprecated=True)
|
||||
@@ -74,8 +79,8 @@ async def status(request: Request):
|
||||
|
||||
|
||||
@app.get('/-/', summary='* Index')
|
||||
async def _index():
|
||||
return RedirectResponse('/-/readme')
|
||||
async def _index(request: Request):
|
||||
return templates.TemplateResponse(name='views/index.html', context={'request': request, 'VERSION': VERSION})
|
||||
|
||||
|
||||
@app.get('/-/health', summary='* Health')
|
||||
@@ -84,44 +89,32 @@ async def _health(request: Request):
|
||||
|
||||
|
||||
@app.get('/-/readme', summary='* Readme')
|
||||
async def _readme():
|
||||
async def _readme(request: Request):
|
||||
from markdown import markdown
|
||||
content = load_file('../README.md').decode('utf-8')
|
||||
return HTMLResponse(markdown(text=content, extensions=['tables', 'fenced_code', 'md_in_html', 'nl2br', 'toc']))
|
||||
markdown = markdown(text=content, extensions=['tables', 'fenced_code', 'md_in_html', 'nl2br', 'toc'])
|
||||
context = {'request': request, 'markdown': markdown, 'VERSION': VERSION}
|
||||
return templates.TemplateResponse(name='views/dashboard_readme.html', context=context)
|
||||
|
||||
|
||||
@app.get('/-/manage', summary='* Management UI')
|
||||
async def _manage(request: Request):
|
||||
response = '''
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>FastAPI-DLS Management</title>
|
||||
</head>
|
||||
<body>
|
||||
<button onclick="deleteOrigins()">delete origins and their leases</button>
|
||||
<button onclick="deleteLease()">delete specific lease</button>
|
||||
|
||||
<script>
|
||||
function deleteOrigins() {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("DELETE", '/-/origins', true);
|
||||
xhr.send();
|
||||
}
|
||||
function deleteLease(lease_ref) {
|
||||
if(lease_ref === undefined)
|
||||
lease_ref = window.prompt("Please enter 'lease_ref' which should be deleted");
|
||||
if(lease_ref === null || lease_ref === "")
|
||||
return
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("DELETE", `/-/lease/${lease_ref}`, true);
|
||||
xhr.send();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
return HTMLResponse(response)
|
||||
return templates.TemplateResponse(name='views/manage.html', context={'request': request, 'VERSION': VERSION})
|
||||
|
||||
|
||||
@app.get('/-/dashboard', summary='* Dashboard')
|
||||
async def _dashboard(request: Request):
|
||||
return templates.TemplateResponse(name='views/dashboard.html', context={'request': request, 'VERSION': VERSION})
|
||||
|
||||
|
||||
@app.get('/-/dashboard/origins', summary='* Dashboard - Origins')
|
||||
async def _dashboard_origins(request: Request):
|
||||
return templates.TemplateResponse(name='views/dashboard_origins.html', context={'request': request, 'VERSION': VERSION})
|
||||
|
||||
|
||||
@app.get('/-/dashboard/leases', summary='* Dashboard - Leases')
|
||||
async def _dashboard_origins(request: Request):
|
||||
return templates.TemplateResponse(name='views/dashboard_leases.html', context={'request': request, 'VERSION': VERSION})
|
||||
|
||||
|
||||
@app.get('/-/origins', summary='* Origins')
|
||||
|
||||
Reference in New Issue
Block a user