Skip to content
This repository was archived by the owner on Apr 3, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
feat(schema): add a uaFormFactor column to sessionTokens
Second attempt to add this column, after the migration caused problems
in prod last time round. Originally attempted in e99bc19, then reverted
in f23098a.
  • Loading branch information
philbooth committed Aug 17, 2017
commit b644b319eca396997160f40062ca480f0202dfa9
8 changes: 4 additions & 4 deletions docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ Parameters.
Each token takes the following fields for it's create method respectively:

* sessionToken : data, uid, createdAt, uaBrowser, uaBrowserVersion, uaOS, uaOSVersion, uaDeviceType,
mustVerify, tokenVerificationId
uaFormFactor, mustVerify, tokenVerificationId
* keyFetchToken : authKey, uid, keyBundle, createdAt, tokenVerificationId
* passwordChangeToken : data, uid, createdAt
* passwordForgotToken : data, uid, passCode, createdAt, triesxb
Expand Down Expand Up @@ -474,11 +474,11 @@ These fields are represented as
`ut.*` for a field from `unverifiedTokens`.

* sessionToken : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
a.createdAt AS accountCreatedAt
* sessionTokenWithVerificationStatus : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
a.createdAt AS accountCreatedAt, ut.mustVerify, ut.tokenVerificationId
* keyFetchToken : t.authKey, t.uid, t.keyBundle, t.createdAt, a.emailVerified, a.verifierSetAt
Expand Down Expand Up @@ -605,7 +605,7 @@ These fields are represented as
The deviceCallbackPublicKey and deviceCallbackAuthKey fields are urlsafe-base64 strings, you can learn more about their format [here](https://developers.google.com/web/updates/2016/03/web-push-encryption).

* sessionToken : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
a.createdAt AS accountCreatedAt, d.id AS deviceId,
d.name AS deviceName, d.type AS deviceType,
Expand Down
6 changes: 6 additions & 0 deletions fxa-auth-db-server/docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,7 @@ Content-Length: 371
"uaOS":"Mac OS X",
"uaOSVersion":"10.10",
"uaDeviceType":null,
"uaFormFactor":null,
"lastAccessTime":1441874852627
}
]
Expand Down Expand Up @@ -515,6 +516,7 @@ curl \
"uaOS" : Mac OS X,
"uaOSVersion" : 10.10,
"uaDeviceType" : null,
"uaFormFactor" : null,
"mustVerify":true,
"tokenVerificationId" : "5680a81ba029af7b829afb4aa6dbc23f"
}' \
Expand All @@ -535,6 +537,7 @@ curl \
* uaOS : string
* uaOSVersion : string
* uaDeviceType : string
* uaFormFactor : string
* mustVerify : boolean,
* tokenVerificationId : hex128

