code refactorings after merge from main
This commit is contained in:
parent
f62f2a2701
commit
20cdaefa1c
22
app/main.py
22
app/main.py
@ -1,8 +1,9 @@
|
|||||||
import logging
|
import logging
|
||||||
|
import sys
|
||||||
from base64 import b64encode as b64enc
|
from base64 import b64encode as b64enc
|
||||||
from calendar import timegm
|
from calendar import timegm
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from datetime import datetime, timedelta, UTC
|
from datetime import datetime, UTC
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from json import loads as json_loads
|
from json import loads as json_loads
|
||||||
from os import getenv as env
|
from os import getenv as env
|
||||||
@ -21,8 +22,11 @@ from starlette.middleware.cors import CORSMiddleware
|
|||||||
from starlette.responses import StreamingResponse, JSONResponse as JSONr, HTMLResponse as HTMLr, Response, \
|
from starlette.responses import StreamingResponse, JSONResponse as JSONr, HTMLResponse as HTMLr, Response, \
|
||||||
RedirectResponse
|
RedirectResponse
|
||||||
|
|
||||||
from orm import Origin, Lease, init as db_init, migrate
|
# add relative path to use packages as they were in the app/ dir
|
||||||
from util import PrivateKey, PublicKey, load_file
|
sys.path.append('../')
|
||||||
|
sys.path.append('../app')
|
||||||
|
|
||||||
|
from orm import Origin, Lease, init as db_init, migrate, Instance, Site
|
||||||
|
|
||||||
# Load variables
|
# Load variables
|
||||||
load_dotenv('../version.env')
|
load_dotenv('../version.env')
|
||||||
@ -249,7 +253,7 @@ async def _lease_delete(request: Request, lease_ref: str):
|
|||||||
# venv/lib/python3.9/site-packages/nls_core_service_instance/service_instance_token_manager.py
|
# venv/lib/python3.9/site-packages/nls_core_service_instance/service_instance_token_manager.py
|
||||||
@app.get('/-/client-token', summary='* Client-Token', description='creates a new messenger token for this service instance')
|
@app.get('/-/client-token', summary='* Client-Token', description='creates a new messenger token for this service instance')
|
||||||
async def _client_token():
|
async def _client_token():
|
||||||
cur_time = datetime.utcnow()
|
cur_time = datetime.now(UTC)
|
||||||
|
|
||||||
default_instance = Instance.get_default_instance(db)
|
default_instance = Instance.get_default_instance(db)
|
||||||
public_key = default_instance.get_public_key()
|
public_key = default_instance.get_public_key()
|
||||||
@ -438,7 +442,7 @@ async def auth_v1_token(request: Request):
|
|||||||
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_multi_controller.py
|
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_multi_controller.py
|
||||||
@app.post('/leasing/v1/lessor', description='request multiple leases (borrow) for current origin')
|
@app.post('/leasing/v1/lessor', description='request multiple leases (borrow) for current origin')
|
||||||
async def leasing_v1_lessor(request: Request):
|
async def leasing_v1_lessor(request: Request):
|
||||||
j, cur_time = json_loads((await request.body()).decode('utf-8')), datetime.utcnow()
|
j, cur_time = json_loads((await request.body()).decode('utf-8')), datetime.now(UTC)
|
||||||
|
|
||||||
default_instance = Instance.get_default_instance(db)
|
default_instance = Instance.get_default_instance(db)
|
||||||
jwt_decode_key = default_instance.get_jwt_decode_key()
|
jwt_decode_key = default_instance.get_jwt_decode_key()
|
||||||
@ -489,7 +493,7 @@ async def leasing_v1_lessor(request: Request):
|
|||||||
# venv/lib/python3.9/site-packages/nls_dal_service_instance_dls/schema/service_instance/V1_0_21__product_mapping.sql
|
# venv/lib/python3.9/site-packages/nls_dal_service_instance_dls/schema/service_instance/V1_0_21__product_mapping.sql
|
||||||
@app.get('/leasing/v1/lessor/leases', description='get active leases for current origin')
|
@app.get('/leasing/v1/lessor/leases', description='get active leases for current origin')
|
||||||
async def leasing_v1_lessor_lease(request: Request):
|
async def leasing_v1_lessor_lease(request: Request):
|
||||||
cur_time = datetime.utcnow()
|
cur_time = datetime.now(UTC)
|
||||||
|
|
||||||
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
||||||
|
|
||||||
@ -516,7 +520,7 @@ async def leasing_v1_lessor_lease(request: Request):
|
|||||||
# venv/lib/python3.9/site-packages/nls_core_lease/lease_single.py
|
# venv/lib/python3.9/site-packages/nls_core_lease/lease_single.py
|
||||||
@app.put('/leasing/v1/lease/{lease_ref}', description='renew a lease')
|
@app.put('/leasing/v1/lease/{lease_ref}', description='renew a lease')
|
||||||
async def leasing_v1_lease_renew(request: Request, lease_ref: str):
|
async def leasing_v1_lease_renew(request: Request, lease_ref: str):
|
||||||
cur_time = datetime.utcnow()
|
cur_time = datetime.now(UTC)
|
||||||
|
|
||||||
default_instance = Instance.get_default_instance(db)
|
default_instance = Instance.get_default_instance(db)
|
||||||
jwt_decode_key = default_instance.get_jwt_decode_key()
|
jwt_decode_key = default_instance.get_jwt_decode_key()
|
||||||
@ -551,7 +555,7 @@ async def leasing_v1_lease_renew(request: Request, lease_ref: str):
|
|||||||
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_single_controller.py
|
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_single_controller.py
|
||||||
@app.delete('/leasing/v1/lease/{lease_ref}', description='release (return) a lease')
|
@app.delete('/leasing/v1/lease/{lease_ref}', description='release (return) a lease')
|
||||||
async def leasing_v1_lease_delete(request: Request, lease_ref: str):
|
async def leasing_v1_lease_delete(request: Request, lease_ref: str):
|
||||||
cur_time = datetime.utcnow()
|
cur_time = datetime.now(UTC)
|
||||||
|
|
||||||
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
||||||
|
|
||||||
@ -584,7 +588,7 @@ async def leasing_v1_lease_delete(request: Request, lease_ref: str):
|
|||||||
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_multi_controller.py
|
# venv/lib/python3.9/site-packages/nls_services_lease/test/test_lease_multi_controller.py
|
||||||
@app.delete('/leasing/v1/lessor/leases', description='release all leases')
|
@app.delete('/leasing/v1/lessor/leases', description='release all leases')
|
||||||
async def leasing_v1_lessor_lease_remove(request: Request):
|
async def leasing_v1_lessor_lease_remove(request: Request):
|
||||||
cur_time = datetime.utcnow()
|
cur_time = datetime.now(UTC)
|
||||||
|
|
||||||
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
jwt_decode_key = Instance.get_default_instance(db).get_jwt_decode_key()
|
||||||
|
|
||||||
|
51
app/orm.py
51
app/orm.py
@ -1,11 +1,17 @@
|
|||||||
|
import logging
|
||||||
from datetime import datetime, timedelta, timezone, UTC
|
from datetime import datetime, timedelta, timezone, UTC
|
||||||
|
from os import getenv as env
|
||||||
|
from os.path import join, dirname, isfile
|
||||||
|
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from sqlalchemy import Column, VARCHAR, CHAR, ForeignKey, DATETIME, update, and_, inspect, text
|
from jose import jwk
|
||||||
|
from jose.constants import ALGORITHMS
|
||||||
|
from sqlalchemy import Column, VARCHAR, CHAR, ForeignKey, DATETIME, update, and_, inspect, text, BLOB, INT, FLOAT
|
||||||
from sqlalchemy.engine import Engine
|
from sqlalchemy.engine import Engine
|
||||||
from sqlalchemy.orm import sessionmaker, declarative_base, Session, relationship
|
from sqlalchemy.orm import sessionmaker, declarative_base, Session, relationship
|
||||||
|
from sqlalchemy.schema import CreateTable
|
||||||
|
|
||||||
from util import NV
|
from util import NV, PrivateKey, PublicKey
|
||||||
|
|
||||||
logging.basicConfig()
|
logging.basicConfig()
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -28,7 +34,6 @@ class Site(Base):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_statement(engine: Engine):
|
def create_statement(engine: Engine):
|
||||||
from sqlalchemy.schema import CreateTable
|
|
||||||
return CreateTable(Site.__table__).compile(engine)
|
return CreateTable(Site.__table__).compile(engine)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -65,7 +70,6 @@ class Instance(Base):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_statement(engine: Engine):
|
def create_statement(engine: Engine):
|
||||||
from sqlalchemy.schema import CreateTable
|
|
||||||
return CreateTable(Instance.__table__).compile(engine)
|
return CreateTable(Instance.__table__).compile(engine)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -111,21 +115,18 @@ class Instance(Base):
|
|||||||
def get_client_token_expire_delta(self) -> "dateutil.relativedelta.relativedelta":
|
def get_client_token_expire_delta(self) -> "dateutil.relativedelta.relativedelta":
|
||||||
return relativedelta(seconds=self.client_token_expire_delta)
|
return relativedelta(seconds=self.client_token_expire_delta)
|
||||||
|
|
||||||
def __get_private_key(self) -> "RsaKey":
|
def __get_private_key(self) -> "PrivateKey":
|
||||||
return parse_key(self.private_key)
|
return PrivateKey(self.private_key)
|
||||||
|
|
||||||
def get_public_key(self) -> "RsaKey":
|
def get_public_key(self) -> "PublicKey":
|
||||||
return parse_key(self.public_key)
|
return PublicKey(self.public_key)
|
||||||
|
|
||||||
def get_jwt_encode_key(self) -> "jose.jkw":
|
def get_jwt_encode_key(self) -> "jose.jkw":
|
||||||
from jose import jwk
|
|
||||||
from jose.constants import ALGORITHMS
|
return jwk.construct(self.__get_private_key().pem().decode('utf-8'), algorithm=ALGORITHMS.RS256)
|
||||||
return jwk.construct(self.__get_private_key().export_key().decode('utf-8'), algorithm=ALGORITHMS.RS256)
|
|
||||||
|
|
||||||
def get_jwt_decode_key(self) -> "jose.jwt":
|
def get_jwt_decode_key(self) -> "jose.jwt":
|
||||||
from jose import jwk
|
return jwk.construct(self.get_public_key().pem().decode('utf-8'), algorithm=ALGORITHMS.RS256)
|
||||||
from jose.constants import ALGORITHMS
|
|
||||||
return jwk.construct(self.get_public_key().export_key().decode('utf-8'), algorithm=ALGORITHMS.RS256)
|
|
||||||
|
|
||||||
def get_private_key_str(self, encoding: str = 'utf-8') -> str:
|
def get_private_key_str(self, encoding: str = 'utf-8') -> str:
|
||||||
return self.private_key.decode(encoding)
|
return self.private_key.decode(encoding)
|
||||||
@ -162,7 +163,6 @@ class Origin(Base):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_statement(engine: Engine):
|
def create_statement(engine: Engine):
|
||||||
from sqlalchemy.schema import CreateTable
|
|
||||||
return CreateTable(Origin.__table__).compile(engine)
|
return CreateTable(Origin.__table__).compile(engine)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -241,7 +241,6 @@ class Lease(Base):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_statement(engine: Engine):
|
def create_statement(engine: Engine):
|
||||||
from sqlalchemy.schema import CreateTable
|
|
||||||
return CreateTable(Lease.__table__).compile(engine)
|
return CreateTable(Lease.__table__).compile(engine)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -336,9 +335,7 @@ class Lease(Base):
|
|||||||
|
|
||||||
|
|
||||||
def init_default_site(session: Session):
|
def init_default_site(session: Session):
|
||||||
from app.util import generate_key
|
private_key = PrivateKey.generate()
|
||||||
|
|
||||||
private_key = generate_key()
|
|
||||||
public_key = private_key.public_key()
|
public_key = private_key.public_key()
|
||||||
|
|
||||||
site = Site(
|
site = Site(
|
||||||
@ -351,8 +348,8 @@ def init_default_site(session: Session):
|
|||||||
instance = Instance(
|
instance = Instance(
|
||||||
instance_ref=Instance.DEFAULT_INSTANCE_REF,
|
instance_ref=Instance.DEFAULT_INSTANCE_REF,
|
||||||
site_key=site.site_key,
|
site_key=site.site_key,
|
||||||
private_key=private_key.export_key(),
|
private_key=private_key.pem(),
|
||||||
public_key=public_key.export_key(),
|
public_key=public_key.pem(),
|
||||||
)
|
)
|
||||||
session.add(instance)
|
session.add(instance)
|
||||||
session.commit()
|
session.commit()
|
||||||
@ -379,10 +376,6 @@ def init(engine: Engine):
|
|||||||
|
|
||||||
|
|
||||||
def migrate(engine: Engine):
|
def migrate(engine: Engine):
|
||||||
from os import getenv as env
|
|
||||||
from os.path import join, dirname, isfile
|
|
||||||
from util import load_key
|
|
||||||
|
|
||||||
db = inspect(engine)
|
db = inspect(engine)
|
||||||
|
|
||||||
# todo: add update guide to use 1.LATEST to 2.0
|
# todo: add update guide to use 1.LATEST to 2.0
|
||||||
@ -408,15 +401,15 @@ def migrate(engine: Engine):
|
|||||||
default_instance_private_key_path = str(join(dirname(__file__), 'cert/instance.private.pem'))
|
default_instance_private_key_path = str(join(dirname(__file__), 'cert/instance.private.pem'))
|
||||||
instance_private_key = env('INSTANCE_KEY_RSA', None)
|
instance_private_key = env('INSTANCE_KEY_RSA', None)
|
||||||
if instance_private_key is not None:
|
if instance_private_key is not None:
|
||||||
instance.private_key = load_key(str(instance_private_key))
|
instance.private_key = PrivateKey(instance_private_key.encode('utf-8'))
|
||||||
elif isfile(default_instance_private_key_path):
|
elif isfile(default_instance_private_key_path):
|
||||||
instance.private_key = load_key(default_instance_private_key_path)
|
instance.private_key = PrivateKey.from_file(default_instance_private_key_path)
|
||||||
default_instance_public_key_path = str(join(dirname(__file__), 'cert/instance.public.pem'))
|
default_instance_public_key_path = str(join(dirname(__file__), 'cert/instance.public.pem'))
|
||||||
instance_public_key = env('INSTANCE_KEY_PUB', None)
|
instance_public_key = env('INSTANCE_KEY_PUB', None)
|
||||||
if instance_public_key is not None:
|
if instance_public_key is not None:
|
||||||
instance.public_key = load_key(str(instance_public_key))
|
instance.public_key = PublicKey(instance_public_key.encode('utf-8'))
|
||||||
elif isfile(default_instance_public_key_path):
|
elif isfile(default_instance_public_key_path):
|
||||||
instance.public_key = load_key(default_instance_public_key_path)
|
instance.public_key = PublicKey.from_file(default_instance_public_key_path)
|
||||||
|
|
||||||
# TOKEN_EXPIRE_DELTA
|
# TOKEN_EXPIRE_DELTA
|
||||||
token_expire_delta = env('TOKEN_EXPIRE_DAYS', None)
|
token_expire_delta = env('TOKEN_EXPIRE_DAYS', None)
|
||||||
|
@ -2,7 +2,7 @@ from os import getenv as env
|
|||||||
from base64 import b64encode as b64enc
|
from base64 import b64encode as b64enc
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
from calendar import timegm
|
from calendar import timegm
|
||||||
from datetime import datetime
|
from datetime import datetime, UTC
|
||||||
from uuid import UUID, uuid4
|
from uuid import UUID, uuid4
|
||||||
|
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
@ -17,7 +17,7 @@ sys.path.append('../')
|
|||||||
sys.path.append('../app')
|
sys.path.append('../app')
|
||||||
|
|
||||||
from app import main
|
from app import main
|
||||||
from app.orm import init as db_init, migrate, Site, Instance
|
from orm import init as db_init, migrate, Site, Instance
|
||||||
|
|
||||||
|
|
||||||
ORIGIN_REF, ALLOTMENT_REF, SECRET = str(uuid4()), '20000000-0000-0000-0000-000000000001', 'HelloWorld'
|
ORIGIN_REF, ALLOTMENT_REF, SECRET = str(uuid4()), '20000000-0000-0000-0000-000000000001', 'HelloWorld'
|
||||||
|
Loading…
Reference in New Issue
Block a user