Skip to content

Repository files navigation

flossware-tftp-os

Desktop, mobile, and web clients for TFTP-based firmware provisioning.

Overview

flossware-tftp-os is the application layer for tftp-os, providing user-facing frontends for managing TFTP-based firmware provisioning. tftp-os is the reusable library; this repo contains the clients that consume it.

Frontends

Each frontend is its own installable package with independent dependencies.

Frontend Directory Package Technology Status
REST API / Web flossware-tftp-os-web/ flossware-tftp-os-web Python FastAPI Implemented
Terminal UI flossware-tftp-os-tui/ flossware-tftp-os-tui Python curses Implemented
Desktop GUI flossware-tftp-os-gui/ flossware-tftp-os-gui Python tkinter Implemented
Java TUI flossware-tftp-os-java/ Maven Java Lanterna Implemented
Java Swing GUI flossware-tftp-os-swing/ Maven Java Swing Implemented
Android flossware-tftp-os-android/ Gradle Kotlin Material 3 Implemented
iOS flossware-tftp-os-ios/ Swift Package Swift SwiftUI Implemented

Python frontends (use library directly)

The Python frontends import tftpos directly and use the library API:

pip install tftpos

# Install just the frontend you need
pip install -e flossware-tftp-os-tui/    # terminal UI
pip install -e flossware-tftp-os-gui/    # desktop GUI
pip install -e flossware-tftp-os-web/    # REST API + web

REST API (backbone for non-Python clients)

The web frontend serves a FastAPI REST API that Java, Android, and iOS clients connect to:

# Start the REST API server
flossware-tftp-os-web --config /etc/tftpos/tftpos.toml --hosts /etc/tftpos/hosts.toml

# API available at http://localhost:8080/api/v1/
# Swagger docs at http://localhost:8080/docs

Java frontends

cd flossware-tftp-os-java && mvn package    # Lanterna TUI
cd flossware-tftp-os-swing && mvn package   # Swing GUI

java -jar target/flossware-tftp-os-java-0.1.0.jar --api-url http://localhost:8080
java -jar target/flossware-tftp-os-swing-0.1.0.jar --api-url http://localhost:8080

Mobile

  • Android: Open flossware-tftp-os-android/ in Android Studio, configure API URL in Settings
  • iOS: Open flossware-tftp-os-ios/Package.swift in Xcode, configure API URL in Settings

Architecture

┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│ Python TUI  │  │ Python GUI  │  │   REST API  │
│  (curses)   │  │  (tkinter)  │  │  (FastAPI)  │
└──────┬──────┘  └──────┬──────┘  └──────┬──────┘
       │                │                │
       └────────────────┼────────────────┘
                        │  tftpos library (direct import)
                        v
                 ┌─────────────┐
                 │   tftp-os   │
                 │  (library)  │
                 └─────────────┘
                        ^
                        │  REST API (HTTP)
       ┌────────────────┼────────────────┐
       │                │                │
┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐
│  Java TUI   │  │ Java Swing  │  │   Mobile    │
│ (Lanterna)  │  │   (Swing)   │  │(Android/iOS)│
└─────────────┘  └─────────────┘  └─────────────┘

Building your own

tftp-os is designed as a reusable library. You can build your own application on top of it without using this repo at all:

from tftpos.config import load_config, load_hosts
from tftpos.engine import FirmwareEngine
from tftpos.matcher import HostMatcher
from tftpos.registry import PluginRegistry

config = load_config(Path("/etc/tftpos/tftpos.toml"))
rules = load_hosts(Path("/etc/tftpos/hosts.toml"))
registry = PluginRegistry()
matcher = HostMatcher(rules)
engine = FirmwareEngine(registry, matcher, config)

firmware_path = engine.serve(mac="aa:bb:cc:dd:ee:ff")

Development

git clone https://github.com/FlossWare/flossware-tftp-os.git
cd flossware-tftp-os

# Python frontends (dev mode)
pip install -e flossware-tftp-os-tui/
pip install -e flossware-tftp-os-web/
pip install -e flossware-tftp-os-gui/

# Java frontends
cd flossware-tftp-os-java && mvn package
cd flossware-tftp-os-swing && mvn package

License

GPL-3.0-or-later

About

FlossWare tftp-os — desktop, mobile, and web clients for TFTP-based firmware provisioning

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages