Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | 1x 1x 1x 1x 1x 24x 24x 24x 23x 23x 23x 1x 24x 1x | /*!
GPII Access Requester
Copyright 2017 OCAD University
Licensed under the New BSD license. You may not use this file except in
compliance with this License.
You may obtain a copy of the License at
https://github.com/GPII/universal/blob/master/LICENSE.txt
*/
"use strict";
var fluid = fluid || require("infusion"),
gpii = fluid.registerNamespace("gpii"),
$ = fluid.registerNamespace("jQuery");
/*
* Access Requester provides getAccessToken(userToken) API that returns a promise object whose resolved value is the access token.
* When this API is called, the access requester does:
* 1. Retrieves client credentials;
* 2. Communicate with GPII Cloud end point via [resource owner GPII token grant](https://wiki.gpii.net/w/GPII_OAuth_2_Guide#Resource_Owner_GPII_Token_Grant);
* 3. Retrieves and returns a promise object whose resolved value contains the access token responded by the GPII Cloud /access_token endpoint;
*
* Access Requester requires these input options:
* @url {String} The GPII cloud http end point to request access tokens granted by OAuth2 resource owner GPII token grant.
* such as https://flowmanager.gpii.net/access_token
* @clientCredentialDataSourceGrade {String or Array of Strings} The grade name of the implementation of "clientCredentialDataSource" subcomponent
* that provides a get() API that returns a promise object whose resolved value is the client credential.
*/
fluid.defaults("gpii.accessRequester", {
gradeNames: ["fluid.component"],
// These options must be provided by integrators
url: "/access_token", // Must be provided by integrators. The API endpoint provided by the authorization server to request access tokens via Resource Owner GPII Token Grant
clientCredentialDataSourceGrade: null, // Must be provided by integrators
// End of integrators provided options
distributeOptions: {
source: "{that}.options.clientCredentialDataSourceGrade",
target: "{that > clientCredentialDataSource}.options.gradeNames"
},
components: {
clientCredentialDataSource: {
type: "fluid.component"
},
accessTokenDataSource: {
type: "kettle.dataSource.URL",
options: {
url: "{accessRequester}.options.url",
writable: true,
writeMethod: "POST",
dataSourceModel: {
grant_type: "password",
password: "dummy"
}
}
}
},
invokers: {
getAccessToken: {
funcName: "gpii.accessRequester.getAccessToken",
args: ["{that}.clientCredentialDataSource", "{that}.accessTokenDataSource", "{arguments}.0"]
// userToken
}
}
});
gpii.accessRequester.getAccessToken = function (clientCredentialDataSource, accessTokenDataSource, userToken) {
var promiseTogo = fluid.promise();
var clientCredentialPromise = clientCredentialDataSource.get();
clientCredentialPromise.then(function (clientCredential) {
var accessTokenRequestParams = $.extend({}, accessTokenDataSource.options.dataSourceModel, clientCredential, {
username: userToken
});
var accessTokenPromise = accessTokenDataSource.set(null, accessTokenRequestParams);
fluid.promise.follow(accessTokenPromise, promiseTogo);
}, function (err) {
promiseTogo.reject(err);
});
return promiseTogo;
};
/***********************************
Client Credential File Data Source
***********************************/
// The client credential is read from a file
fluid.defaults("gpii.accessRequester.clientCredentialDataSource.file", {
gradeNames: ["kettle.dataSource.file.moduleTerms"],
path: "%gpii-universal/testData/clientCredentials/pilot.json"
});
|