Merge pull request #770 from neofreko/adb-key-api

Implements addAdbPublicKey API endpoint
This commit is contained in:
Simo Kinnunen
2019-07-10 11:44:32 -07:00
committed by GitHub
4 changed files with 95 additions and 3 deletions

View File

@@ -3,7 +3,7 @@ var util = require('util')
var _ = require('lodash')
var Promise = require('bluebird')
var uuid = require('uuid')
var adbkit = require('adbkit')
var dbapi = require('../../../db/api')
var logger = require('../../../util/logger')
var datautil = require('../../../util/datautil')
@@ -23,6 +23,7 @@ module.exports = {
, remoteConnectUserDeviceBySerial: remoteConnectUserDeviceBySerial
, remoteDisconnectUserDeviceBySerial: remoteDisconnectUserDeviceBySerial
, getUserAccessTokens: getUserAccessTokens
, addAdbPublicKey: addAdbPublicKey
}
function getUser(req, res) {
@@ -400,3 +401,56 @@ function getUserAccessTokens(req, res) {
})
})
}
function addAdbPublicKey(req, res) {
var data = req.swagger.params.adb.value
adbkit.util.parsePublicKey(data.publickey)
.then(function(key) {
return dbapi.lookupUsersByAdbKey(key.fingerprint)
.then(function(cursor) {
return cursor.toArray()
})
.then(function(users) {
return {
key: {
title: data.title || key.comment
, fingerprint: key.fingerprint
}
, users: users
}
})
})
.then(function(data) {
if (data.users.length) {
return res.json({
success: true
})
}
else {
return dbapi.insertUserAdbKey(req.user.email, data.key)
.then(function() {
return res.json({
success: true
})
})
}
})
.then(function() {
req.options.push.send([
req.user.group
, wireutil.envelope(new wire.AdbKeysUpdatedMessage())
])
})
.catch(dbapi.DuplicateSecondaryIndexError, function() {
// No-op
return res.json({
success: true
})
}).catch(function(err) {
log.error('Failed to insert new adb key fingerprint: ', err.stack)
return res.status(500).json({
success: false
, message: 'Unable to insert new adb key fingerprint to database'
})
})
}

View File

@@ -3,7 +3,8 @@ var path = require('path')
var events = require('events')
var express = require('express')
var SwaggerExpress = require('swagger-express-mw')
var swaggerExpress = require('swagger-express-mw')
var swaggerUi = require('swagger-tools/middleware/swagger-ui')
var cookieSession = require('cookie-session')
var Promise = require('bluebird')
var _ = require('lodash')
@@ -67,10 +68,11 @@ module.exports = function(options) {
, swaggerFile: path.resolve(__dirname, 'swagger', 'api_v1.yaml')
}
SwaggerExpress.create(config, function(err, swaggerExpress) {
swaggerExpress.create(config, function(err, swaggerExpress) {
if (err) {
throw err
}
app.use(swaggerUi(swaggerExpress.runner.swagger))
swaggerExpress.register(app)
})

View File

@@ -209,6 +209,41 @@ paths:
$ref: "#/definitions/ErrorResponse"
security:
- accessTokenAuth: []
/user/adbPublicKeys:
x-swagger-router-controller: user
post:
summary: Adb public keys
description: Add adb public key for current user
operationId: addAdbPublicKey
consumes:
- application/json
produces:
- application/json
tags:
- user
parameters:
- name: adb
in: body
schema:
type: object
required:
- publickey
properties:
publickey:
type: string
description: adb public key (~/.android/id_rsa.pub)
title:
type: string
description: By default will be extracted from public key
responses:
"200":
description: Add adb key response
default:
description: Unexpected Error
schema:
$ref: "#/definitions/ErrorResponse"
security:
- accessTokenAuth: []
/devices:
x-swagger-router-controller: devices
get: