# XIVLauncher Remote OTP A lightweight web application running in a minimal Docker container to automatically inject OTP codes into remote XIVLauncher instances. ## How it works XIVLauncher can expose an internal OTP server that listens for incoming HTTP requests containing your TOTP code. This application acts as a central manager. You can add the IP address, Port (default 4646), and your OTP secret. The application will securely store the secret and continuously poll your remote XIVLauncher instances. When the instance starts and the port becomes available, the application automatically generates your current OTP and injects it. ## Features - **Password Protected**: The entire web interface is protected by basic authentication. - **Secure Storage**: OTP Secrets are stored in a local SQLite database encrypted with a Fernet key (`ENCRYPTION_KEY`). - **Minimal Footprint**: Built using Python FastAPI, using only the necessary dependencies, and runs in a lightweight container. - **Background Polling**: Checks instances continuously without blocking. ## Setup & Running 1. Clone or copy this directory. 2. Edit `docker-compose.yml`: - Change `WEB_PASSWORD` to your desired password for the web interface (the username can be anything, e.g., `admin`). - Change `ENCRYPTION_KEY` to a securely generated Fernet key. *You can generate one by running: `python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"`* 3. Start the container: ```bash docker-compose up -d ``` 4. Access the web interface at `http://localhost:8080`. 5. Login using any username and your `WEB_PASSWORD`. ## Adding Instances - **Name**: A friendly name (e.g., "Steam Deck"). - **IP Address**: The local IP address of your XIVLauncher instance. - **Port**: Default is 4646. - **OTP Secret**: Your base32 OTP secret or an `otpauth://` URL. ## Important Note If you change your `ENCRYPTION_KEY`, the application will no longer be able to decrypt your previously saved OTP secrets. Ensure you backup your key if you intend to keep your configuration across deployments.