Skip to content

Commit

Permalink
Merge pull request #24 from PlayNetwork/v1.0.24
Browse files Browse the repository at this point in the history
V1.0.24
  • Loading branch information
brozeph committed Aug 16, 2016
2 parents f875e43 + 56e7a51 commit 4ce057c
Show file tree
Hide file tree
Showing 6 changed files with 347 additions and 23 deletions.
4 changes: 4 additions & 0 deletions history.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# v1.0.24 - 2016/08/16

* Added `#validateClient` and `#validateToken` methods to `key` sub-module

# v1.0.23 - 2016/08/09

* Fixed internal issue where a `timeout` value specified at-the-time-of-request would not be applied appropriately to the request
Expand Down
25 changes: 13 additions & 12 deletions lib/content.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const
DEFAULT_HOST = 'content-api.apps.playnetwork.com',
DEFAULT_SECURE = true,
EVENT_REDIRECT = 'redirect',
EVENT_ERROR = 'error',
EVENT_REQUEST = 'request',
EVENT_RESPONSE = 'response',
STATUS_CODE_SUCCESS = 200,
Expand Down Expand Up @@ -94,14 +95,14 @@ module.exports = function (contentOptions, ensureAuthHeaders, self) {
let
assetId,
handleError = (err) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return reject(err);
},
handleResponse = (result) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return resolve(result.statusCode === STATUS_CODE_SUCCESS);
};
Expand All @@ -124,8 +125,8 @@ module.exports = function (contentOptions, ensureAuthHeaders, self) {
query : options
});

req.on('error', handleError);
req.on('response', handleResponse);
req.on(EVENT_ERROR, handleError);
req.on(EVENT_RESPONSE, handleResponse);
})
.catch(handleError);
});
Expand All @@ -150,14 +151,14 @@ module.exports = function (contentOptions, ensureAuthHeaders, self) {
let
alias,
handleError = (err) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return reject(err);
},
handleResponse = (result) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return resolve(result.statusCode === STATUS_CODE_SUCCESS);
};
Expand All @@ -180,8 +181,8 @@ module.exports = function (contentOptions, ensureAuthHeaders, self) {
query : options
});

req.on('error', handleError);
req.on('response', handleResponse);
req.on(EVENT_ERROR, handleError);
req.on(EVENT_RESPONSE, handleResponse);
})
.catch(handleError);
});
Expand Down
119 changes: 115 additions & 4 deletions lib/key.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,13 @@ const
DEFAULT_CREDENTIALS_PATH = '.playnetwork/credentials.json',
DEFAULT_HOST = 'key-api.apps.playnetwork.com',
DEFAULT_SECURE = true,
EVENT_DATA = 'data',
EVENT_END = 'end',
EVENT_ERROR = 'error',
EVENT_REQUEST = 'request',
EVENT_RESPONSE = 'response';
EVENT_RESPONSE = 'response',
STATUS_CODE_NOT_FOUND = 404,
STATUS_CODE_SUCCESS = 200;


module.exports = function (keyOptions, clientId, secret, self) {
Expand Down Expand Up @@ -123,17 +128,17 @@ module.exports = function (keyOptions, clientId, secret, self) {
DEFAULT_CREDENTIALS_PATH));
fileReader = fs.createReadStream(filePath, { encoding : 'utf8' });

fileReader.on('data', (chunk) => (data.push(chunk)));
fileReader.on(EVENT_DATA, (chunk) => (data.push(chunk)));

