diff --git a/lib/models/api-key.js b/lib/models/api-key.js index c2b88c8..8e40ec3 100644 --- a/lib/models/api-key.js +++ b/lib/models/api-key.js @@ -27,6 +27,25 @@ class ApiKey extends Model { }); } + /** + * list all api keys for a service provider + */ + static retrieveAllForSP(service_provider_sid) { + const sql = 'SELECT * from api_keys WHERE service_provider_sid = ?'; + const args = [service_provider_sid]; + + return new Promise((resolve, reject) => { + getMysqlConnection((err, conn) => { + if (err) return reject(err); + conn.query(sql, args, (err, results) => { + conn.release(); + if (err) return reject(err); + resolve(results); + }); + }); + }); + } + /** * update last_used api key for an account */ diff --git a/lib/routes/api/service-providers.js b/lib/routes/api/service-providers.js index be38782..221ef67 100644 --- a/lib/routes/api/service-providers.js +++ b/lib/routes/api/service-providers.js @@ -7,6 +7,7 @@ const Account = require('../../models/account'); const VoipCarrier = require('../../models/voip-carrier'); const Application = require('../../models/application'); const PhoneNumber = require('../../models/phone-number'); +const ApiKey = require('../../models/api-key'); const {hasServiceProviderPermissions, parseServiceProviderSid} = require('./utils'); const sysError = require('../error'); const decorate = require('./decorate'); @@ -114,6 +115,18 @@ router.get(':sid/Acccounts', async(req, res) => { sysError(logger, res, err); } }); +router.get('/:sid/ApiKeys', async(req, res) => { + const logger = req.app.locals.logger; + const {sid} = req.params; + try { + const results = await ApiKey.retrieveAllForSP(sid); + res.status(200).json(results); + await ApiKey.updateLastUsed(sid); + } catch (err) { + sysError(logger, res, err); + } +}); + /* add */ router.post('/', async(req, res) => { diff --git a/test/service-providers.js b/test/service-providers.js index 5471f6a..bf874f0 100644 --- a/test/service-providers.js +++ b/test/service-providers.js @@ -106,6 +106,33 @@ test('service provider tests', async(t) => { }); t.ok(result.statusCode === 204, 'successfully updated service provider'); + /* add an api key for a service provider */ + result = await request.post(`/ApiKeys`, { + auth: authAdmin, + json: true, + resolveWithFullResponse: true, + body: { + service_provider_sid: sid + } + }); + t.ok(result.statusCode === 201, 'successfully added an api_key for a service provider'); + const apiKeySid = result.body.sid; + + /* query all api keys for a service provider */ + result = await request.get(`/ServiceProviders/${sid}/ApiKeys`, { + auth: authAdmin, + json: true, + }); + t.ok(result.length === 1 , 'successfully queried all service provider keys'); + + /* delete an api key */ + result = await request.delete(`/ApiKeys/${apiKeySid}`, { + auth: authAdmin, + json: true, + resolveWithFullResponse: true, + }); + t.ok(result.statusCode === 204, 'successfully deleted an api_key for a service provider'); + /* add a predefined carrier for a service provider */ result = await request.post(`/ServiceProviders/${sid}/PredefinedCarriers/7d509a18-bbff-4c5d-b21e-b99bf8f8c49a`, { auth: authAdmin,