stash-auth

Authorize with Atlassian Stash

Usage no npm install needed!

<script type="module">
  import stashAuth from 'https://cdn.skypack.dev/stash-auth';
</script>

README

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.