fileReader.on('end', () => {
fileReader.on(EVENT_END, () => {
let credentials = JSON.parse(data);
clientId = credentials.clientId;
secret = credentials.secret;

return generateToken();
});

fileReader.on('error', (err) => {
fileReader.on(EVENT_ERROR, (err) => {
err.path = filePath;

return reject(err);
Expand Down Expand Up @@ -203,6 +208,112 @@ module.exports = function (keyOptions, clientId, secret, self) {

self.settings = () => (settings);

self.validateClient = (clientId, serviceId, callback) => {
let exec = new Promise((resolve, reject) => {
if (validation.isEmpty(clientId)) {
return reject(new Error('clientId is required'));
}

if (validation.isEmpty(serviceId)) {
return reject(new Error('serviceId is required'));
}

let
handleError = (err) => {
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return reject(err);
},
handleResponse = (result) => {
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return resolve(result.statusCode === STATUS_CODE_SUCCESS);
};

// issue request
req.head({
headers : {
'x-client-id' : clientId,
'x-service-id' : serviceId
},
path : `/v0/clients/${clientId}`
});

req.on(EVENT_ERROR, handleError);
req.on(EVENT_RESPONSE, handleResponse);
});

return validation.promiseOrCallback(exec, callback);
};

self.validateToken = (clientId, token, serviceId, callback) => {
// handle any non-specified input params
if (typeof serviceId === 'function') {
callback = serviceId;
serviceId = undefined;
}

let exec = new Promise((resolve, reject) => {
if (validation.isEmpty(clientId)) {
return reject(new Error('clientId is required'));
}

if (validation.isEmpty(token)) {
return reject(new Error('token is required'));
}

// determine if a valid token exists
let
checkToken = tokenMap.get(clientId),
headers = {
'x-client-id' : clientId
};

// check to see if the token has already been validated...
if (checkToken && checkToken.expires >= new Date()) {
return resolve(true);
} else {
// ensure the tokenMap is cleared for the specified clientId
tokenMap.delete(clientId);
}

// add serviceId header if supplied
if (!validation.isEmpty(serviceId)) {
headers['x-service-id'] = serviceId;
}

// issue request
return req
.get({
headers : headers,
path : `/v0/tokens/${typeof token === 'string' ? token : token.tokenId}`
})
.then((result) => {
token = validation.isEmpty(result.token) ? result : result.token;
token.modified = undefined;
token.created = undefined;
token.expires = new Date(token.expires);

if (settings.cacheTokens) {
tokenMap.set(clientId, token);
}

return resolve(true);
})
.catch((err) => {
if (validation.isEmpty(err.statusCode) || err.statusCode !== STATUS_CODE_NOT_FOUND) {
return reject(err);
}

return resolve(false);
});
});

return validation.promiseOrCallback(exec, callback);
};

self.version = (callback) => {
let exec = co(function *() {
return yield req.get({
Expand Down
13 changes: 7 additions & 6 deletions lib/music.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ var
const
DEFAULT_HOST = 'curio-music-api.apps.playnetwork.com',
DEFAULT_SECURE = true,
EVENT_ERROR = 'error',
EVENT_REQUEST = 'request',
EVENT_RESPONSE = 'response',
STATUS_CODE_SUCCESS = 200,
Expand Down Expand Up @@ -329,14 +330,14 @@ module.exports = function (musicOptions, ensureAuthHeaders, self) {
let
alias,
handleError = (err) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return reject(err);
},
handleResponse = (result) => {
req.removeListener('error', handleError);
req.removeListener('response', handleResponse);
req.removeListener(EVENT_ERROR, handleError);
req.removeListener(EVENT_RESPONSE, handleResponse);

return resolve(result.statusCode === STATUS_CODE_SUCCESS);
};
Expand All @@ -362,8 +363,8 @@ module.exports = function (musicOptions, ensureAuthHeaders, self) {
pathname : `/v2/playlists/${playlistId}/tracks/${alias}`
});

req.on('error', handleError);
req.on('response', handleResponse);
req.on(EVENT_ERROR, handleError);
req.on(EVENT_RESPONSE, handleResponse);
})
.catch(handleError);
});
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "playnetwork-sdk",
"version": "1.0.23",
"version": "1.0.24",
"contributors": [
{
"name": "Joshua Thomas",
Expand Down

0 comments on commit 4ce057c

Please sign in to comment.