44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
module.exports = authenticationBeforeRequest;
|
|
|
|
const btoa = require("btoa-lite");
|
|
const uniq = require("lodash.uniq");
|
|
|
|
function authenticationBeforeRequest(state, options) {
|
|
if (!state.auth.type) {
|
|
return;
|
|
}
|
|
|
|
if (state.auth.type === "basic") {
|
|
const hash = btoa(`${state.auth.username}:${state.auth.password}`);
|
|
options.headers.authorization = `Basic ${hash}`;
|
|
return;
|
|
}
|
|
|
|
if (state.auth.type === "token") {
|
|
options.headers.authorization = `token ${state.auth.token}`;
|
|
return;
|
|
}
|
|
|
|
if (state.auth.type === "app") {
|
|
options.headers.authorization = `Bearer ${state.auth.token}`;
|
|
const acceptHeaders = options.headers.accept
|
|
.split(",")
|
|
.concat("application/vnd.github.machine-man-preview+json");
|
|
options.headers.accept = uniq(acceptHeaders)
|
|
.filter(Boolean)
|
|
.join(",");
|
|
return;
|
|
}
|
|
|
|
options.url += options.url.indexOf("?") === -1 ? "?" : "&";
|
|
|
|
if (state.auth.token) {
|
|
options.url += `access_token=${encodeURIComponent(state.auth.token)}`;
|
|
return;
|
|
}
|
|
|
|
const key = encodeURIComponent(state.auth.key);
|
|
const secret = encodeURIComponent(state.auth.secret);
|
|
options.url += `client_id=${key}&client_secret=${secret}`;
|
|
}
|