diff --git a/README.md b/README.md index 28a7bdc..bb590f0 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,31 @@ Compatibility tested with official DLS 2.0.1. This service can be used without internet connection. 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_]] - # 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-Images are available here: diff --git a/app/main.py b/app/main.py index d4bd819..9218695 100644 --- a/app/main.py +++ b/app/main.py @@ -24,7 +24,6 @@ from starlette.templating import Jinja2Templates from util import load_key, load_file from orm import Origin, Lease, init as db_init, migrate -logger = logging.getLogger() load_dotenv('../version.env') TZ = datetime.now().astimezone().tzinfo @@ -51,6 +50,7 @@ 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_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))) +CLIENT_TOKEN_EXPIRE_DELTA = relativedelta(years=12) 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) @@ -65,6 +65,8 @@ app.add_middleware( allow_headers=['*'], ) +logging.basicConfig() +logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG if DEBUG else logging.INFO) @@ -191,7 +193,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') async def _client_token(): cur_time = datetime.utcnow() - exp_time = cur_time + relativedelta(years=12) + exp_time = cur_time + CLIENT_TOKEN_EXPIRE_DELTA payload = { "jti": str(uuid4()), @@ -528,6 +530,18 @@ async def leasing_v1_lessor_shutdown(request: Request): 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__': import uvicorn diff --git a/app/orm.py b/app/orm.py index ee4e084..d3c795e 100644 --- a/app/orm.py +++ b/app/orm.py @@ -57,12 +57,12 @@ class Origin(Base): session.close() @staticmethod - def delete(engine: Engine, origins: ["Origin"] = None) -> int: + def delete(engine: Engine, origin_refs: [str] = None) -> int: session = sessionmaker(bind=engine)() - if origins is None: + if origin_refs is None: deletions = session.query(Origin).delete() else: - deletions = session.query(Origin).filter(Origin.origin_ref in origins).delete() + deletions = session.query(Origin).filter(Origin.origin_ref in origin_refs).delete() session.commit() session.close() return deletions @@ -170,6 +170,14 @@ class Lease(Base): renew = delta.total_seconds() * LEASE_RENEWAL_PERIOD renew = datetime.timedelta(seconds=renew) 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 = timedelta(seconds=renew)