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 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 // extractAccessToken from a request, or return an error detailing what went wrong. The
// error message MUST be human-readable and comprehensible to the client. // error message MUST be human-readable and comprehensible to the client.
func extractAccessToken(req *http.Request) (string, error) { func extractAccessToken(req *http.Request) (string, error) {

View file

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