fix(dev-infra): properly determine oauth scopes for git client token (#37439)
We recently added a better reporting mechanism for oauth tokens in the dev-infra git util. Unfortunately the logic broke as part of addressing PR review feedback. Right now, always the empty promise from `oauthScopes` will be used as `getAuthScopes` considers it as the already-requested API value. This is not the case as the default promise is also truthy. We should just fix this by making the property nullable. PR Close #37439
This commit is contained in:
parent
c025357fb8
commit
b2bd38699b
|
@ -49,7 +49,7 @@ export class GitClient {
|
||||||
api: Octokit;
|
api: Octokit;
|
||||||
|
|
||||||
/** The OAuth scopes available for the provided Github token. */
|
/** The OAuth scopes available for the provided Github token. */
|
||||||
private _oauthScopes = Promise.resolve<string[]>([]);
|
private _oauthScopes: Promise<string[]>|null = null;
|
||||||
/** Regular expression that matches the provided Github token. */
|
/** Regular expression that matches the provided Github token. */
|
||||||
private _tokenRegex = new RegExp(this._githubToken, 'g');
|
private _tokenRegex = new RegExp(this._githubToken, 'g');
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ export class GitClient {
|
||||||
*/
|
*/
|
||||||
async hasOauthScopes(...requestedScopes: string[]): Promise<true|{error: string}> {
|
async hasOauthScopes(...requestedScopes: string[]): Promise<true|{error: string}> {
|
||||||
const missingScopes: string[] = [];
|
const missingScopes: string[] = [];
|
||||||
const scopes = await this.getAuthScopes();
|
const scopes = await this.getAuthScopesForToken();
|
||||||
requestedScopes.forEach(scope => {
|
requestedScopes.forEach(scope => {
|
||||||
if (!scopes.includes(scope)) {
|
if (!scopes.includes(scope)) {
|
||||||
missingScopes.push(scope);
|
missingScopes.push(scope);
|
||||||
|
@ -158,21 +158,20 @@ export class GitClient {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the OAuth scopes for the loaded Github token, returning the already retrived
|
* Retrieves the OAuth scopes for the loaded Github token, returning the already
|
||||||
* list of OAuth scopes if available.
|
* retrieved list of OAuth scopes if available.
|
||||||
**/
|
**/
|
||||||
private getAuthScopes() {
|
private async getAuthScopesForToken() {
|
||||||
// If the OAuth scopes have already been loaded, return the Promise containing them.
|
// If the OAuth scopes have already been loaded, return the Promise containing them.
|
||||||
if (this._oauthScopes) {
|
if (this._oauthScopes !== null) {
|
||||||
return this._oauthScopes;
|
return this._oauthScopes;
|
||||||
}
|
}
|
||||||
// OAuth scopes are loaded via the /rate_limit endpoint to prevent
|
// OAuth scopes are loaded via the /rate_limit endpoint to prevent
|
||||||
// usage of a request against that rate_limit for this lookup.
|
// usage of a request against that rate_limit for this lookup.
|
||||||
this._oauthScopes = this.api.rateLimit.get().then(_response => {
|
return this._oauthScopes = this.api.rateLimit.get().then(_response => {
|
||||||
const response = _response as RateLimitResponseWithOAuthScopeHeader;
|
const response = _response as RateLimitResponseWithOAuthScopeHeader;
|
||||||
const scopes: string = response.headers['x-oauth-scopes'] || '';
|
const scopes: string = response.headers['x-oauth-scopes'] || '';
|
||||||
return scopes.split(',').map(scope => scope.trim());
|
return scopes.split(',').map(scope => scope.trim());
|
||||||
});
|
});
|
||||||
return this._oauthScopes;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue