You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							1.9 KiB
						
					
					
				var jwt = require('jsonwebtoken'),
 | 
						|
    qs = require('querystring'),
 | 
						|
    utils = require('./utils');
 | 
						|
 | 
						|
function Capability(sid, tkn) {
 | 
						|
    if(!(this instanceof Capability)) {
 | 
						|
      return new Capability(sid, tkn);
 | 
						|
    }
 | 
						|
 | 
						|
    utils.initializeTokens(this, 'Capability', sid, tkn);
 | 
						|
    this.capabilities = [];
 | 
						|
}
 | 
						|
 | 
						|
function scopeUriFor(service, privilege, params) {
 | 
						|
    var scopeUri = 'scope:'+service+':'+privilege;
 | 
						|
    if (params) {
 | 
						|
        scopeUri = scopeUri+'?'+qs.stringify(params);
 | 
						|
    }
 | 
						|
    return scopeUri;
 | 
						|
}
 | 
						|
 | 
						|
Capability.prototype.allowClientIncoming = function(clientName) {
 | 
						|
    this.clientName = clientName;
 | 
						|
    this.capabilities.push(scopeUriFor('client', 'incoming', {
 | 
						|
        clientName:clientName
 | 
						|
    }));
 | 
						|
 | 
						|
    return this;
 | 
						|
};
 | 
						|
 | 
						|
Capability.prototype.allowClientOutgoing = function(appSid, params) {
 | 
						|
    this.outgoingScopeParams = {
 | 
						|
        appSid:appSid
 | 
						|
    };
 | 
						|
 | 
						|
    if (params) {
 | 
						|
        this.outgoingScopeParams.appParams = qs.stringify(params);
 | 
						|
    }
 | 
						|
 | 
						|
    return this;
 | 
						|
};
 | 
						|
 | 
						|
Capability.prototype.allowEventStream = function(filters) {
 | 
						|
    var scopeParams = {
 | 
						|
        path:'/2010-04-01/Events'
 | 
						|
    };
 | 
						|
 | 
						|
    if (filters) {
 | 
						|
        scopeParams.params = filters;
 | 
						|
    }
 | 
						|
 | 
						|
    this.capabilities.push(scopeUriFor('stream', 'subscribe', scopeParams));
 | 
						|
    return this;
 | 
						|
};
 | 
						|
 | 
						|
Capability.prototype.generate = function(timeout) {
 | 
						|
    var capabilities = this.capabilities.slice(0),
 | 
						|
        expires = timeout||3600;
 | 
						|
 | 
						|
    //Build outgoing scope params lazily to use clientName (if it exists)
 | 
						|
    if (this.outgoingScopeParams) {
 | 
						|
        if (this.clientName) {
 | 
						|
            this.outgoingScopeParams.clientName = this.clientName;
 | 
						|
        }
 | 
						|
        capabilities.push(scopeUriFor('client', 'outgoing', this.outgoingScopeParams));
 | 
						|
    }
 | 
						|
 | 
						|
    var payload = {
 | 
						|
        scope: capabilities.join(' '),
 | 
						|
        iss: this.accountSid,
 | 
						|
        exp: Math.floor(new Date() / 1000) + expires
 | 
						|
    };
 | 
						|
 | 
						|
    return jwt.sign(payload, this.authToken);
 | 
						|
};
 | 
						|
 | 
						|
module.exports = Capability;
 |