require tokens to be unique

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>
create a generic interface for token generation

In the future, we may use a different method to generator tokens.  However,
the interface given here should be sufficient to encapsulate other methods.
The only app-level change that should be required is to change the import
statement to pull in the desired method.

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>
move the API error handler to a more appropriate file

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>
create a clean baseline for the web API

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>
only store hashed passwords in the database

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>
require roles for certain web API calls

Signed-off-by: Tim Henigan <tim.henigan@gmail.com>