Expand Down Expand Up @@ -659,6 +662,7 @@ Content-Type: application/json
"uaOS": "Android",
"uaOSVersion": "5.1",
"uaDeviceType": "mobile",
"uaFormFactor": null,
"lastAccessTime": 1437992394186,
"email": "foo@example.org"
}
Expand Down Expand Up @@ -927,6 +931,7 @@ Content-Length: 285
"uaOS":"Mac OS X",
"uaOSVersion":"10.10",
"uaDeviceType":null,
"uaFormFactor":null,
"lastAccessTime":1460548810011
"emailVerified":0,
"email":"foo@example.com",
Expand Down Expand Up @@ -985,6 +990,7 @@ Content-Length: 285
"uaOS":"Mac OS X",
"uaOSVersion":"10.10",
"uaDeviceType":null,
"uaFormFactor":null,
"lastAccessTime":1460548810011
"emailVerified":0,
"email":"foo@example.com",
Expand Down
14 changes: 12 additions & 2 deletions fxa-auth-db-server/test/backend/db_tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ const SESSION_TOKEN = {
uaOS : 'mock OS',
uaOSVersion : 'mock OS version',
uaDeviceType : 'mock device type',
uaFormFactor : 'mock form factor',
mustVerify: true,
tokenVerificationId : hex16()
}
Expand Down Expand Up @@ -257,6 +258,7 @@ module.exports = function(config, DB) {
uaOS: 'baz',
uaOSVersion: 'qux',
uaDeviceType: 'wibble',
uaFormFactor: 'blee',
mustVerify: false,
tokenVerificationId: hex16()
}
Expand All @@ -278,7 +280,7 @@ module.exports = function(config, DB) {
})
.then(function (sessions) {
assert.equal(sessions.length, 1, 'sessions contains one item')
assert.equal(Object.keys(sessions[0]).length, 16, 'session has correct properties')
assert.equal(Object.keys(sessions[0]).length, 17, 'session has correct properties')
assert.equal(sessions[0].tokenId.toString('hex'), SESSION_TOKEN_ID.toString('hex'), 'tokenId is correct')
assert.equal(sessions[0].uid.toString('hex'), ACCOUNT.uid.toString('hex'), 'uid is correct')
assert.equal(sessions[0].createdAt, SESSION_TOKEN.createdAt, 'createdAt is correct')
Expand All @@ -287,6 +289,7 @@ module.exports = function(config, DB) {
assert.equal(sessions[0].uaOS, SESSION_TOKEN.uaOS, 'uaOS is correct')
assert.equal(sessions[0].uaOSVersion, SESSION_TOKEN.uaOSVersion, 'uaOSVersion is correct')
assert.equal(sessions[0].uaDeviceType, SESSION_TOKEN.uaDeviceType, 'uaDeviceType is correct')
assert.equal(sessions[0].uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
assert.equal(sessions[0].lastAccessTime, SESSION_TOKEN.createdAt, 'lastAccessTime is correct')

// Fetch the session token
Expand All @@ -302,6 +305,7 @@ module.exports = function(config, DB) {
assert.equal(token.uaOS, SESSION_TOKEN.uaOS, 'uaOS is correct')
assert.equal(token.uaOSVersion, SESSION_TOKEN.uaOSVersion, 'uaOSVersion is correct')
assert.equal(token.uaDeviceType, SESSION_TOKEN.uaDeviceType, 'uaDeviceType is correct')
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
assert.equal(token.lastAccessTime, SESSION_TOKEN.createdAt, 'lastAccessTime was set')
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
Expand Down Expand Up @@ -335,6 +339,7 @@ module.exports = function(config, DB) {
assert.equal(sessions[0].uaOS, 'bar', 'uaOS is correct')
assert.equal(sessions[0].uaOSVersion, '2', 'uaOSVersion is correct')
assert.equal(sessions[0].uaDeviceType, 'baz', 'uaDeviceType is correct')
assert.equal(sessions[0].uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
assert.equal(sessions[0].lastAccessTime, 42, 'lastAccessTime is correct')

// Fetch the session token
Expand All @@ -349,6 +354,7 @@ module.exports = function(config, DB) {
assert.equal(token.uaOS, 'bar', 'uaOS is correct')
assert.equal(token.uaOSVersion, '2', 'uaOSVersion is correct')
assert.equal(token.uaDeviceType, 'baz', 'uaDeviceType is correct')
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
assert.equal(token.lastAccessTime, 42, 'lastAccessTime is correct')
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
Expand All @@ -370,6 +376,7 @@ module.exports = function(config, DB) {
assert.equal(token.uaOS, 'bar', 'uaOS is correct')
assert.equal(token.uaOSVersion, '2', 'uaOSVersion is correct')
assert.equal(token.uaDeviceType, 'baz', 'uaDeviceType is correct')
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
assert.equal(token.lastAccessTime, 42, 'lastAccessTime is correct')
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
Expand All @@ -388,7 +395,8 @@ module.exports = function(config, DB) {
uaBrowserVersion: 'b',
uaOS: 'c',
uaOSVersion: 'd',
uaDeviceType: 'e'
uaDeviceType: 'e',
uaFormFactor: 'f'
})
})
.then(function (result) {
Expand All @@ -410,6 +418,7 @@ module.exports = function(config, DB) {
assert.equal(sessions[index].uaOS, 'c', 'uaOS is correct')
assert.equal(sessions[index].uaOSVersion, 'd', 'uaOSVersion is correct')
assert.equal(sessions[index].uaDeviceType, 'e', 'uaDeviceType is correct')
assert.equal(sessions[index].uaFormFactor, 'f', 'uaFormFactor is correct')

// Fetch the verified session token
return db.sessionToken(VERIFIED_SESSION_TOKEN_ID)
Expand All @@ -421,6 +430,7 @@ module.exports = function(config, DB) {
assert.equal(token.uaOS, 'c', 'uaOS is correct')
assert.equal(token.uaOSVersion, 'd', 'uaOSVersion is correct')
assert.equal(token.uaDeviceType, 'e', 'uaDeviceType is correct')
assert.equal(token.uaFormFactor, 'f', 'uaFormFactor is correct')
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
assert.equal(token.mustVerify, undefined, 'mustVerify is undefined')
assert.equal(token.tokenVerificationId, undefined, 'tokenVerificationId is undefined')
Expand Down
12 changes: 10 additions & 2 deletions fxa-auth-db-server/test/backend/remote.js
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ module.exports = function(cfg, makeServer) {
respOk(r)
var sessions = r.obj
assert.equal(sessions.length, 1, 'sessions contains one item')
assert.equal(Object.keys(sessions[0]).length, 16, 'session has correct properties')
assert.equal(Object.keys(sessions[0]).length, 17, 'session has correct properties')
assert.equal(sessions[0].tokenId, user.sessionTokenId, 'tokenId is correct')
assert.equal(sessions[0].uid, user.accountId, 'uid is correct')
assert.equal(sessions[0].createdAt, user.sessionToken.createdAt, 'createdAt is correct')
Expand All @@ -354,6 +354,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(sessions[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
assert.equal(sessions[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
assert.equal(sessions[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
assert.equal(sessions[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
assert.equal(sessions[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')

// Fetch the session token
Expand All @@ -370,6 +371,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(token.uaOS, user.sessionToken.uaOS, 'uaOS matches')
assert.equal(token.uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion matches')
assert.equal(token.uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType matches')
assert.equal(token.uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor matches')
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
assert.equal(!! token.emailVerified, user.account.emailVerified, 'emailVerified same as account emailVerified')
assert.equal(token.email, user.account.email, 'token.email same as account email')
Expand All @@ -393,6 +395,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(token.uaOS, user.sessionToken.uaOS, 'uaOS matches')
assert.equal(token.uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion matches')
assert.equal(token.uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType matches')
assert.equal(token.uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor matches')
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
assert.equal(!! token.emailVerified, user.account.emailVerified, 'emailVerified same as account emailVerified')
assert.equal(token.email, user.account.email, 'token.email same as account email')
Expand Down Expand Up @@ -422,6 +425,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(token.uaOS, verifiedUser.sessionToken.uaOS, 'uaOS matches')
assert.equal(token.uaOSVersion, verifiedUser.sessionToken.uaOSVersion, 'uaOSVersion matches')
assert.equal(token.uaDeviceType, verifiedUser.sessionToken.uaDeviceType, 'uaDeviceType matches')
assert.equal(token.uaFormFactor, verifiedUser.sessionToken.uaFormFactor, 'uaFormFactor matches')
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
assert.equal(!! token.emailVerified, verifiedUser.account.emailVerified, 'emailVerified same as account emailVerified')
assert.equal(token.email, verifiedUser.account.email, 'token.email same as account email')
Expand All @@ -445,6 +449,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(token.uaOS, verifiedUser.sessionToken.uaOS, 'uaOS matches')
assert.equal(token.uaOSVersion, verifiedUser.sessionToken.uaOSVersion, 'uaOSVersion matches')
assert.equal(token.uaDeviceType, verifiedUser.sessionToken.uaDeviceType, 'uaDeviceType matches')
assert.equal(token.uaFormFactor, verifiedUser.sessionToken.uaFormFactor, 'uaFormFactor matches')
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
assert.equal(!! token.emailVerified, verifiedUser.account.emailVerified, 'emailVerified same as account emailVerified')
assert.equal(token.email, verifiedUser.account.email, 'token.email same as account email')
Expand Down Expand Up @@ -585,6 +590,7 @@ module.exports = function(cfg, makeServer) {
assert(s.uaBrowser)
assert(s.uaBrowserVersion)
assert(s.uaDeviceType)
assert(s.uaFormFactor)
assert(s.uaOS)
assert(s.uaOSVersion)
assert(s.uid)
Expand Down Expand Up @@ -654,7 +660,7 @@ module.exports = function(cfg, makeServer) {
respOk(r)
var devices = r.obj
assert.equal(devices.length, 1, 'devices contains one item')
assert.equal(Object.keys(devices[0]).length, 16, 'device has sixteen properties')
assert.equal(Object.keys(devices[0]).length, 17, 'device has seventeen properties')
assert.equal(devices[0].uid, user.accountId, 'uid is correct')
assert.equal(devices[0].id, user.deviceId, 'id is correct')
assert.equal(devices[0].sessionTokenId, user.sessionTokenId, 'sessionTokenId is correct')
Expand All @@ -669,6 +675,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(devices[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
assert.equal(devices[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
assert.equal(devices[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
assert.equal(devices[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
assert.equal(devices[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')
assert.equal(devices[0].email, user.account.email, 'email is correct')
})
Expand Down Expand Up @@ -716,6 +723,7 @@ module.exports = function(cfg, makeServer) {
assert.equal(devices[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
assert.equal(devices[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
assert.equal(devices[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
assert.equal(devices[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
assert.equal(devices[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')
assert.equal(devices[0].email, user.account.email, 'email is correct')

Expand Down
1 change: 1 addition & 0 deletions fxa-auth-db-server/test/fake.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ module.exports.newUserDataHex = function() {
uaOS: 'fake OS',
uaOSVersion: 'fake OS version',
uaDeviceType: 'fake device type',
uaFormFactor: 'fake form factor',
mustVerify: true,
tokenVerificationId: hex16()
}
Expand Down
4 changes: 4 additions & 0 deletions lib/db/mem.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ var SESSION_FIELDS = [
'uaOS',
'uaOSVersion',
'uaDeviceType',
'uaFormFactor',
'lastAccessTime'
]

Expand Down Expand Up @@ -113,6 +114,7 @@ module.exports = function (log, error) {
uaOS: sessionToken.uaOS,
uaOSVersion: sessionToken.uaOSVersion,
uaDeviceType: sessionToken.uaDeviceType,
uaFormFactor: sessionToken.uaFormFactor,
lastAccessTime: sessionToken.createdAt
}

Expand Down Expand Up @@ -569,6 +571,7 @@ module.exports = function (log, error) {
uaOS: sessionToken.uaOS || null,
uaOSVersion: sessionToken.uaOSVersion || null,
uaDeviceType: sessionToken.uaDeviceType || null,
uaFormFactor: sessionToken.uaFormFactor || null,
lastAccessTime: sessionToken.lastAccessTime,
// device information
deviceId: deviceInfo.id || null,
Expand Down Expand Up @@ -609,6 +612,7 @@ module.exports = function (log, error) {
item.uaOS = sessionTokens[id].uaOS || null
item.uaOSVersion = sessionTokens[id].uaOSVersion || null
item.uaDeviceType = sessionTokens[id].uaDeviceType || null
item.uaFormFactor = sessionTokens[id].uaFormFactor || null
item.lastAccessTime = sessionTokens[id].lastAccessTime

var accountId = sessionTokens[id].uid.toString('hex')
Expand Down
Loading