mirror of
https://git.collinwebdesigns.de/oscar.krause/fastapi-dls.git
synced 2025-08-27 15:07:00 +08:00
Compare commits
No commits in common. "f20232d425943a475445bd989aec0029e5b580ab" and "7c6aea5da7f8b6a728ca483039c0b4076ae0ecfb" have entirely different histories.
f20232d425
...
7c6aea5da7
61
app/main.py
61
app/main.py
@ -18,7 +18,8 @@ from jose.constants import ALGORITHMS
|
|||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
from starlette.middleware.cors import CORSMiddleware
|
from starlette.middleware.cors import CORSMiddleware
|
||||||
from starlette.responses import StreamingResponse, JSONResponse as JSONr, HTMLResponse as HTMLr, Response, RedirectResponse
|
from starlette.responses import StreamingResponse, JSONResponse as JSONr, HTMLResponse as HTMLr, Response, \
|
||||||
|
RedirectResponse
|
||||||
|
|
||||||
from orm import Origin, Lease, init as db_init, migrate
|
from orm import Origin, Lease, init as db_init, migrate
|
||||||
from util import PrivateKey, PublicKey, load_file, Cert
|
from util import PrivateKey, PublicKey, load_file, Cert
|
||||||
@ -50,7 +51,6 @@ LEASE_RENEWAL_PERIOD = float(env('LEASE_RENEWAL_PERIOD', 0.15))
|
|||||||
LEASE_RENEWAL_DELTA = timedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0)))
|
LEASE_RENEWAL_DELTA = timedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0)))
|
||||||
CLIENT_TOKEN_EXPIRE_DELTA = relativedelta(years=12)
|
CLIENT_TOKEN_EXPIRE_DELTA = relativedelta(years=12)
|
||||||
CORS_ORIGINS = str(env('CORS_ORIGINS', '')).split(',') if (env('CORS_ORIGINS')) else [f'https://{DLS_URL}']
|
CORS_ORIGINS = str(env('CORS_ORIGINS', '')).split(',') if (env('CORS_ORIGINS')) else [f'https://{DLS_URL}']
|
||||||
DT_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
|
|
||||||
|
|
||||||
jwt_encode_key = jwk.construct(INSTANCE_KEY_RSA.pem(), algorithm=ALGORITHMS.RS256)
|
jwt_encode_key = jwk.construct(INSTANCE_KEY_RSA.pem(), algorithm=ALGORITHMS.RS256)
|
||||||
jwt_decode_key = jwk.construct(INSTANCE_KEY_PUB.pem(), algorithm=ALGORITHMS.RS256)
|
jwt_decode_key = jwk.construct(INSTANCE_KEY_PUB.pem(), algorithm=ALGORITHMS.RS256)
|
||||||
@ -249,7 +249,6 @@ async def _client_token():
|
|||||||
"iat": timegm(cur_time.timetuple()),
|
"iat": timegm(cur_time.timetuple()),
|
||||||
"nbf": timegm(cur_time.timetuple()),
|
"nbf": timegm(cur_time.timetuple()),
|
||||||
"exp": timegm(exp_time.timetuple()),
|
"exp": timegm(exp_time.timetuple()),
|
||||||
"protocol_version": "2.0",
|
|
||||||
"update_mode": "ABSOLUTE",
|
"update_mode": "ABSOLUTE",
|
||||||
"scope_ref_list": [ALLOTMENT_REF],
|
"scope_ref_list": [ALLOTMENT_REF],
|
||||||
"fulfillment_class_ref_list": [],
|
"fulfillment_class_ref_list": [],
|
||||||
@ -300,19 +299,14 @@ async def auth_v1_origin(request: Request):
|
|||||||
|
|
||||||
Origin.create_or_update(db, data)
|
Origin.create_or_update(db, data)
|
||||||
|
|
||||||
environment = {
|
|
||||||
'raw_env': j.get('environment')
|
|
||||||
}
|
|
||||||
environment.update(j.get('environment'))
|
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
"origin_ref": origin_ref,
|
"origin_ref": origin_ref,
|
||||||
"environment": environment,
|
"environment": j.get('environment'),
|
||||||
"svc_port_set_list": None,
|
"svc_port_set_list": None,
|
||||||
"node_url_list": None,
|
"node_url_list": None,
|
||||||
"node_query_order": None,
|
"node_query_order": None,
|
||||||
"prompts": None,
|
"prompts": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT)
|
"sync_timestamp": cur_time.isoformat()
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSONr(response)
|
return JSONr(response)
|
||||||
@ -338,7 +332,7 @@ async def auth_v1_origin_update(request: Request):
|
|||||||
response = {
|
response = {
|
||||||
"environment": j.get('environment'),
|
"environment": j.get('environment'),
|
||||||
"prompts": None,
|
"prompts": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT)
|
"sync_timestamp": cur_time.isoformat()
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSONr(response)
|
return JSONr(response)
|
||||||
@ -369,7 +363,7 @@ async def auth_v1_code(request: Request):
|
|||||||
|
|
||||||
response = {
|
response = {
|
||||||
"auth_code": auth_code,
|
"auth_code": auth_code,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
"prompts": None
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,10 +405,9 @@ async def auth_v1_token(request: Request):
|
|||||||
auth_token = jwt.encode(new_payload, key=jwt_encode_key, headers={'kid': payload.get('kid')}, algorithm=ALGORITHMS.RS256)
|
auth_token = jwt.encode(new_payload, key=jwt_encode_key, headers={'kid': payload.get('kid')}, algorithm=ALGORITHMS.RS256)
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
"expires": access_expires_on.strftime(DT_FORMAT),
|
"expires": access_expires_on.isoformat(),
|
||||||
"auth_token": auth_token,
|
"auth_token": auth_token,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSONr(response)
|
return JSONr(response)
|
||||||
@ -668,9 +661,6 @@ async def leasing_v1_config_token(request: Request):
|
|||||||
async def leasing_v1_lessor(request: Request):
|
async def leasing_v1_lessor(request: Request):
|
||||||
j, token, cur_time = json_loads((await request.body()).decode('utf-8')), __get_token(request), datetime.now(UTC)
|
j, token, cur_time = json_loads((await request.body()).decode('utf-8')), __get_token(request), datetime.now(UTC)
|
||||||
|
|
||||||
logger.debug(j)
|
|
||||||
logger.debug(request.headers)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
token = __get_token(request)
|
token = __get_token(request)
|
||||||
except JWTError:
|
except JWTError:
|
||||||
@ -681,7 +671,6 @@ async def leasing_v1_lessor(request: Request):
|
|||||||
logger.info(f'> [ create ]: {origin_ref}: create leases for scope_ref_list {scope_ref_list}')
|
logger.info(f'> [ create ]: {origin_ref}: create leases for scope_ref_list {scope_ref_list}')
|
||||||
|
|
||||||
lease_result_list = []
|
lease_result_list = []
|
||||||
# todo: for lease_proposal in lease_proposal_list
|
|
||||||
for scope_ref in scope_ref_list:
|
for scope_ref in scope_ref_list:
|
||||||
# if scope_ref not in [ALLOTMENT_REF]:
|
# if scope_ref not in [ALLOTMENT_REF]:
|
||||||
# return JSONr(status_code=500, detail=f'no service instances found for scopes: ["{scope_ref}"]')
|
# return JSONr(status_code=500, detail=f'no service instances found for scopes: ["{scope_ref}"]')
|
||||||
@ -689,20 +678,15 @@ async def leasing_v1_lessor(request: Request):
|
|||||||
lease_ref = str(uuid4())
|
lease_ref = str(uuid4())
|
||||||
expires = cur_time + LEASE_EXPIRE_DELTA
|
expires = cur_time + LEASE_EXPIRE_DELTA
|
||||||
lease_result_list.append({
|
lease_result_list.append({
|
||||||
"ordinal": None,
|
"ordinal": 0,
|
||||||
"error": None,
|
|
||||||
# https://docs.nvidia.com/license-system/latest/nvidia-license-system-user-guide/index.html
|
# https://docs.nvidia.com/license-system/latest/nvidia-license-system-user-guide/index.html
|
||||||
"lease": {
|
"lease": {
|
||||||
"ref": lease_ref,
|
"ref": lease_ref,
|
||||||
"created": cur_time.strftime(DT_FORMAT),
|
"created": cur_time.isoformat(),
|
||||||
"expires": expires.strftime(DT_FORMAT),
|
"expires": expires.isoformat(),
|
||||||
"recommended_lease_renewal": LEASE_RENEWAL_PERIOD,
|
"recommended_lease_renewal": LEASE_RENEWAL_PERIOD,
|
||||||
"offline_lease": "true",
|
"offline_lease": "true",
|
||||||
"license_type": "CONCURRENT_COUNTED_SINGLE",
|
"license_type": "CONCURRENT_COUNTED_SINGLE"
|
||||||
"lease_intent_id": None,
|
|
||||||
"metadata": None,
|
|
||||||
"feature_name": "GRID-Virtual-WS", # todo
|
|
||||||
"product_name": "NVIDIA RTX Virtual Workstation", # todo
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -710,16 +694,13 @@ async def leasing_v1_lessor(request: Request):
|
|||||||
Lease.create_or_update(db, data)
|
Lease.create_or_update(db, data)
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
"client_challenge": None,
|
|
||||||
"lease_result_list": lease_result_list,
|
"lease_result_list": lease_result_list,
|
||||||
"result_code": None,
|
"result_code": "SUCCESS",
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
"prompts": None
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.debug(response)
|
return JSONr(response)
|
||||||
|
|
||||||
return JSONr(response, headers={'X-NLS-Signature': '?'})
|
|
||||||
|
|
||||||
|
|
||||||
# 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
|
||||||
@ -735,7 +716,7 @@ async def leasing_v1_lessor_lease(request: Request):
|
|||||||
|
|
||||||
response = {
|
response = {
|
||||||
"active_lease_list": active_lease_list,
|
"active_lease_list": active_lease_list,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
"prompts": None
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -758,11 +739,11 @@ async def leasing_v1_lease_renew(request: Request, lease_ref: str):
|
|||||||
expires = cur_time + LEASE_EXPIRE_DELTA
|
expires = cur_time + LEASE_EXPIRE_DELTA
|
||||||
response = {
|
response = {
|
||||||
"lease_ref": lease_ref,
|
"lease_ref": lease_ref,
|
||||||
"expires": expires.strftime(DT_FORMAT),
|
"expires": expires.isoformat(),
|
||||||
"recommended_lease_renewal": LEASE_RENEWAL_PERIOD,
|
"recommended_lease_renewal": LEASE_RENEWAL_PERIOD,
|
||||||
"offline_lease": True,
|
"offline_lease": True,
|
||||||
"prompts": None,
|
"prompts": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
}
|
}
|
||||||
|
|
||||||
Lease.renew(db, entity, expires, cur_time)
|
Lease.renew(db, entity, expires, cur_time)
|
||||||
@ -790,7 +771,7 @@ async def leasing_v1_lease_delete(request: Request, lease_ref: str):
|
|||||||
response = {
|
response = {
|
||||||
"lease_ref": lease_ref,
|
"lease_ref": lease_ref,
|
||||||
"prompts": None,
|
"prompts": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
}
|
}
|
||||||
|
|
||||||
return JSONr(response)
|
return JSONr(response)
|
||||||
@ -810,7 +791,7 @@ async def leasing_v1_lessor_lease_remove(request: Request):
|
|||||||
response = {
|
response = {
|
||||||
"released_lease_list": released_lease_list,
|
"released_lease_list": released_lease_list,
|
||||||
"release_failure_list": None,
|
"release_failure_list": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
"prompts": None
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -832,7 +813,7 @@ async def leasing_v1_lessor_shutdown(request: Request):
|
|||||||
response = {
|
response = {
|
||||||
"released_lease_list": released_lease_list,
|
"released_lease_list": released_lease_list,
|
||||||
"release_failure_list": None,
|
"release_failure_list": None,
|
||||||
"sync_timestamp": cur_time.strftime(DT_FORMAT),
|
"sync_timestamp": cur_time.isoformat(),
|
||||||
"prompts": None
|
"prompts": None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user