Skip to content

Commit b6d8fc1

Browse files
Uses PAT on shared provider library requests from Azure
1 parent 07a01fe commit b6d8fc1

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

src/plus/integrations/providers/azureDevOps.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ export class AzureDevOpsIntegration extends HostingIntegration<
8181
const account = await this.getProviderCurrentAccount(session);
8282
if (account?.id == null) return undefined;
8383

84-
const resources = await api.getAzureResourcesForUser(account.id, { accessToken: accessToken });
84+
const resources = await api.getAzureResourcesForUser(account.id, {
85+
accessToken: btoa(`PAT:${accessToken}`),
86+
isPAT: true,
87+
});
8588
this._organizations.set(
8689
accessToken,
8790
resources != null ? resources.map(r => ({ ...r, key: r.id })) : undefined,
@@ -117,7 +120,10 @@ export class AzureDevOpsIntegration extends HostingIntegration<
117120
const azureProjects = (
118121
await Promise.allSettled(
119122
resourcesWithoutProjects.map(resource =>
120-
api.getAzureProjectsForResource(resource.name, { accessToken: accessToken }),
123+
api.getAzureProjectsForResource(resource.name, {
124+
accessToken: btoa(`PAT:${accessToken}`),
125+
isPAT: true,
126+
}),
121127
),
122128
)
123129
)
@@ -164,7 +170,8 @@ export class AzureDevOpsIntegration extends HostingIntegration<
164170
projects.map(async project => {
165171
const repos = (
166172
await api.getReposForAzureProject(project.resourceName, project.name, {
167-
accessToken: accessToken,
173+
accessToken: btoa(`PAT:${accessToken}`),
174+
isPAT: true,
168175
})
169176
)?.values;
170177
if (repos != null && repos.length > 0) {
@@ -202,7 +209,8 @@ export class AzureDevOpsIntegration extends HostingIntegration<
202209
try {
203210
const merged = await api.mergePullRequest(this.id, pr, {
204211
...options,
205-
accessToken: accessToken,
212+
accessToken: btoa(`PAT:${accessToken}`),
213+
isPAT: true,
206214
});
207215
return merged;
208216
} catch (ex) {
@@ -306,8 +314,11 @@ export class AzureDevOpsIntegration extends HostingIntegration<
306314
project: string;
307315
}): Promise<ProviderRepository | undefined> {
308316
const api = await this.getProvidersApi();
317+
if (this._session == null) return undefined;
318+
309319
return api.getRepo(this.id, repo.owner, repo.name, repo.project, {
310-
accessToken: this._session?.accessToken,
320+
accessToken: btoa(`PAT:${this._session.accessToken}`),
321+
isPAT: true,
311322
});
312323
}
313324

@@ -347,13 +358,15 @@ export class AzureDevOpsIntegration extends HostingIntegration<
347358
const projectInputs = projects.map(p => ({ namespace: p.resourceName, project: p.name }));
348359
const assignedPrs = (
349360
await api.getPullRequestsForAzureProjects(projectInputs, {
350-
accessToken: session.accessToken,
361+
accessToken: btoa(`PAT:${session.accessToken}`),
362+
isPAT: true,
351363
assigneeLogins: [user.username],
352364
})
353365
)?.map(pr => this.fromAzureProviderPullRequest(pr, repoDescriptors, projects));
354366
const authoredPrs = (
355367
await api.getPullRequestsForAzureProjects(projectInputs, {
356-
accessToken: session.accessToken,
368+
accessToken: btoa(`PAT:${session.accessToken}`),
369+
isPAT: true,
357370
authorLogin: user.username,
358371
})
359372
)?.map(pr => this.fromAzureProviderPullRequest(pr, repoDescriptors, projects));
@@ -392,7 +405,8 @@ export class AzureDevOpsIntegration extends HostingIntegration<
392405
projects.map(async p => {
393406
const issuesResponse = (
394407
await api.getIssuesForAzureProject(p.resourceName, p.name, {
395-
accessToken: session.accessToken,
408+
accessToken: btoa(`PAT:${session.accessToken}`),
409+
isPAT: true,
396410
assigneeLogins: [user.username!],
397411
})
398412
).values;

src/plus/integrations/providers/providersApi.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ export class ProvidersApi {
611611

612612
async getAzureResourcesForUser(
613613
userId: string,
614-
options?: { accessToken?: string },
614+
options?: { accessToken?: string; isPAT?: boolean },
615615
): Promise<ProviderAzureResource[] | undefined> {
616616
const { provider, token } = await this.ensureProviderTokenAndFunction(
617617
HostingIntegrationId.AzureDevOps,
@@ -620,7 +620,9 @@ export class ProvidersApi {
620620
);
621621

622622
try {
623-
return (await provider.getAzureResourcesForUserFn?.({ userId: userId }, { token: token }))?.data;
623+
return (
624+
await provider.getAzureResourcesForUserFn?.({ userId: userId }, { token: token, isPAT: options?.isPAT })
625+
)?.data;
624626
} catch (e) {
625627
return this.handleProviderError<ProviderAzureResource[] | undefined>(
626628
HostingIntegrationId.AzureDevOps,
@@ -732,7 +734,7 @@ export class ProvidersApi {
732734
provider.getAzureProjectsForResourceFn,
733735
azureToken,
734736
options?.cursor,
735-
true,
737+
options?.isPAT,
736738
);
737739
} catch (e) {
738740
return this.handleProviderError<PagedResult<ProviderAzureProject>>(
@@ -746,7 +748,7 @@ export class ProvidersApi {
746748
async getReposForAzureProject(
747749
namespace: string,
748750
project: string,
749-
options?: GetReposOptions & { accessToken?: string },
751+
options?: GetReposOptions & { accessToken?: string; isPAT?: boolean },
750752
): Promise<PagedResult<ProviderRepository>> {
751753
const { provider, token } = await this.ensureProviderTokenAndFunction(
752754
HostingIntegrationId.AzureDevOps,
@@ -760,6 +762,7 @@ export class ProvidersApi {
760762
provider.getReposForAzureProjectFn,
761763
token,
762764
options?.cursor,
765+
options?.isPAT,
763766
);
764767
}
765768

@@ -864,7 +867,7 @@ export class ProvidersApi {
864867
return (
865868
await provider.getPullRequestsForAzureProjectsFn?.(
866869
{ projects: projects, ...options },
867-
{ token: azureToken, isPAT: true },
870+
{ token: azureToken, isPAT: options?.isPAT },
868871
)
869872
)?.data;
870873
} catch (e) {
@@ -971,7 +974,7 @@ export class ProvidersApi {
971974
async getIssuesForAzureProject(
972975
namespace: string,
973976
project: string,
974-
options?: GetIssuesOptions & { accessToken?: string },
977+
options?: GetIssuesOptions & { accessToken?: string; isPAT?: boolean },
975978
): Promise<PagedResult<ProviderIssue>> {
976979
const { provider, token } = await this.ensureProviderTokenAndFunction(
977980
HostingIntegrationId.AzureDevOps,
@@ -985,6 +988,7 @@ export class ProvidersApi {
985988
provider.getIssuesForAzureProjectFn,
986989
token,
987990
options?.cursor,
991+
options?.isPAT,
988992
);
989993
}
990994

0 commit comments

Comments
 (0)