| 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}`; |
| } |