Tailfin Logo

Tailfin

---

A self-hosted digital flight logbook

## Table of Contents + [About](#about) + [Getting Started](#getting_started) + [Configuration](#configuration) + [Usage](#usage) + [Roadmap](#roadmap) ## About Tailfin is a digital flight logbook designed to be hosted on a personal server, computer, or cloud solution. This is the API segment and can be run independently. It is meant to be a base for future applications, both web and mobile. I created this because I was disappointed with the options available for digital logbooks. The one provided by ForeFlight is likely most commonly used, but my proclivity towards self-hosting drove me to seek out another solution. Since I could not find any ready-made self-hosted logbooks, I decided to make my own. ## Getting Started ### Prerequisites - python 3.11+ - mongodb 7.0.4 ### Installation 1. Clone the repo ``` $ git clone https://git.github.com/azpsen/tailfin-api.git $ cd tailfin-api ``` 2. (Optional) Create and activate virtual environment ``` $ python -m venv tailfin-env $ source tailfin-env/bin/activate ``` 3. Install python requirements ``` $ pip install -r requirements.txt ``` 4. Configure the database connection The default configuration assumes a running instance of MongoDB on `localhost:27017`, secured with username and password `tailfin-api` and `tailfin-api-password`. This can (and should!) be changed by modifying `.env`, as detailed in [Configuration](#configuration). Note that the MongoDB instance must be set up with proper authentication before starting the server. I hope to eventually release a docker image that will simplify this whole process. 5. Start the server ``` $ python app.py ``` ## Configuration To configure Tailfin, modify the `.env` file. Some of these options should be changed before running the server. All available options are detailed below: `DB_URI`: Address of MongoDB instance. Default: `localhost`
`DB_PORT`: Port of MongoDB instance. Default: `27017`
`DB_NAME`: Name of the database to be used by Tailfin. Default: `tailfin` `DB_USER`: Username for MongoDB authentication. Default: `tailfin-api`
`DB_PWD`: Password for MongoDB authentication. Default: `tailfin-api-password` `REFRESH_TOKEN_EXPIRE_MINUTES`: Duration in minutes to keep refresh token active before invalidating it. Default: `10080` (7 days)
`ACCESS_TOKEN_EXPIRE_MINUTES`: Duration in minutes to keep access token active before invalidating it. Default: `30` `JWT_ALGORITHM`: Encryption algorithm to use for access and refresh tokens. Default: `HS256`
`JWT_SECRET_KEY`: Secret key used to encrypt and decrypt access tokens. Default: `please-change-me`
`JWT_REFRESH_SECRET_KEY`: Secret key used to encrypt and decrypt refresh tokens. Default: `change-me-i-beg-of-you` `TAILFIN_ADMIN_USERNAME`: Username of the default admin user that is created on startup if no admin users exist. Default: `admin`
`TAILFIN_ADMIN_PASSWORD`: Password of the default admin user that is created on startup if no admin users exist. Default: `change-me-now` `TAILFIN_PORT`: Port to run the local Tailfin API server on. Default: `8081` ## Usage Once the server is running, full API documentation is available at `localhost:8081/docs` ## Roadmap - [x] Multi-user authentication - [x] Basic flight logging CRUD endpoints - [x] Aircraft management and association with flight logs - [x] Attach photos to log entries - [ ] GPS track recording - [ ] Implement JWT refresh tokens - [ ] PDF Export - [ ] Import from other log applications - [ ] Integrate database of airports and waypoints that can be queried to find nearest