backport
Version:
A CLI tool that automates the process of backporting commits
50 lines • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getInvalidAccessTokenMessage = void 0;
const lodash_1 = require("lodash");
const maybe_1 = require("../../../utils/maybe");
const env_1 = require("../../env");
const logger_1 = require("../../logger");
function getInvalidAccessTokenMessage({ result, repoOwner, repoName, globalConfigFile, }) {
function getSSOAuthUrl(ssoHeader) {
const matches = ssoHeader?.match(/url=(.*)/);
if (matches) {
return matches[1];
}
}
const { statusCode } = result;
const graphQLErrors = (result.error?.graphQLErrors ??
[]);
switch (statusCode) {
case 200: {
const repoNotFound = graphQLErrors.some(({ originalError, path }) => originalError?.type === 'NOT_FOUND' &&
path?.join('.') === 'repository');
const grantedScopes = result.responseHeaders?.get('x-oauth-scopes') || '';
const requiredScopes = result.responseHeaders?.get('x-accepted-oauth-scopes') || '';
const ssoHeader = (0, maybe_1.maybe)(result.responseHeaders?.get('x-github-sso'));
if (repoNotFound) {
const hasRequiredScopes = (0, lodash_1.isEmpty)((0, lodash_1.difference)(requiredScopes.split(','), grantedScopes.split(',')));
// user does not have permission to the repo
if (!hasRequiredScopes) {
return `You do not have access to the repository "${repoOwner}/${repoName}". Please make sure your access token has the required scopes.\n\nRequired scopes: ${requiredScopes}\nAccess token scopes: ${grantedScopes}`;
}
// repo does not exist
return `The repository "${repoOwner}/${repoName}" doesn't exist`;
}
const repoAccessForbidden = graphQLErrors.some(({ extensions }) => extensions.saml_failure === true);
const ssoAuthUrl = getSSOAuthUrl(ssoHeader);
// user does not have permissions
if (repoAccessForbidden && ssoAuthUrl) {
return `Please follow the link to authorize your personal access token with SSO:\n\n${ssoAuthUrl}`;
}
break;
}
case 401:
return `Please check your access token and make sure it is valid.\nConfig: ${(0, env_1.getGlobalConfigPath)(globalConfigFile)}`;
default:
logger_1.logger.warn(`Unexpected status code: ${statusCode}`);
return undefined;
}
}
exports.getInvalidAccessTokenMessage = getInvalidAccessTokenMessage;
//# sourceMappingURL=getInvalidAccessTokenMessage.js.map