Skip to content
This repository was archived by the owner on Apr 3, 2019. It is now read-only.

Commit 774b6c1

Browse files
philboothvladikoff
authored andcommitted
feat(schema): add a uaFormFactor column to sessionTokens (#271) r=vladikoff
Second attempt to add this column, after the migration caused problems in prod last time round. Originally attempted in e99bc19, then reverted in f23098a.
1 parent 9523d02 commit 774b6c1

File tree

10 files changed

+307
-22
lines changed

10 files changed

+307
-22
lines changed

docs/API.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ Parameters.
430430
Each token takes the following fields for it's create method respectively:
431431

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

476476
* sessionToken : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
477-
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
477+
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
478478
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
479479
a.createdAt AS accountCreatedAt
480480
* sessionTokenWithVerificationStatus : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
481-
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
481+
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
482482
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
483483
a.createdAt AS accountCreatedAt, ut.mustVerify, ut.tokenVerificationId
484484
* keyFetchToken : t.authKey, t.uid, t.keyBundle, t.createdAt, a.emailVerified, a.verifierSetAt
@@ -605,7 +605,7 @@ These fields are represented as
605605
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).
606606

607607
* sessionToken : t.tokenData, t.uid, t.createdAt, t.uaBrowser, t.uaBrowserVersion,
608-
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.lastAccessTime,
608+
t.uaOS, t.uaOSVersion, t.uaDeviceType, t.uaFormFactor, t.lastAccessTime,
609609
a.emailVerified, a.email, a.emailCode, a.verifierSetAt,
610610
a.createdAt AS accountCreatedAt, d.id AS deviceId,
611611
d.name AS deviceName, d.type AS deviceType,

fxa-auth-db-server/docs/API.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,7 @@ Content-Length: 371
480480
"uaOS":"Mac OS X",
481481
"uaOSVersion":"10.10",
482482
"uaDeviceType":null,
483+
"uaFormFactor":null,
483484
"lastAccessTime":1441874852627
484485
}
485486
]
@@ -515,6 +516,7 @@ curl \
515516
"uaOS" : Mac OS X,
516517
"uaOSVersion" : 10.10,
517518
"uaDeviceType" : null,
519+
"uaFormFactor" : null,
518520
"mustVerify":true,
519521
"tokenVerificationId" : "5680a81ba029af7b829afb4aa6dbc23f"
520522
}' \
@@ -535,6 +537,7 @@ curl \
535537
* uaOS : string
536538
* uaOSVersion : string
537539
* uaDeviceType : string
540+
* uaFormFactor : string
538541
* mustVerify : boolean,
539542
* tokenVerificationId : hex128
540543

@@ -659,6 +662,7 @@ Content-Type: application/json
659662
"uaOS": "Android",
660663
"uaOSVersion": "5.1",
661664
"uaDeviceType": "mobile",
665+
"uaFormFactor": null,
662666
"lastAccessTime": 1437992394186,
663667
"email": "foo@example.org"
664668
}
@@ -927,6 +931,7 @@ Content-Length: 285
927931
"uaOS":"Mac OS X",
928932
"uaOSVersion":"10.10",
929933
"uaDeviceType":null,
934+
"uaFormFactor":null,
930935
"lastAccessTime":1460548810011
931936
"emailVerified":0,
932937
"email":"foo@example.com",
@@ -985,6 +990,7 @@ Content-Length: 285
985990
"uaOS":"Mac OS X",
986991
"uaOSVersion":"10.10",
987992
"uaDeviceType":null,
993+
"uaFormFactor":null,
988994
"lastAccessTime":1460548810011
989995
"emailVerified":0,
990996
"email":"foo@example.com",

fxa-auth-db-server/test/backend/db_tests.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const SESSION_TOKEN = {
8383
uaOS : 'mock OS',
8484
uaOSVersion : 'mock OS version',
8585
uaDeviceType : 'mock device type',
86+
uaFormFactor : 'mock form factor',
8687
mustVerify: true,
8788
tokenVerificationId : hex16()
8889
}
@@ -257,6 +258,7 @@ module.exports = function(config, DB) {
257258
uaOS: 'baz',
258259
uaOSVersion: 'qux',
259260
uaDeviceType: 'wibble',
261+
uaFormFactor: 'blee',
260262
mustVerify: false,
261263
tokenVerificationId: hex16()
262264
}
@@ -278,7 +280,7 @@ module.exports = function(config, DB) {
278280
})
279281
.then(function (sessions) {
280282
assert.equal(sessions.length, 1, 'sessions contains one item')
281-
assert.equal(Object.keys(sessions[0]).length, 16, 'session has correct properties')
283+
assert.equal(Object.keys(sessions[0]).length, 17, 'session has correct properties')
282284
assert.equal(sessions[0].tokenId.toString('hex'), SESSION_TOKEN_ID.toString('hex'), 'tokenId is correct')
283285
assert.equal(sessions[0].uid.toString('hex'), ACCOUNT.uid.toString('hex'), 'uid is correct')
284286
assert.equal(sessions[0].createdAt, SESSION_TOKEN.createdAt, 'createdAt is correct')
@@ -287,6 +289,7 @@ module.exports = function(config, DB) {
287289
assert.equal(sessions[0].uaOS, SESSION_TOKEN.uaOS, 'uaOS is correct')
288290
assert.equal(sessions[0].uaOSVersion, SESSION_TOKEN.uaOSVersion, 'uaOSVersion is correct')
289291
assert.equal(sessions[0].uaDeviceType, SESSION_TOKEN.uaDeviceType, 'uaDeviceType is correct')
292+
assert.equal(sessions[0].uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
290293
assert.equal(sessions[0].lastAccessTime, SESSION_TOKEN.createdAt, 'lastAccessTime is correct')
291294

292295
// Fetch the session token
@@ -302,6 +305,7 @@ module.exports = function(config, DB) {
302305
assert.equal(token.uaOS, SESSION_TOKEN.uaOS, 'uaOS is correct')
303306
assert.equal(token.uaOSVersion, SESSION_TOKEN.uaOSVersion, 'uaOSVersion is correct')
304307
assert.equal(token.uaDeviceType, SESSION_TOKEN.uaDeviceType, 'uaDeviceType is correct')
308+
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
305309
assert.equal(token.lastAccessTime, SESSION_TOKEN.createdAt, 'lastAccessTime was set')
306310
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
307311
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
@@ -335,6 +339,7 @@ module.exports = function(config, DB) {
335339
assert.equal(sessions[0].uaOS, 'bar', 'uaOS is correct')
336340
assert.equal(sessions[0].uaOSVersion, '2', 'uaOSVersion is correct')
337341
assert.equal(sessions[0].uaDeviceType, 'baz', 'uaDeviceType is correct')
342+
assert.equal(sessions[0].uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
338343
assert.equal(sessions[0].lastAccessTime, 42, 'lastAccessTime is correct')
339344

340345
// Fetch the session token
@@ -349,6 +354,7 @@ module.exports = function(config, DB) {
349354
assert.equal(token.uaOS, 'bar', 'uaOS is correct')
350355
assert.equal(token.uaOSVersion, '2', 'uaOSVersion is correct')
351356
assert.equal(token.uaDeviceType, 'baz', 'uaDeviceType is correct')
357+
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
352358
assert.equal(token.lastAccessTime, 42, 'lastAccessTime is correct')
353359
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
354360
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
@@ -370,6 +376,7 @@ module.exports = function(config, DB) {
370376
assert.equal(token.uaOS, 'bar', 'uaOS is correct')
371377
assert.equal(token.uaOSVersion, '2', 'uaOSVersion is correct')
372378
assert.equal(token.uaDeviceType, 'baz', 'uaDeviceType is correct')
379+
assert.equal(token.uaFormFactor, SESSION_TOKEN.uaFormFactor, 'uaFormFactor is correct')
373380
assert.equal(token.lastAccessTime, 42, 'lastAccessTime is correct')
374381
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
375382
assert.equal(token.email, ACCOUNT.email, 'token email same as account email')
@@ -388,7 +395,8 @@ module.exports = function(config, DB) {
388395
uaBrowserVersion: 'b',
389396
uaOS: 'c',
390397
uaOSVersion: 'd',
391-
uaDeviceType: 'e'
398+
uaDeviceType: 'e',
399+
uaFormFactor: 'f'
392400
})
393401
})
394402
.then(function (result) {
@@ -410,6 +418,7 @@ module.exports = function(config, DB) {
410418
assert.equal(sessions[index].uaOS, 'c', 'uaOS is correct')
411419
assert.equal(sessions[index].uaOSVersion, 'd', 'uaOSVersion is correct')
412420
assert.equal(sessions[index].uaDeviceType, 'e', 'uaDeviceType is correct')
421+
assert.equal(sessions[index].uaFormFactor, 'f', 'uaFormFactor is correct')
413422

414423
// Fetch the verified session token
415424
return db.sessionToken(VERIFIED_SESSION_TOKEN_ID)
@@ -421,6 +430,7 @@ module.exports = function(config, DB) {
421430
assert.equal(token.uaOS, 'c', 'uaOS is correct')
422431
assert.equal(token.uaOSVersion, 'd', 'uaOSVersion is correct')
423432
assert.equal(token.uaDeviceType, 'e', 'uaDeviceType is correct')
433+
assert.equal(token.uaFormFactor, 'f', 'uaFormFactor is correct')
424434
assert.equal(!! token.emailVerified, ACCOUNT.emailVerified, 'token emailVerified is same as account emailVerified')
425435
assert.equal(token.mustVerify, undefined, 'mustVerify is undefined')
426436
assert.equal(token.tokenVerificationId, undefined, 'tokenVerificationId is undefined')

fxa-auth-db-server/test/backend/remote.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ module.exports = function(cfg, makeServer) {
345345
respOk(r)
346346
var sessions = r.obj
347347
assert.equal(sessions.length, 1, 'sessions contains one item')
348-
assert.equal(Object.keys(sessions[0]).length, 16, 'session has correct properties')
348+
assert.equal(Object.keys(sessions[0]).length, 17, 'session has correct properties')
349349
assert.equal(sessions[0].tokenId, user.sessionTokenId, 'tokenId is correct')
350350
assert.equal(sessions[0].uid, user.accountId, 'uid is correct')
351351
assert.equal(sessions[0].createdAt, user.sessionToken.createdAt, 'createdAt is correct')
@@ -354,6 +354,7 @@ module.exports = function(cfg, makeServer) {
354354
assert.equal(sessions[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
355355
assert.equal(sessions[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
356356
assert.equal(sessions[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
357+
assert.equal(sessions[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
357358
assert.equal(sessions[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')
358359

359360
// Fetch the session token
@@ -370,6 +371,7 @@ module.exports = function(cfg, makeServer) {
370371
assert.equal(token.uaOS, user.sessionToken.uaOS, 'uaOS matches')
371372
assert.equal(token.uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion matches')
372373
assert.equal(token.uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType matches')
374+
assert.equal(token.uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor matches')
373375
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
374376
assert.equal(!! token.emailVerified, user.account.emailVerified, 'emailVerified same as account emailVerified')
375377
assert.equal(token.email, user.account.email, 'token.email same as account email')
@@ -393,6 +395,7 @@ module.exports = function(cfg, makeServer) {
393395
assert.equal(token.uaOS, user.sessionToken.uaOS, 'uaOS matches')
394396
assert.equal(token.uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion matches')
395397
assert.equal(token.uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType matches')
398+
assert.equal(token.uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor matches')
396399
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
397400
assert.equal(!! token.emailVerified, user.account.emailVerified, 'emailVerified same as account emailVerified')
398401
assert.equal(token.email, user.account.email, 'token.email same as account email')
@@ -422,6 +425,7 @@ module.exports = function(cfg, makeServer) {
422425
assert.equal(token.uaOS, verifiedUser.sessionToken.uaOS, 'uaOS matches')
423426
assert.equal(token.uaOSVersion, verifiedUser.sessionToken.uaOSVersion, 'uaOSVersion matches')
424427
assert.equal(token.uaDeviceType, verifiedUser.sessionToken.uaDeviceType, 'uaDeviceType matches')
428+
assert.equal(token.uaFormFactor, verifiedUser.sessionToken.uaFormFactor, 'uaFormFactor matches')
425429
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
426430
assert.equal(!! token.emailVerified, verifiedUser.account.emailVerified, 'emailVerified same as account emailVerified')
427431
assert.equal(token.email, verifiedUser.account.email, 'token.email same as account email')
@@ -445,6 +449,7 @@ module.exports = function(cfg, makeServer) {
445449
assert.equal(token.uaOS, verifiedUser.sessionToken.uaOS, 'uaOS matches')
446450
assert.equal(token.uaOSVersion, verifiedUser.sessionToken.uaOSVersion, 'uaOSVersion matches')
447451
assert.equal(token.uaDeviceType, verifiedUser.sessionToken.uaDeviceType, 'uaDeviceType matches')
452+
assert.equal(token.uaFormFactor, verifiedUser.sessionToken.uaFormFactor, 'uaFormFactor matches')
448453
assert.equal(token.lastAccessTime, token.createdAt, 'lastAccessTime was set')
449454
assert.equal(!! token.emailVerified, verifiedUser.account.emailVerified, 'emailVerified same as account emailVerified')
450455
assert.equal(token.email, verifiedUser.account.email, 'token.email same as account email')
@@ -585,6 +590,7 @@ module.exports = function(cfg, makeServer) {
585590
assert(s.uaBrowser)
586591
assert(s.uaBrowserVersion)
587592
assert(s.uaDeviceType)
593+
assert(s.uaFormFactor)
588594
assert(s.uaOS)
589595
assert(s.uaOSVersion)
590596
assert(s.uid)
@@ -654,7 +660,7 @@ module.exports = function(cfg, makeServer) {
654660
respOk(r)
655661
var devices = r.obj
656662
assert.equal(devices.length, 1, 'devices contains one item')
657-
assert.equal(Object.keys(devices[0]).length, 16, 'device has sixteen properties')
663+
assert.equal(Object.keys(devices[0]).length, 17, 'device has seventeen properties')
658664
assert.equal(devices[0].uid, user.accountId, 'uid is correct')
659665
assert.equal(devices[0].id, user.deviceId, 'id is correct')
660666
assert.equal(devices[0].sessionTokenId, user.sessionTokenId, 'sessionTokenId is correct')
@@ -669,6 +675,7 @@ module.exports = function(cfg, makeServer) {
669675
assert.equal(devices[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
670676
assert.equal(devices[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
671677
assert.equal(devices[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
678+
assert.equal(devices[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
672679
assert.equal(devices[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')
673680
assert.equal(devices[0].email, user.account.email, 'email is correct')
674681
})
@@ -716,6 +723,7 @@ module.exports = function(cfg, makeServer) {
716723
assert.equal(devices[0].uaOS, user.sessionToken.uaOS, 'uaOS is correct')
717724
assert.equal(devices[0].uaOSVersion, user.sessionToken.uaOSVersion, 'uaOSVersion is correct')
718725
assert.equal(devices[0].uaDeviceType, user.sessionToken.uaDeviceType, 'uaDeviceType is correct')
726+
assert.equal(devices[0].uaFormFactor, user.sessionToken.uaFormFactor, 'uaFormFactor is correct')
719727
assert.equal(devices[0].lastAccessTime, user.sessionToken.createdAt, 'lastAccessTime is correct')
720728
assert.equal(devices[0].email, user.account.email, 'email is correct')
721729

fxa-auth-db-server/test/fake.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ module.exports.newUserDataHex = function() {
5757
uaOS: 'fake OS',
5858
uaOSVersion: 'fake OS version',
5959
uaDeviceType: 'fake device type',
60+
uaFormFactor: 'fake form factor',
6061
mustVerify: true,
6162
tokenVerificationId: hex16()
6263
}

lib/db/mem.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ var SESSION_FIELDS = [
4242
'uaOS',
4343
'uaOSVersion',
4444
'uaDeviceType',
45+
'uaFormFactor',
4546
'lastAccessTime'
4647
]
4748

@@ -113,6 +114,7 @@ module.exports = function (log, error) {
113114
uaOS: sessionToken.uaOS,
114115
uaOSVersion: sessionToken.uaOSVersion,
115116
uaDeviceType: sessionToken.uaDeviceType,
117+
uaFormFactor: sessionToken.uaFormFactor,
116118
lastAccessTime: sessionToken.createdAt
117119
}
118120

@@ -569,6 +571,7 @@ module.exports = function (log, error) {
569571
uaOS: sessionToken.uaOS || null,
570572
uaOSVersion: sessionToken.uaOSVersion || null,
571573
uaDeviceType: sessionToken.uaDeviceType || null,
574+
uaFormFactor: sessionToken.uaFormFactor || null,
572575
lastAccessTime: sessionToken.lastAccessTime,
573576
// device information
574577
deviceId: deviceInfo.id || null,
@@ -609,6 +612,7 @@ module.exports = function (log, error) {
609612
item.uaOS = sessionTokens[id].uaOS || null
610613
item.uaOSVersion = sessionTokens[id].uaOSVersion || null
611614
item.uaDeviceType = sessionTokens[id].uaDeviceType || null
615+
item.uaFormFactor = sessionTokens[id].uaFormFactor || null
612616
item.lastAccessTime = sessionTokens[id].lastAccessTime
613617

614618
var accountId = sessionTokens[id].uid.toString('hex')

0 commit comments

Comments
 (0)