/bawwab

Easy access to web applications running on compute clusters

Primary LanguagePythonMIT LicenseMIT

bawwab

A web gateway to compute clusters, but really just a glorified SSH client.

(This software is probably not very useful to you. It is heavily branded and has lots of hard-coded assumptions.)

Depends on trash-cli, mashru3 and borg backup on the target.

Prerequisites

You’ll need some form of automated user management, which clumsy provides, a working installation of conductor, an OAuth2-capable sign-on (only KeyCloak is supported right now) and a recent OpenSSH (>= 7.0) [1]. You can use our setup as a reference.

A good method to deploy bawwab is using guix:

guix package -p /usr/local/profiles/bawwab -f contrib/bawwab.scm

Then use the systemd service file provided in contrib/bawwab.service to run it.

[1]asyncssh’s .terminate() does not have an effect on prior versions, see channel.py

Development

bawwab is a Python backend based on sanic and tortoise-orm.

To get started with the development you need all the prerequisites listed above. Additionally you must configure your local Guix to use the channel guix-zpid. Then you can set up a development environment using

guix shell -L contrib/guix -D bawwab nss-certs openssl
virtualenv --system-site-packages -p python3 sandbox
source sandbox/bin/activate
python setup.py develop

configure it using the example in contrib/config.py and run bawwab directly from that directory

# Only needed, if the realm is not configured system-wide
export KRB5_CONFIG=contrib/krb5.conf
export BAWWAB_SETTINGS=/path/to/config.py
sanic --debug bawwab.app:app

The backend will pick up changes automatically when in debug mode.

To ease development it is also possible to override the logged in user, removing the need for an OAuth server. You can enable it by adding the following lines to your config.py:

DEBUG = True
DEBUG_USER_OVERRIDE = {"sub":"173d4e4b-a862-4570-a3a9-87f4785ef4eb",
        "email_verified":True,
        "name":"Testuser",
        "preferred_username":"testuser",
        "given_name":"Testuser",
        "family_name":"Test",
        "email":"testuser@invalid"}