#!/usr/bin/env python3 """ Main executable of `kiwi-vpn-api`. Creates the main `FastAPI` app, mounts endpoints and connects to the configured database. If run directly, uses `uvicorn` to run the app. """ import uvicorn from fastapi import FastAPI from .config import Config, Settings from .db import Connection # from .db.schemata import User from .db_new import Capability from .db_new import Connection as Connection_new from .db_new import Device, User from .routers import main_router settings = Settings.get() app = FastAPI( title="kiwi-vpn API", description="This API enables the `kiwi-vpn` service.", contact={ "name": "Jörn-Michael Miehe", "email": "40151420+ldericher@users.noreply.github.com", }, license_info={ "name": "MIT License", "url": "https://opensource.org/licenses/mit-license.php", }, openapi_url=settings.openapi_url, docs_url=settings.docs_url if not settings.production_mode else None, redoc_url=settings.redoc_url if not settings.production_mode else None, ) app.include_router(main_router) @app.on_event("startup") async def on_startup() -> None: # check if configured if (current_config := await Config.load()) is not None: # connect to database Connection.connect(await current_config.db.db_engine) # # some testing # with Connection.use() as db: # print(User.from_db(db, "admin")) # print(User.from_db(db, "nonexistent")) Connection_new.connect("sqlite:///tmp/v2.db") User.create( name="Uwe", password_clear="ulf", email="uwe@feh.de", ) print(User.get(name="Uwe")) print(User.authenticate("Uwe", "uwe")) uwe = User.authenticate("Uwe", "ulf") uwe.set_capabilities([Capability.admin]) uwe.update() print(uwe.get_capabilities()) uwe.set_capabilities([]) uwe.update() print(uwe.get_capabilities()) with Connection_new.session as db: db.add(uwe) print(uwe.devices) ipad = Device.create( owner_name="Uwe", name="iPad", type="tablet", ) # ipad = Device. print(ipad) def main() -> None: uvicorn.run( "kiwi_vpn_api.main:app", host="0.0.0.0", port=8000, reload=True, ) if __name__ == "__main__": main()