1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-05 10:39:25 +02:00

ADB connect now respects auth keys in the settings page.

This commit is contained in:
Simo Kinnunen 2014-10-01 18:41:18 +09:00
parent 0a67c8c272
commit e6c1de5194
12 changed files with 322 additions and 49 deletions

View file

@ -10,11 +10,13 @@ var csrf = require('csurf')
var Promise = require('bluebird')
var httpProxy = require('http-proxy')
var compression = require('compression')
var adbkit = require('adbkit')
var logger = require('../../util/logger')
var pathutil = require('../../util/pathutil')
var dbapi = require('../../db/api')
var datautil = require('../../util/datautil')
var requtil = require('../../util/requtil')
var auth = require('./middleware/auth')
var deviceIconMiddleware = require('./middleware/device-icons')
@ -147,6 +149,78 @@ 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) {
dbapi.loadGroup(req.user.email)
.then(function(cursor) {