UNPKG

couchbase

Version:

The official Couchbase Node.js Client Library.

593 lines (592 loc) 18.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserManager = exports.Group = exports.UserAndMetadata = exports.User = exports.RoleAndOrigin = exports.RoleAndDescription = exports.Role = exports.Origin = void 0; const bindingutilities_1 = require("./bindingutilities"); const utilities_1 = require("./utilities"); /** * Contains information about an origin for a role. * * @category Management */ class Origin { /** * @internal */ constructor(data) { this.type = data.type; this.name = data.name; } /** * @internal */ static _fromCppData(data) { return new Origin({ type: data.type, name: data.name, }); } } exports.Origin = Origin; /** * Contains information about a role. * * @category Management */ class Role { /** * @internal */ constructor(data) { this.name = data.name; this.bucket = data.bucket; this.scope = data.scope; this.collection = data.collection; } /** * @internal */ static _fromCppData(data) { return new Role({ name: data.name, bucket: data.bucket, scope: data.scope, collection: data.collection, }); } /** * @internal */ static _toCppData(data) { return { name: data.name, bucket: data.bucket, scope: data.scope, collection: data.collection, }; } } exports.Role = Role; /** * Contains information about a role along with its description. * * @category Management */ class RoleAndDescription extends Role { /** * @internal */ constructor(data) { super(data); this.displayName = data.displayName; this.description = data.description; } /** * @internal */ static _fromCppData(data) { const role = Role._fromCppData(data); return new RoleAndDescription({ ...role, displayName: data.name, description: data.description, }); } } exports.RoleAndDescription = RoleAndDescription; /** * Contains information about a role along with its origin. * * @category Management */ class RoleAndOrigin extends Role { /** * @internal */ constructor(data) { super(data); this.origins = data.origins; } /** * @internal */ static _fromCppData(data) { const origins = data.origins.map((origin) => Origin._fromCppData(origin)); return new RoleAndOrigin({ ...Role._fromCppData({ name: data.name, bucket: data.bucket, scope: data.scope, collection: data.collection, }), origins, }); } } exports.RoleAndOrigin = RoleAndOrigin; /** * Contains information about a user. * * @category Management */ class User { /** * @internal */ constructor(data) { this.username = data.username; this.displayName = data.displayName; this.groups = data.groups; this.roles = data.roles; } /** * @internal */ static _fromCppData(data) { return new User({ username: data.username, displayName: data.display_name, groups: data.groups, roles: data.roles.map((role) => Role._fromCppData(role)), password: undefined, }); } /** * @internal */ static _toCppData(data) { const roles = []; if (data.roles) { data.roles.forEach((role) => { if (typeof role === 'string') { roles.push({ name: role, }); } else { roles.push(Role._toCppData(role)); } }); } return { username: data.username, display_name: data.displayName, groups: data.groups ? data.groups : [], roles: roles, password: data.password, }; } } exports.User = User; /** * Contains information about a user along with some additional meta-data * about that user. * * @category Management */ class UserAndMetadata extends User { /** * Same as {@link effectiveRoles}, which already contains the roles * including their origins. * * @deprecated Use {@link effectiveRoles} instead. */ get effectiveRolesAndOrigins() { return this.effectiveRoles; } /** * @internal */ constructor(data) { super(data); this.domain = data.domain; this.effectiveRoles = data.effectiveRoles; this.passwordChanged = data.passwordChanged; this.externalGroups = data.externalGroups; } /** * @internal */ static _fromCppData(data) { const user = User._fromCppData({ username: data.username, display_name: data.display_name, groups: data.groups, roles: data.roles, password: data.password, }); const effectiveRoles = data.effective_roles.map((erole) => RoleAndOrigin._fromCppData(erole)); return new UserAndMetadata({ ...user, domain: (0, bindingutilities_1.authDomainFromCpp)(data.domain), effectiveRoles: effectiveRoles, effectiveRolesAndOrigins: effectiveRoles, passwordChanged: data.password_changed ? new Date(data.password_changed) : undefined, externalGroups: data.external_groups, }); } } exports.UserAndMetadata = UserAndMetadata; /** * Contains information about a group. * * @category Management */ class Group { /** * @internal */ constructor(data) { this.name = data.name; this.description = data.description; this.roles = data.roles; this.ldapGroupReference = data.ldapGroupReference; } /** * @internal */ static _fromCppData(data) { return new Group({ name: data.name, description: data.description || '', roles: data.roles.map((role) => Role._fromCppData(role)), ldapGroupReference: data.ldap_group_reference, }); } /** * @internal */ static _toCppData(data) { const roles = []; if (data.roles) { data.roles.forEach((role) => { if (typeof role === 'string') { roles.push({ name: role, }); } else { roles.push(Role._toCppData(role)); } }); } return { name: data.name, description: data.description, roles: roles, ldap_group_reference: data.ldapGroupReference, }; } } exports.Group = Group; /** * UserManager is an interface which enables the management of users, * groups and roles for the cluster. * * @category Management */ class UserManager { /** * @internal */ constructor(cluster) { this._cluster = cluster; } /** * Returns a specific user by their username. * * @param username The username of the user to fetch. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async getUser(username, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const cppDomain = (0, bindingutilities_1.authDomainToCpp)(options.domainName || 'local'); const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementUserGet({ username: username, domain: cppDomain, timeout: timeout, }, (cppErr, resp) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(null, UserAndMetadata._fromCppData(resp.user)); }); }, callback); } /** * Returns a list of all existing users. * * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async getAllUsers(options, callback) { if (options instanceof Function) { callback = arguments[0]; options = undefined; } if (!options) { options = {}; } const cppDomain = (0, bindingutilities_1.authDomainToCpp)(options.domainName || 'local'); const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementUserGetAll({ domain: cppDomain, timeout: timeout, }, (cppErr, resp) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } const users = resp.users.map((user) => UserAndMetadata._fromCppData(user)); wrapCallback(null, users); }); }, callback); } /** * Creates or updates an existing user. * * @param user The user to update. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async upsertUser(user, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const cppDomain = (0, bindingutilities_1.authDomainToCpp)(options.domainName || 'local'); const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementUserUpsert({ user: User._toCppData(user), domain: cppDomain, timeout: timeout, }, (cppErr) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(err); }); }, callback); } /** * Change password for the currently authenticatd user. * * @param newPassword The new password to be applied. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async changePassword(newPassword, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementChangePassword({ newPassword: newPassword, timeout: timeout, }, (cppErr) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(err); }); }, callback); } /** * Drops an existing user. * * @param username The username of the user to drop. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async dropUser(username, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const cppDomain = (0, bindingutilities_1.authDomainToCpp)(options.domainName || 'local'); const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementUserDrop({ username: username, domain: cppDomain, timeout: timeout, }, (cppErr) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(err); }); }, callback); } /** * Returns a list of roles available on the server. * * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async getRoles(options, callback) { if (options instanceof Function) { callback = arguments[0]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementRoleGetAll({ timeout: timeout, }, (cppErr, resp) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } const roles = resp.roles.map((role) => Role._fromCppData(role)); wrapCallback(null, roles); }); }, callback); } /** * Returns a group by it's name. * * @param groupName The name of the group to retrieve. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async getGroup(groupName, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementGroupGet({ name: groupName, timeout: timeout, }, (cppErr, resp) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(null, Group._fromCppData(resp.group)); }); }, callback); } /** * Returns a list of all existing groups. * * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async getAllGroups(options, callback) { if (options instanceof Function) { callback = arguments[0]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementGroupGetAll({ timeout: timeout, }, (cppErr, resp) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } const groups = resp.groups.map((group) => Group._fromCppData(group)); wrapCallback(null, groups); }); }, callback); } /** * Creates or updates an existing group. * * @param group The group to update. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async upsertGroup(group, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementGroupUpsert({ group: Group._toCppData(group), timeout: timeout, }, (cppErr) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(err); }); }, callback); } /** * Drops an existing group. * * @param groupName The name of the group to drop. * @param options Optional parameters for this operation. * @param callback A node-style callback to be invoked after execution. */ async dropGroup(groupName, options, callback) { if (options instanceof Function) { callback = arguments[1]; options = undefined; } if (!options) { options = {}; } const timeout = options.timeout || this._cluster.managementTimeout; return utilities_1.PromiseHelper.wrap((wrapCallback) => { this._cluster.conn.managementGroupDrop({ name: groupName, timeout: timeout, }, (cppErr) => { const err = (0, bindingutilities_1.errorFromCpp)(cppErr); if (err) { return wrapCallback(err, null); } wrapCallback(err); }); }, callback); } } exports.UserManager = UserManager;