blob: 22e4544a6e25cc2697c5e4704e9f026d1c036e23 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/**
* @fileoverview Blessings stub of vanadium identities
* @private
*/
var vlog = require('../lib/vlog');
var JsBlessings =
require('../gen-vdl/v.io/x/ref/services/wspr/internal/principal').JsBlessings;
/**
* @summary Blessings encapsulates all cryptographic operations
* required to prove that a set of (human-readable) blessing names are
* bound to a principal in a specific call.
* @description <p> Blessings encapsulates all cryptographic operations
* required to prove that a set of (human-readable) blessing names are
* bound to a principal in a specific call.</p>
* <p>Blessings objects are meant to be presented to other principals to
* authenticate and authorize actions.</p>
* @constructor
* @memberof module:vanadium.security
* @inner
*/
function Blessings(id, publicKey, controller) {
this._id = id;
this._count = 1;
this._controller = controller;
this.publicKey = publicKey;
}
/**
* Increments the reference count on the Blessings. When the reference count
* goes to zero, the Blessings will be removed from the cache in the go code.
*/
Blessings.prototype.retain = function() {
this._count++;
};
/**
* Decrements the reference count on the Blessings. When the reference count
* goes to zero, the Blessings will be removed from the cache in the go code.
*/
Blessings.prototype.release = function(ctx) {
this._count--;
if (this._count === 0) {
this._controller.unlinkBlessings(ctx, this._id).catch(function(err) {
vlog.logger.warn('Ignoring failure while cleaning up blessings: ' + err);
});
}
};
Blessings.prototype.toJSON = function() {
return {
id: this._id,
publicKey: this.publicKey,
};
};
/**
* Get a string that describes this blessings object.
* @return {Promise} A promise to a string describing the blessings.
* @private
*/
Blessings.prototype._debugString = function(ctx) {
return this._controller.blessingsDebugString(ctx, this._id);
};
Blessings.prototype.convertToJsBlessings = function() {
return new JsBlessings({
handle: this._id,
publicKey: this.publicKey
}, true);
};
module.exports = Blessings;