1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-04 10:19:30 +02:00

Show a dialog for new ADB key if using device.

This commit is contained in:
Simo Kinnunen 2014-10-01 21:33:47 +09:00
parent e6c1de5194
commit 95347d91f0
9 changed files with 152 additions and 109 deletions

View file

@ -58,6 +58,7 @@ dbapi.resetUserSettings = function(email) {
} }
dbapi.insertUserAdbKey = function(email, key) { dbapi.insertUserAdbKey = function(email, key) {
console.log('insertUserAdbKey', email, key)
return db.run(r.table('users').get(email).update({ return db.run(r.table('users').get(email).update({
adbKeys: r.row('adbKeys').default([]).append({ adbKeys: r.row('adbKeys').default([]).append({
title: key.title title: key.title

View file

@ -10,13 +10,11 @@ var csrf = require('csurf')
var Promise = require('bluebird') var Promise = require('bluebird')
var httpProxy = require('http-proxy') var httpProxy = require('http-proxy')
var compression = require('compression') var compression = require('compression')
var adbkit = require('adbkit')
var logger = require('../../util/logger') var logger = require('../../util/logger')
var pathutil = require('../../util/pathutil') var pathutil = require('../../util/pathutil')
var dbapi = require('../../db/api') var dbapi = require('../../db/api')
var datautil = require('../../util/datautil') var datautil = require('../../util/datautil')
var requtil = require('../../util/requtil')
var auth = require('./middleware/auth') var auth = require('./middleware/auth')
var deviceIconMiddleware = require('./middleware/device-icons') var deviceIconMiddleware = require('./middleware/device-icons')
@ -149,78 +147,6 @@ module.exports = function(options) {
}) })
}) })
app.post('/api/v1/app/user/keys/adb', function(req, res) {
requtil.validate(req, function() {
req.checkBody('title').notEmpty().len(1, 100)
req.checkBody('key').notEmpty()
})
.then(function() {
return adbkit.util.parsePublicKey(req.body.key)
})
.then(function(key) {
return dbapi.lookupUsersByAdbKey(key.fingerprint)
.then(function(users) {
if (users.length) {
throw new dbapi.DuplicateSecondaryIndexError()
}
else {
// Well, this doesn't guarantee that no one else inserts the
// same key before we do, but it's hardly a big enough problem
// to consider right now.
return dbapi.insertUserAdbKey(req.user.email, {
title: req.body.title
, fingerprint: key.fingerprint
})
.then(function() {
res.send({
success: true
, key: {
title: req.body.title
, fingerprint: key.fingerprint
}
})
})
}
})
})
.catch(requtil.ValidationError, function(err) {
res.status(400).send({
success: false
, error: 'ValidationError'
, validationErrors: err.errors
})
})
.catch(dbapi.DuplicateSecondaryIndexError, function() {
res.status(400).send({
success: false
, error: 'DuplicateKeyError'
})
})
.catch(function(err) {
log.error('Failed to insert ADB key: ', err.stack)
res.status(500).send({
success: false
, error: 'ServerError'
})
})
})
app.delete('/api/v1/app/user/keys/adb/:id', function(req, res) {
dbapi.deleteUserAdbKey(req.user.email, req.params.id)
.then(function() {
res.send({
success: true
})
})
.catch(function(err) {
log.error('Failed to delete ADB key: ', err.stack)
res.status(500).send({
success: false
, error: 'ServerError'
})
})
})
app.get('/api/v1/app/group', function(req, res) { app.get('/api/v1/app/group', function(req, res) {
dbapi.loadGroup(req.user.email) dbapi.loadGroup(req.user.email)
.then(function(cursor) { .then(function(cursor) {

View file

@ -4,6 +4,7 @@ var syrup = require('syrup')
var Promise = require('bluebird') var Promise = require('bluebird')
var logger = require('../../../util/logger') var logger = require('../../../util/logger')
var grouputil = require('../../../util/grouputil')
var wire = require('../../../wire') var wire = require('../../../wire')
var wireutil = require('../../../wire/util') var wireutil = require('../../../wire/util')
var lifecycle = require('../../../util/lifecycle') var lifecycle = require('../../../util/lifecycle')
@ -33,14 +34,28 @@ module.exports = syrup.serial()
var resolver = Promise.defer() var resolver = Promise.defer()
function notify() { function notify() {
push.send([ group.get()
solo.channel .then(function(currentGroup) {
, wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage( push.send([
options.serial solo.channel
, key.fingerprint , wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage(
, key.comment options.serial
)) , key.fingerprint
]) , key.comment
, currentGroup.group
))
])
})
.catch(grouputil.NoGroupError, function() {
push.send([
solo.channel
, wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage(
options.serial
, key.fingerprint
, key.comment
))
])
})
} }
function joinListener(group, identifier) { function joinListener(group, identifier) {

View file

@ -86,9 +86,15 @@ module.exports = function(options) {
)) ))
]) ])
} }
else { else if (message.currentGroup) {
/* ask user */ appDealer.send([
log.debug('ask user') message.currentGroup
, wireutil.envelope(new wire.JoinGroupByAdbFingerprintMessage(
message.serial
, message.fingerprint
, message.comment
))
])
} }
}) })
.catch(function(err) { .catch(function(err) {

View file

@ -7,6 +7,7 @@ var zmq = require('zmq')
var Promise = require('bluebird') var Promise = require('bluebird')
var _ = require('lodash') var _ = require('lodash')
var request = Promise.promisifyAll(require('request')) var request = Promise.promisifyAll(require('request'))
var adbkit = require('adbkit')
var logger = require('../../util/logger') var logger = require('../../util/logger')
var wire = require('../../wire') var wire = require('../../wire')
@ -133,6 +134,12 @@ module.exports = function(options) {
) )
}) })
}) })
.on(wire.JoinGroupByAdbFingerprintMessage, function(channel, message) {
socket.emit('user.keys.adb.confirm', {
title: message.comment
, fingerprint: message.fingerprint
})
})
.on(wire.LeaveGroupMessage, function(channel, message) { .on(wire.LeaveGroupMessage, function(channel, message) {
socket.emit('device.change', { socket.emit('device.change', {
important: true important: true
@ -254,6 +261,79 @@ module.exports = function(options) {
.on('user.settings.reset', function() { .on('user.settings.reset', function() {
dbapi.resetUserSettings(user.email) dbapi.resetUserSettings(user.email)
}) })
.on('user.keys.adb.add', function(data) {
return adbkit.util.parsePublicKey(data.key)
.then(function(key) {
return dbapi.lookupUsersByAdbKey(key.fingerprint)
.then(function(cursor) {
return cursor.toArray()
})
.then(function(users) {
if (users.length) {
throw new dbapi.DuplicateSecondaryIndexError()
}
else {
return dbapi.insertUserAdbKey(user.email, {
title: data.title
, fingerprint: key.fingerprint
})
}
})
.then(function() {
socket.emit('user.keys.adb.added', {
title: data.title
, fingerprint: key.fingerprint
})
})
})
.then(function() {
push.send([
wireutil.global
, wireutil.envelope(new wire.AdbKeysUpdatedMessage())
])
})
.catch(dbapi.DuplicateSecondaryIndexError, function() {
// No-op
})
})
.on('user.keys.adb.accept', function(data) {
return dbapi.lookupUsersByAdbKey(data.fingerprint)
.then(function(cursor) {
return cursor.toArray()
})
.then(function(users) {
if (users.length) {
throw new dbapi.DuplicateSecondaryIndexError()
}
else {
return dbapi.insertUserAdbKey(user.email, {
title: data.title
, fingerprint: data.fingerprint
})
}
})
.then(function() {
socket.emit('user.keys.adb.added', {
title: data.title
, fingerprint: data.fingerprint
})
})
.then(function() {
push.send([
user.group
, wireutil.envelope(new wire.AdbKeysUpdatedMessage())
])
})
.catch(dbapi.DuplicateSecondaryIndexError, function() {
// No-op
})
})
.on('user.keys.adb.remove', function(data) {
return dbapi.deleteUserAdbKey(user.email, data.fingerprint)
.then(function() {
socket.emit('user.keys.adb.removed', data)
})
})
// Touch events // Touch events
.on('input.touchDown', function(channel, data) { .on('input.touchDown', function(channel, data) {
push.send([ push.send([

View file

@ -251,6 +251,7 @@ message JoinGroupByAdbFingerprintMessage {
required string serial = 1; required string serial = 1;
required string fingerprint = 2; required string fingerprint = 2;
optional string comment = 3; optional string comment = 3;
optional string currentGroup = 4;
} }
message AdbKeysUpdatedMessage { message AdbKeysUpdatedMessage {

View file

@ -9,11 +9,9 @@ module.exports =
$scope.modal.title = data.title $scope.modal.title = data.title
$scope.ok = function () { $scope.ok = function () {
console.log('add key')
$modalInstance.close(true) $modalInstance.close(true)
} }
$scope.$watch('modal.showAdd', function (newValue) { $scope.$watch('modal.showAdd', function (newValue) {
if (newValue === false) { if (newValue === false) {
$scope.ok() $scope.ok()
@ -36,9 +34,7 @@ module.exports =
} }
}) })
modalInstance.result.then(function () { return modalInstance.result
}, function () {
})
} }
return service return service

View file

@ -1,4 +1,9 @@
module.exports = function UserServiceFactory($http, AppState) { module.exports = function UserServiceFactory(
$rootScope
, socket
, AppState
, AddAdbKeyModalService
) {
var UserService = {} var UserService = {}
var user = UserService.currentUser = AppState.user var user = UserService.currentUser = AppState.user
@ -8,20 +13,38 @@ module.exports = function UserServiceFactory($http, AppState) {
} }
UserService.addAdbKey = function(key) { UserService.addAdbKey = function(key) {
return $http.post('/api/v1/app/user/keys/adb', key) socket.emit('user.keys.adb.add', key)
.success(function(data) { }
UserService.getAdbKeys().push(data.key)
}) UserService.acceptAdbKey = function(key) {
socket.emit('user.keys.adb.accept', key)
} }
UserService.removeAdbKey = function(key) { UserService.removeAdbKey = function(key) {
return $http.delete('/api/v1/app/user/keys/adb/' + key.fingerprint) socket.emit('user.keys.adb.remove', key)
.success(function() {
user.adbKeys = UserService.getAdbKeys().filter(function(someKey) {
return someKey.fingerprint !== key.fingerprint
})
})
} }
socket.on('user.keys.adb.added', function(key) {
UserService.getAdbKeys().push(key)
$rootScope.$broadcast('user.keys.adb.updated', user.adbKeys)
$rootScope.$apply()
})
socket.on('user.keys.adb.removed', function(key) {
user.adbKeys = UserService.getAdbKeys().filter(function(someKey) {
return someKey.fingerprint !== key.fingerprint
})
$rootScope.$broadcast('user.keys.adb.updated', user.adbKeys)
$rootScope.$apply()
})
socket.on('user.keys.adb.confirm', function(data) {
AddAdbKeyModalService.open(data).then(function(result) {
if (result) {
UserService.acceptAdbKey(data)
}
})
})
return UserService return UserService
} }

View file

@ -1,10 +1,4 @@
module.exports = function AdbKeysCtrl($scope, $http, UserService, AddAdbKeyModalService) { module.exports = function AdbKeysCtrl($scope, $http, UserService) {
//AddAdbKeyModalService.open({
// title: 'PC1264',
// fingerprint: 'bb:86:60:39:d7:a2:e3:09:93:09:cc:f6:e8:37:99:3f'
//})
$scope.adbKeys = [] $scope.adbKeys = []
function updateKeys() { function updateKeys() {
@ -12,8 +6,9 @@ module.exports = function AdbKeysCtrl($scope, $http, UserService, AddAdbKeyModal
} }
$scope.removeKey = function (key) { $scope.removeKey = function (key) {
UserService.removeAdbKey(key).then(updateKeys) UserService.removeAdbKey(key)
} }
$scope.$on('user.keys.adb.updated', updateKeys)
updateKeys() updateKeys()
} }