DEV Community

Qais Patankar
Qais Patankar

Posted on

The Marauder's App

My Final Project

Find free spaces in university labs:

  • find out if a machine is free, occupied, or turned off
  • find out how long any occupied machine has been logged in for (in case someone forgot to log off)
  • find your friends! (so you don't need to study alone... or so you can study alone)

Killed by covid-19. Because now nobody is on-site.

Demo Link

Link to Code

GitHub logo compsoc-edinburgh / mapp

πŸ—ΊοΈπŸ“‘πŸ’ƒ The Marauders App helps you find rooms with free machines in university labs and helps you find your friends. It does this by SSHing into every machine and dialling home.

How I built it (what's the stack? did I run into issues or discover something new along the way?)

Frontend uses:

  • Bootstrap 4
  • JavaScript (and unfortunately, jQuery)

Backend uses:

  • Python / Flask
  • Redis
  • Go (for the SSH bot, that fingers every machine)
  • Docker

Some tricky things include working around:

  • uni breaking the finger command
  • a bug where some users will still have processes running after they log off, making it harder to determine if someone is logged on / how long they have been logged on for

I also integrated with the university's authentication system, so I built a library called 'gosign' to make it easier for others to integrate CoSign authentication into their own systems.

GitHub logo qaisjp / gosign

CoSign interface written in Go

gosign: CoSign library for Go Go Report Card GoDoc

gosign is an experimental library that provides an interface to a CoSign daemon. It works well, but the API might change in the future.

CoSign is a "secure single sign-on web authentication system".

This only maintains a living connection and can handle the CHECK command (this project was created for a "CoSign filter"). There are no plans to support further protocol commands. This library is only built to support CoSign protocol version 2 (in use as of Cosign v2.x). Contributions are welcome.


Creating a CoSign client

client, err := gosign.Dial(&gosign.Config{
  Address: ""
  Service: ""
  TLSConfig: &tls.Config{
    ServerName:         ""
    Certificates:       []

Top comments (0)