created endpoints to delete origins and to delete a lease

This commit is contained in:
Oscar Krause 2022-12-29 09:57:37 +01:00
parent 922dc9f5a7
commit 2b7fed3381
3 changed files with 42 additions and 2 deletions

View File

@ -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)).

View File

@ -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():

View File

@ -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]