Cross-platform desktop application for greenhouse
implementing apply config progress popup dialog
first working version of greenhouse-daemon that can host a tunnel
first draft of config generation logic


browse  log 



You can also use your local clone with git send-email.

#Greenhouse Desktop

screenshot of splash screen

This is the desktop application for the Greenhouse cloud service (in development).

greenhouse-desktop is a cross-platform fbs python/QT application with an accompanying daemon (background service) written in Go. The python app will display status to the user and allow them to configure their tunnels, while the daemon will manage the embedded threshold and caddy processes.

#getting started with development

# Download python 3.6 with security updates from https://www.python.org/downloads/release/python-3613/
cd Python-3.6.13/
make test
# note some tests will fail because of openssl being newer since python 3.6 is very old.  https://bugs.python.org/issue32947
# for now i ignored this 😬

sudo make install
python3.6 -m venv venv
source venv/bin/activate
pip install fbs
pip install PyQt5==5.9.2
fbs startproject
pip install qtwidgets pyqtspinner


This diagram was created with https://app.diagrams.net/. To edit it, download the diagram file and edit it with the https://app.diagrams.net/ web application, or you may run the application from source if you wish.

#ports used

greenhouse-daemon api: https://localhost:9572  -- certificate signed by daemon CA, the GUI does not validate the cert (it can't)

threshold admin api:   https://localhost:9573 -- certificate signed by daemon CA, uses mutual TLS with daemon
caddy admin api:       https://localhost:9574 -- certificate signed by daemon CA, uses mutual TLS with daemon
caddy http port:       https://localhost:9575 -- used by caddy for http -> https redirects 
caddy https port:      https://localhost:9576 -- certificate signed by Let's Encrypt CA, public internet TLS
caddy tls port:        https://localhost:9577 -- certificate signed by Let's Encrypt CA, public internet TLS

#TODO notes

  • add the "save configuration" button
  • delete all the state files and rebuild everything (threshold server, client, caddy w/ layer4 module) and get greenhouse running
  • NOTE: there appears to be a bug in the daemon where it sometimes returns null status data -- no idea why. restarting the daemon fixes it. error message in the GUI: TypeError: object of type 'NoneType' has no len() when it tries to use the authorized_domains list. Reproduce it with: curl -k | jq .