@creative-realities/role-provider-client
v2.0.0
Published
A node package for signing Role Prover requests.
Readme
Role Provider Client
A node package for signing Role Prover requests.
Example setup
It would be better to pull configuration data from a config file. But for example:
var roleProviderConfig = {
service_name: "My Service",
service_id: "507f1f77bcf86cd799439011",
secret_key: "188bc580-8e50-11e5-8994-feff819cdc9f",
role_provider_host: "roles.dev.reflect.systems" // Optional. Defaults to "roles.reflect.systems"
};
var roleProviderClient = require("role-provider-client")(roleProviderConfig);Example usage
var method = "POST";
var uri = "/api/users";
var authHeader = roleProviderClient.getAuthHeader(method, uri, req.session.token);Optional app
Loading api with express app.
- The app is assumed to have session middleware.
- The app is assumed to have a body parser.
roleProviderClient.loadAPI(app);Other config options:
var roleProviderConfig = {
// ...
roleProviderApiRoute: "/api/stuff", // defaults to "/api/roles"
loginRoute: "/login-stuff" // defaults to "/login"
};It is up to you to implement the login page at the loginRoute, which should load an iframe from the role provider server. Example is in the ad-server-front repository. It is also up to you to implement the client side portion of the API that this package provides.
Auth middleware
app.use(roleProviderClient.authMiddleware);
The authMiddleware whitelist is an optional object whose keys are routes, and values maybe be arrays of actions or simply "*" to whitelist all actions or to whitelist a route that doesn't use actions. The loginRoute will default to "*".
The whitelisted routes and actions will pass through the authMiddleware without requiring an authenticated session user.
roleProviderConfig.middlewareWhitelist = {
"/api/public": "*",
"/api/semi-public": ["getPublic", "doFunStuff"]
};
var roleProviderClient = require("role-provider-client")(app, roleProviderConfig);Callbacks
var route = "/account";
var action = "getAccount";
roleProviderClient.on(route, action, function(data, next) {
// If response body was JSON, data will be an object. Otherwise it is a String.
...
// In case of an error
if (error)
return next({status: 404, message: "Error message"});
...
// success
next();
});