Angler is a Python/Javascript application I made for ICLT, to help them manage the school. It is opensource.
Angler is meant to be built and shipped using Docker, so it's super easy to spin up if you know how to work that stuff. And if you don't, this is a good opportunity to get into the goodness.
When running the container, 2 ports will need to be mapped: 80 for serving the hook, and 8080 for serving the rod. A good way to build and run the container would thus be:
$ cd $YOUR_ANGLER_PATH
$ docker build -t angler .
...
$ docker run -p 80:80 -p 8080:8080 -v /opt/data:/opt/data -d angler
That also mounts /opt/data to be used as a directory for the SQLite datafile.
After first install, the system will have no users in the database, so it will
hopefully be impossible to log in and add any staff members using hook. The
first user will therefore have to be added manually using some kind of an
sqlite client. sqlite3
on Linux works fine. The following command:
sqlite3 /opt/data/angler.db "insert into staff(email, password) values('[email]', '[password]')"
Gets the job done.
Note that Angler uses bcrypt with 12 rounds of hashing to encrypt user passwords. This means that the password value will need to be encrypted before being inserted into the database, otherwise rod will not be able to match it during authentication. To encrypt your first user's password, use something like this.