apigee-edge-js
Version:
nodejs library for the administration API for Apigee (Edge and X and hybrid).
182 lines (166 loc) • 5.77 kB
JavaScript
// developer.js
// ------------------------------------------------------------------
// Copyright 2018-2023 Google LLC.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
/* jshint esversion:9, node:true, strict:implied */
/* global Buffer, process */
const utility = require("./utility.js"),
common = require("./common.js"),
promiseWrap = require("./promiseWrap.js"),
request = require("postman-request"),
urljoin = require("url-join"),
path = require("path"),
sprintf = require("sprintf-js").sprintf;
function Developer(conn) {
this.conn = conn;
}
Developer.prototype.create = promiseWrap(function (options, cb) {
// POST :mgmtserver/v1/o/:orgname/developers
// Authorization: :apigee-auth
// Content-type: application/json
//
// {
// "attributes": [ {
// "name" : "tag1",
// "value" : "whatever you like" }],
// "status": "active",
// "userName": "test-3a-HiDxfHvHrB",
// "lastName": "Martino",
// "firstName": "Dino",
// "email": "tet-3a-HiDxfHvHrB@apigee.com"
// }
let conn = this.conn,
email = options.developerEmail || options.email;
if (!email || !options.firstName || !options.lastName || !options.userName) {
return cb(
new Error(
"missing required inputs, one of {email, firstName, lastName, userName}"
)
);
}
if (conn.isGoogle()) {
email = email.toLowerCase();
}
if (conn.verbosity > 0) {
utility.logWrite(sprintf("Create Developer %s", email));
}
common.insureFreshToken(conn, function (requestOptions) {
requestOptions.headers["content-type"] = "application/json";
requestOptions.url = urljoin(conn.urlBase, "developers");
let tool = "nodejs " + path.basename(process.argv[1]),
devAttributes = common.hashToArrayOfKeyValuePairs({
...options.attributes,
tool
});
requestOptions.body = JSON.stringify({
attributes: devAttributes,
userName: options.userName,
firstName: options.firstName,
lastName: options.lastName,
email
});
if (conn.verbosity > 0) {
utility.logWrite(sprintf("POST %s", requestOptions.url));
}
//request.debug = true;
request.post(requestOptions, common.callback(conn, [201], cb));
});
});
Developer.prototype.del = promiseWrap(function (options, cb) {
// DELETE :mgmtserver/v1/o/:orgname/developers/:developer
// Authorization: :apigee-auth
let conn = this.conn,
email = options.developerEmail || options.email;
if (!email) {
return cb(new Error("missing developerEmail"));
}
if (conn.isGoogle()) {
email = email.toLowerCase();
}
if (conn.verbosity > 0) {
utility.logWrite(sprintf("Delete Developer %s", email));
}
common.insureFreshToken(conn, function (requestOptions) {
requestOptions.url = urljoin(conn.urlBase, "developers", email);
if (conn.verbosity > 0) {
utility.logWrite(sprintf("DELETE %s", requestOptions.url));
}
request.del(requestOptions, common.callback(conn, [200], cb));
});
});
Developer.prototype.get = promiseWrap(function (options, cb) {
let conn = this.conn;
if (!cb) {
cb = options;
options = {};
}
common.insureFreshToken(conn, function (requestOptions) {
let email = options.developerEmail || options.email;
if (email && conn.isGoogle()) {
email = email.toLowerCase();
}
let discriminator = email || options.developerId || options.id;
requestOptions.url = discriminator
? urljoin(conn.urlBase, "developers", discriminator)
: urljoin(conn.urlBase, "developers");
if (conn.verbosity > 0) {
utility.logWrite(sprintf("GET %s", requestOptions.url));
}
request.get(requestOptions, common.callback(conn, [200], cb));
});
});
function revokeOrApprove(conn, options, cb) {
// POST -H content-type:application/octet-stream
// /v1/o/ORGNAME/developers/DEVELOPERID?action=ACTION
if (options.action != "revoke" && options.action != "approve") {
return cb(new Error("missing or invalid action"));
}
let email = options.developerEmail || options.email;
if (email && conn.isGoogle()) {
email = email.toLowerCase();
}
let discriminator =
email || options.developer || options.developerId || options.id;
if (!discriminator) {
return cb(new Error("missing developer ID or email"));
}
let urlTail = sprintf("developers/%s", discriminator);
if (conn.verbosity > 0) {
utility.logWrite(sprintf("%s developer %s", options.action, urlTail));
}
common.insureFreshToken(conn, function (requestOptions) {
requestOptions.url = urljoin(
conn.urlBase,
sprintf(
"%s?action=%s",
urlTail,
options.action == "revoke" ? "inactive" : "active"
)
);
if (conn.verbosity > 0) {
utility.logWrite(sprintf("POST %s", requestOptions.url));
}
request.post(requestOptions, common.callback(conn, [204], cb));
});
}
Developer.prototype.revoke = promiseWrap(function (options, cb) {
let conn = this.conn;
revokeOrApprove(conn, { ...options, action: "revoke" }, cb);
});
Developer.prototype.approve = promiseWrap(function (options, cb) {
let conn = this.conn;
revokeOrApprove(conn, { ...options, action: "approve" }, cb);
});
module.exports = Developer;