Generate new devices for each new /login

This commit is contained in:
Erik Johnston 2017-10-05 15:47:29 +01:00
parent 41e11dad5d
commit aa36166766
2 changed files with 19 additions and 5 deletions

View file

@ -86,6 +86,18 @@ func GenerateAccessToken() (string, error) {
return base64.RawURLEncoding.EncodeToString(b), nil
}
// GenerateDeviceID creates a new device id. Returns an error if failed to generate
// random bytes.
func GenerateDeviceID() (string, error) {
b := make([]byte, tokenByteLength)
_, err := rand.Read(b)
if err != nil {
return "", err
}
// url-safe no padding
return base64.RawURLEncoding.EncodeToString(b), nil
}
// extractAccessToken from a request, or return an error detailing what went wrong. The
// error message MUST be human-readable and comprehensible to the client.
func extractAccessToken(req *http.Request) (string, error) {

View file

@ -113,15 +113,17 @@ func Login(
token, err := auth.GenerateAccessToken()
if err != nil {
return util.JSONResponse{
Code: 500,
JSON: jsonerror.Unknown("Failed to generate access token"),
httputil.LogThenError(req, err)
}
deviceID, err := auth.GenerateDeviceID()
if err != nil {
httputil.LogThenError(req, err)
}
// TODO: Use the device ID in the request
dev, err := deviceDB.CreateDevice(
req.Context(), acc.Localpart, auth.UnknownDeviceID, token,
req.Context(), acc.Localpart, deviceID, token,
)
if err != nil {
return util.JSONResponse{