* Bootstrap - Login via a user so that the user object gets created - Run the following (replace nicocustomer with the username) #+BEGIN_SRC sh python manage.py bootstrap-user --username nicocustomer #+END_SRC * Testing / CLI Access Access via the commandline (CLI) can be done using curl or httpie. In our examples we will use httpie. ** Checkout out the API #+BEGIN_SRC sh http localhost:8000/api/ #+END_SRC ** Authenticate via ldap user in password store #+BEGIN_SRC sh http --auth nicocustomer:$(pass ldap/nicocustomer) localhost:8000/api/ #+END_SRC * URLs - api/ - the rest API * Models ** Bill Bills are summarising usage in a specific timeframe. Bills usually spawn one month. ** BillRecord Bill records are used to model the usage of one order during the timeframe. ** Order Orders register the intent of a user to buy something. They might refer to a product. (???) Order register the one time price and the recurring price. These fields should be treated as immutable. If they need to be modified, a new order that replaces the current order should be created. * Products ** VPN *** How to add a new VPN Host **** Install wireguard to the host **** Install uncloud to the host **** Add `python manage.py vpn --hostname fqdn-of-this-host` to the crontab **** Use the CLI to configure one or more VPN Networks for this host *** Example of adding a VPN host at ungleich **** Create a new dual stack alpine VM **** Add it to DNS as vpn-XXX.ungleich.ch **** Route a /40 network to its IPv6 address **** Install wireguard on it **** TODO Enable wireguard on boot **** TODO Create a new VPNPool on uncloud with ***** the network address (selecting from our existing pool) ***** the network size (/...) ***** the vpn host that provides the network (selecting the created VM) ***** the wireguard private key of the vpn host (using wg genkey) ***** http command ``` http -a nicoschottelius:$(pass ungleich.ch/nico.schottelius@ungleich.ch) http://localhost:8000/admin/vpnpool/ network=2a0a:e5c1:200:: \ network_size=40 subnetwork_size=48 vpn_hostname=vpn-2a0ae5c1200.ungleich.ch wireguard_private_key=... ``` *** Example http commands / REST calls **** creating a new vpn pool http -a nicoschottelius:$(pass ungleich.ch/nico.schottelius@ungleich.ch) http://localhost:8000/admin/vpnpool/ network_size=40 subnetwork_size=48 network=2a0a:e5c1:200:: vpn_hostname=vpn-2a0ae5c1200.ungleich.ch wireguard_private_key=$(wg genkey) **** Creating a new vpn network