External Integrations
This page documents Pushpaka's relationship with external drone software platforms. These codebases are no longer vendored in this repo — see upstream links below.
ArduPilot
What it is: Open-source autopilot firmware for drones, planes, rovers, and submarines. Used to fly the physical drone hardware that Pushpaka's UTM services need to interact with.
Upstream repo: https://github.com/ArduPilot/ardupilot
Relationship to Pushpaka: - Was included as a git submodule for local development reference - No Pushpaka-specific patches were applied - Removed from this repo in Phase 2 of the rebaseline (2026); no local changes were lost
Relevant integration point: ArduPilot drones communicate via MAVLink. Pushpaka's planned MAVLink bridge (Phase 4b) will sit between ArduPilot SITL and the registry/flight-authorisation REST APIs, allowing firmware to remain unmodified.
Development environment:
A .devcontainer/ setup provides the full dev stack. The Vagrantfile is retained for reference but superseded by the devcontainer.
QGroundControl
What it is: Open-source ground control station (GCS) for MAVLink-based drones. Provides the operator-facing UI for flight planning, monitoring, and control.
Upstream repo: https://github.com/mavlink/qgroundcontrol
Relationship to Pushpaka: QGroundControl was forked and extended with Keycloak-based user authentication, allowing the GCS to authenticate operators against the Pushpaka identity provider before flight operations.
Pushpaka-specific work: Keycloak OAuth integration
Commit: Add UserAuthentication via Keycloak using Qt OAuth (2024-07-19, Sayandeep Purkayasth)
Files added/modified:
| File | Purpose |
|---|---|
src/UserAuthentication.h |
Qt QObject exposing isAuthenticated property and authorise() slot |
src/UserAuthentication.cpp |
OAuth2 Authorization Code Flow via QOAuth2AuthorizationCodeFlow; connects to Keycloak at http://localhost:8080/realms/digitalsky |
src/ui/toolbar/UserAuthentication.qml |
QML element placeholder (stub, imports UserAuthentication) |
src/ui/toolbar/MainStatusIndicator.qml |
UI toolbar hook for auth status |
src/QGCApplication.h, src/main.cc, src/api/QGCCorePlugin.cc |
Integration points wiring UserAuthentication into the QGC application lifecycle |
src/CMakeLists.txt, qgroundcontrol.pro, qgroundcontrol.qrc |
Build system additions |
Key implementation details:
- Uses Qt's QOAuth2AuthorizationCodeFlow (Authorization Code Flow)
- Keycloak realm: pushpaka
- Client ID: backend
- Keycloak URL: http://localhost:18080
- Redirect: local HTTP reply handler on port 8000
- isAuthenticated property bindable from QML for UI reactivity
- Browser-based auth flow via QDesktopServices::openUrl
Status: In progress. Proof-of-concept OAuth integration exists. Full wiring to registry and flight-auth APIs is active work (see #67).
To work on this:
1. Fork https://github.com/mavlink/qgroundcontrol
2. Re-apply the changes above against a current upstream commit
3. Start the devcontainer stack (docker compose -f .devcontainer/docker-compose.yml up)
4. Keycloak is available at http://localhost:18080, realm pushpaka, client backend