Skip to content
This repository has been archived by the owner on Jul 27, 2022. It is now read-only.

1j01/stash-auth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stash Auth

Middleware helper to authorize with Stash (via OAuth) and easily access Stash's REST APIs

Install

npm i stash-auth --save

Use

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, under STASH_API_URL/rest/
  • params: optional Object, adds parameters to the query string of the URL
  • callback: function(err, data){ ... } where data 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.