12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- module.exports = authenticationPlugin;
- const { createTokenAuth } = require("@octokit/auth-token");
- const { Deprecation } = require("deprecation");
- const once = require("once");
- const beforeRequest = require("./before-request");
- const requestError = require("./request-error");
- const validate = require("./validate");
- const withAuthorizationPrefix = require("./with-authorization-prefix");
- const deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation));
- const deprecateAuthObject = once((log, deprecation) => log.warn(deprecation));
- function authenticationPlugin(octokit, options) {
- // If `options.authStrategy` is set then use it and pass in `options.auth`
- if (options.authStrategy) {
- const auth = options.authStrategy(options.auth);
- octokit.hook.wrap("request", auth.hook);
- octokit.auth = auth;
- return;
- }
- // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
- // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred.
- if (!options.auth) {
- octokit.auth = () =>
- Promise.resolve({
- type: "unauthenticated"
- });
- return;
- }
- const isBasicAuthString =
- typeof options.auth === "string" &&
- /^basic/.test(withAuthorizationPrefix(options.auth));
- // If only `options.auth` is set to a string, use the default token authentication strategy.
- if (typeof options.auth === "string" && !isBasicAuthString) {
- const auth = createTokenAuth(options.auth);
- octokit.hook.wrap("request", auth.hook);
- octokit.auth = auth;
- return;
- }
- // Otherwise log a deprecation message
- const [deprecationMethod, deprecationMessapge] = isBasicAuthString
- ? [
- deprecateAuthBasic,
- 'Setting the "new Octokit({ auth })" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)'
- ]
- : [
- deprecateAuthObject,
- 'Setting the "new Octokit({ auth })" option to an object without also setting the "authStrategy" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)'
- ];
- deprecationMethod(
- octokit.log,
- new Deprecation("[@octokit/rest] " + deprecationMessapge)
- );
- octokit.auth = () =>
- Promise.resolve({
- type: "deprecated",
- message: deprecationMessapge
- });
- validate(options.auth);
- const state = {
- octokit,
- auth: options.auth
- };
- octokit.hook.before("request", beforeRequest.bind(null, state));
- octokit.hook.error("request", requestError.bind(null, state));
- }
|