Compare commits

..

No commits in common. "e0736b619915802aa2463121b67ae7b96b9e42ef" and "024ca111a9239f574f290ca741d0c2e72aa0a224" have entirely different histories.

3 changed files with 7 additions and 49 deletions

View File

@ -7,31 +7,11 @@ Compatibility tested with official DLS 2.0.1.
This service can be used without internet connection. This service can be used without internet connection.
Only the clients need a connection to this service on configured port. Only the clients need a connection to this service on configured port.
**Official Links**
- https://git.collinwebdesigns.de/oscar.krause/fastapi-dls
- https://gitea.publichub.eu/oscar.krause/fastapi-dls
- Docker Image `collinwebdesigns/fastapi-dls:latest`
*All other repositories are forks!*
---
[[_TOC_]] [[_TOC_]]
# Setup (Service) # Setup (Service)
**System requirements**:
- 256mb ram
- 4gb hdd
Tested with Ubuntu 22.10 (from Proxmox templates), actually its consuming 100mb ram and 750mb hdd.
**Prepare your system**:
- Make sure your timezone is set correct on you fastapi-dls server and your client
## Docker ## Docker
Docker-Images are available here: Docker-Images are available here:

View File

@ -24,6 +24,7 @@ from starlette.templating import Jinja2Templates
from util import load_key, load_file from util import load_key, load_file
from orm import Origin, Lease, init as db_init, migrate from orm import Origin, Lease, init as db_init, migrate
logger = logging.getLogger()
load_dotenv('../version.env') load_dotenv('../version.env')
TZ = datetime.now().astimezone().tzinfo TZ = datetime.now().astimezone().tzinfo
@ -50,7 +51,6 @@ TOKEN_EXPIRE_DELTA = relativedelta(days=int(env('TOKEN_EXPIRE_DAYS', 1)), hours=
LEASE_EXPIRE_DELTA = relativedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0))) LEASE_EXPIRE_DELTA = relativedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0)))
LEASE_RENEWAL_PERIOD = float(env('LEASE_RENEWAL_PERIOD', 0.15)) 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)
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}']
jwt_encode_key = jwk.construct(INSTANCE_KEY_RSA.export_key().decode('utf-8'), algorithm=ALGORITHMS.RS256) jwt_encode_key = jwk.construct(INSTANCE_KEY_RSA.export_key().decode('utf-8'), algorithm=ALGORITHMS.RS256)
@ -65,8 +65,6 @@ app.add_middleware(
allow_headers=['*'], allow_headers=['*'],
) )
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG if DEBUG else logging.INFO) logger.setLevel(logging.DEBUG if DEBUG else logging.INFO)
@ -161,7 +159,7 @@ async def _origins_delete(request: Request):
@app.delete('/-/origins/{origin_ref}', summary='* Origins') @app.delete('/-/origins/{origin_ref}', summary='* Origins')
async def _origins_delete_origin_ref(request: Request, origin_ref: str): async def _origins_delete_origin_ref(request: Request, origin_ref: str):
if Origin.delete(db, [origin_ref]) == 1: if Origin.delete(db, origin_ref) == 1:
return Response(status_code=201) return Response(status_code=201)
return JSONr(status_code=404, content={'status': 404, 'detail': 'lease not found'}) return JSONr(status_code=404, content={'status': 404, 'detail': 'lease not found'})
@ -193,7 +191,7 @@ async def _lease_delete(request: Request, lease_ref: str):
@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.utcnow()
exp_time = cur_time + CLIENT_TOKEN_EXPIRE_DELTA exp_time = cur_time + relativedelta(years=12)
payload = { payload = {
"jti": str(uuid4()), "jti": str(uuid4()),
@ -530,18 +528,6 @@ async def leasing_v1_lessor_shutdown(request: Request):
return JSONr(response) return JSONr(response)
@app.on_event('startup')
async def app_on_startup():
logger.info(f'''
Using timezone: {str(TZ)}. Make sure this is correct and match your clients!
Your clients renew their license every {str(Lease.calculate_renewal(LEASE_RENEWAL_PERIOD, LEASE_RENEWAL_DELTA))}.
If the renewal fails, the license is {str(LEASE_RENEWAL_DELTA)} valid.
Your client-token file (.tok) is valid for {str(CLIENT_TOKEN_EXPIRE_DELTA)}.
''')
if __name__ == '__main__': if __name__ == '__main__':
import uvicorn import uvicorn

View File

@ -57,12 +57,12 @@ class Origin(Base):
session.close() session.close()
@staticmethod @staticmethod
def delete(engine: Engine, origin_refs: [str] = None) -> int: def delete(engine: Engine, origins: ["Origin"] = None) -> int:
session = sessionmaker(bind=engine)() session = sessionmaker(bind=engine)()
if origin_refs is None: if origins is None:
deletions = session.query(Origin).delete() deletions = session.query(Origin).delete()
else: else:
deletions = session.query(Origin).filter(Origin.origin_ref in origin_refs).delete() deletions = session.query(Origin).filter(Origin.origin_ref in origins).delete()
session.commit() session.commit()
session.close() session.close()
return deletions return deletions
@ -170,14 +170,6 @@ class Lease(Base):
renew = delta.total_seconds() * LEASE_RENEWAL_PERIOD renew = delta.total_seconds() * LEASE_RENEWAL_PERIOD
renew = datetime.timedelta(seconds=renew) renew = datetime.timedelta(seconds=renew)
expires = delta - renew # 19.2 expires = delta - renew # 19.2
import datetime
LEASE_RENEWAL_PERIOD=0.15 # 15%
delta = datetime.timedelta(days=90)
renew = delta.total_seconds() * LEASE_RENEWAL_PERIOD
renew = datetime.timedelta(seconds=renew)
expires = delta - renew # 76 days, 12:00:00 hours
""" """
renew = delta.total_seconds() * renewal_period renew = delta.total_seconds() * renewal_period
renew = timedelta(seconds=renew) renew = timedelta(seconds=renew)