/* global conjur, jQuery, _ */ (function(conjur, $, errback, _) { 'use strict'; var Generic = this.Generic = function(kind, id) { this.kind = kind; this.id = id; }; function ajax(url, callback, err) { $.ajax({ url: url, success: function(data) { callback(null, data); }, error: err || callback }); } Generic.prototype.attributes = function(callback) { var id = this.id; ajax('/api/'+ conjur.utils.pluralize(this.kind) + '/' + window.encodeURIComponent(id), callback); }; Generic.prototype.auditRole = function(callback) { var id = this.id; ajax('/api/audit/roles/' + window.encodeURIComponent(conjur.app.configuration.account + ':' + this.kind + ':' + id), callback, function() { return callback(null, []); }); }; Generic.prototype.auditResource = function(callback) { var id = this.id; ajax('/api/audit/resources/' + window.encodeURIComponent(conjur.app.configuration.account + ':' + this.kind + ':' + id), callback, function() { return callback(null, []); }); }; Generic.prototype.mergeAudit = function(d1, d2) { return _.uniq(d1.concat(d2), function(item, key, a) { return item.id; }); }; Generic.prototype.resource = function(callback) { ajax('/api/authz/' + conjur.app.configuration.account + '/resources/' + this.kind + '/' + window.encodeURIComponent(this.id), callback); }; Generic.prototype.ownedResources = function(callback) { var roleid = [this.kind, this.id].join(':'); ajax('/api/authz/' + conjur.app.configuration.account + '/resources?owner=' + roleid, function(err, result) { if (typeof result.filter === 'function') { result = result.filter(function(item) { // assets of 'secret' kind are internal return item.id.split(':')[1] !== 'secret'; }); } callback(err, result); }); }; Generic.prototype.allRoles = function(callback) { ajax('/api/authz/' + conjur.app.configuration.account + '/roles/' + window.encodeURIComponent(this.kind) + '/' + window.encodeURIComponent(this.id) + '?all', callback); }; Generic.prototype.fetch = function(callback) { this.attributes(function(err, data) { if (err) { return errback(err); } return callback(data); }); }; }).bind(conjur.models.Record) ( conjur, jQuery, conjur.utils.errback, _ );