Middleware helper to authorize with Stash (via OAuth) and easily access Stash's REST APIs
npm i stash-auth --save
var StashAuth = require("stash-auth");
var stash = new StashAuth(
STASH_API_URL, // e.g. http://localhost:7990/stash
STASH_CONSUMER_KEY, // can be anything, as long as it's the same as in Stash
PRIVATE_KEY_DATA, // fs.readFileSync("server.key", "utf8")
STASH_CALLBACK_FULL_URL // full, remote-accessable url (including protocol, host and path) to the auth callback route on this server
);
app.use("/stash/auth-callback", stash.authCallback);
The stash.auth
middleware will authorize with Stash
before redirecting back to the original URL
(through the auth callback route)
If a user is already authorized,
it invokes the next middleware,
where you have access to req.stash
app.use("/commits/:project/:repo/", stash.auth, function (req, res, next) {
var project = req.params.project;
var repo = req.params.repo;
var api_url = "api/1.0/projects/" + project + "/repos/" + repo + "/commits";
req.stash.get(api_url, function (err, data) {
if (err) {
next(err);
} else {
res.send(data);
}
});
});
There are methods on req.stash
corresponding to HTTP methods
supported by 1j01/node-oauth:
get
, post
, put
and delete
.
Each method takes the following parameters:
- url:
String
, underSTASH_API_URL/rest/
- params: optional
Object
, adds parameters to the query string of the URL - callback:
function(err, data){ ... }
wheredata
is the parsed JSON
You can pass parameters through the url
, or with params
, or you can mix the two,
e.g. req.stash.get("api/1.0/quux?foo=1", {bar: 2})
Additionally there is a getAll
method,
which will try to fetch every item from every page
in a paged API.
This method isn't particularly recommended,
as it circumvents not just the pagination,
but the purpose of the pagination.