| // 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. |
| |
| var createSecurityCall = require('../security/create-security-call'); |
| |
| module.exports = createServerCall; |
| |
| /** |
| * Create a server call object. This exists so that we can resolve blessings |
| * before the user is given the object. |
| * @private |
| */ |
| function createServerCall(request, blessingsCache) { |
| var serverCall = new ServerCall(); |
| if (request instanceof ServerCall) { |
| serverCall.securityCall = request.securityCall.clone(); |
| serverCall.grantedBlessings = request.grantedBlessings; |
| return Promise.resolve(serverCall); |
| } else { |
| var promises = []; |
| promises.push(createSecurityCall(request.call.securityCall, |
| blessingsCache).then(function(securityCall) { |
| serverCall.securityCall = securityCall; |
| })); |
| if (request.call.grantedBlessings) { |
| promises.push( |
| blessingsCache.blessingsFromId(request.call.grantedBlessings) |
| .then(function(grantedBlessings) { |
| serverCall.grantedBlessings = grantedBlessings; |
| }) |
| ); |
| } |
| return Promise.all(promises).then(function() { |
| return serverCall; |
| }); |
| } |
| } |
| |
| /** |
| * @summary |
| * A ServerCall is a context.Context subclass that includes additional |
| * information about an ongoing server call. |
| * @description |
| * <p>Private Constructor, an instance of ServerCall is passed to every service |
| * method as the first argument.</p> |
| * @inner |
| * @constructor |
| * |
| * @property {module:vanadium.security~SecurityCall} securityCall The |
| * Security Call for the request. |
| * |
| * @property {module:vanadium.security~Blessings} grantedBlessings The |
| * blessings optionally granted to the server from the client through a |
| * granter. |
| * |
| * @property {*} methodTags The tags attached to the method, |
| * interface specification in VDL. |
| * |
| * @memberof module:vanadium.rpc |
| */ |
| function ServerCall() { |
| } |