From 2b7fed338116dfc9aa8ce2207df80b9ef56f1b25 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 29 Dec 2022 09:57:37 +0100 Subject: [PATCH] created endpoints to delete origins and to delete a lease --- README.md | 8 ++++++++ app/main.py | 15 ++++++++++++++- app/orm.py | 21 ++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3c05ed8..be9cc41 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@ List registered origins. |-----------------|---------|--------------------------------------| | `leases` | `false` | Include referenced leases per origin | +### `DELETE /-/origins` + +Deletes all origins and their leases. + ### `GET /-/leases?origin=false` List current leases. @@ -41,6 +45,10 @@ List current leases. |-----------------|---------|-------------------------------------| | `origin` | `false` | Include referenced origin per lease | +### `DELETE /-/lease/{lease_ref}` + +Deletes an lease. + ### `GET /client-token` Generate client token, (see [installation](#installation)). diff --git a/app/main.py b/app/main.py index a50ed45..586c0c1 100644 --- a/app/main.py +++ b/app/main.py @@ -15,7 +15,7 @@ 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 +from starlette.responses import StreamingResponse, JSONResponse, HTMLResponse, Response from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -88,6 +88,12 @@ async def _origins(request: Request, leases: bool = False): return JSONResponse(response) +@app.delete('/-/origins') +async def _origins_delete(request: Request): + Origin.delete(db) + return Response(status_code=201) + + @app.get('/-/leases') async def _leases(request: Request, origin: bool = False): session = sessionmaker(bind=db)() @@ -102,6 +108,13 @@ async def _leases(request: Request, origin: bool = False): return JSONResponse(response) +@app.delete('/-/lease/{lease_ref}') +async def _lease_delete(request: Request, lease_ref: str): + if Lease.delete(db, lease_ref) == 1: + return Response(status_code=201) + raise HTTPException(status_code=404, detail='lease not found') + + # venv/lib/python3.9/site-packages/nls_core_service_instance/service_instance_token_manager.py @app.get('/client-token') async def client_token(): diff --git a/app/orm.py b/app/orm.py index aa3ba47..77cd8fc 100644 --- a/app/orm.py +++ b/app/orm.py @@ -54,13 +54,24 @@ class Origin(Base): session.flush() session.close() + @staticmethod + def delete(engine: Engine, origins: ["Origin"] = None) -> int: + session = sessionmaker(bind=engine)() + if origins is None: + deletions = session.query(Origin).delete() + else: + deletions = session.query(Origin).filter(Origin.origin_ref in origins).delete() + session.commit() + session.close() + return deletions + class Lease(Base): __tablename__ = "lease" lease_ref = Column(CHAR(length=36), primary_key=True, nullable=False, index=True) # uuid4 - origin_ref = Column(CHAR(length=36), ForeignKey(Origin.origin_ref), nullable=False, index=True) # uuid4 + origin_ref = Column(CHAR(length=36), ForeignKey(Origin.origin_ref, ondelete='CASCADE'), nullable=False, index=True) # uuid4 lease_created = Column(DATETIME(), nullable=False) lease_expires = Column(DATETIME(), nullable=False) lease_updated = Column(DATETIME(), nullable=False) @@ -127,6 +138,14 @@ class Lease(Base): session.close() return deletions + @staticmethod + def delete(engine: Engine, lease_ref: str) -> int: + session = sessionmaker(bind=engine)() + deletions = session.query(Lease).filter(Lease.lease_ref == lease_ref).delete() + session.commit() + session.close() + return deletions + def init(engine: Engine): tables = [Origin, Lease]