Skip to content

Commit e41e443

Browse files
authored
Enhance authentication session handling (#1352)
- ๐Ÿ”ง Updated session retrieval to include offline access scope. - ๐Ÿ”„ Refactored session handling to create sessions if none exist. - ๐Ÿ› ๏ธ Improved error handling for access token retrieval. -Priyanshu
1 parent f0a7958 commit e41e443

File tree

1 file changed

+37
-13
lines changed

1 file changed

+37
-13
lines changed

โ€Žsrc/common/services/AuthenticationProvider.tsโ€Ž

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,10 @@ export async function intelligenceAPIAuthentication(sessionID: string, orgId: st
8989
let user = '';
9090
let userId = '';
9191
try {
92-
const session = await vscode.authentication.getSession(PROVIDER_ID, [`${INTELLIGENCE_SCOPE_DEFAULT}`], { silent: true });
92+
let session = await vscode.authentication.getSession(PROVIDER_ID, [`${INTELLIGENCE_SCOPE_DEFAULT}`], { silent: true });
9393

9494
if (!session) {
95-
return { accessToken, user, userId };
95+
session = await vscode.authentication.getSession(PROVIDER_ID, [`${INTELLIGENCE_SCOPE_DEFAULT}`], { createIfNone: true });
9696
}
9797

9898
accessToken = session?.accessToken ?? '';
@@ -121,7 +121,7 @@ export async function dataverseAuthentication(
121121
let accessToken = "";
122122
let userId = "";
123123
try {
124-
const session = await vscode.authentication.getSession(
124+
let session = await vscode.authentication.getSession(
125125
PROVIDER_ID,
126126
[
127127
`${dataverseOrgURL}${SCOPE_OPTION_DEFAULT}`,
@@ -131,7 +131,14 @@ export async function dataverseAuthentication(
131131
);
132132

133133
if (!session) {
134-
return { accessToken, userId };
134+
session = await vscode.authentication.getSession(
135+
PROVIDER_ID,
136+
[
137+
`${dataverseOrgURL}${SCOPE_OPTION_DEFAULT}`,
138+
`${SCOPE_OPTION_OFFLINE_ACCESS}`,
139+
],
140+
{ createIfNone: true }
141+
);
135142
}
136143

137144
accessToken = session?.accessToken ?? "";
@@ -172,11 +179,18 @@ export async function npsAuthentication(
172179
{ eventName: VSCODE_EXTENSION_NPS_AUTHENTICATION_STARTED }
173180
);
174181
try {
175-
const session = await vscode.authentication.getSession(
182+
let session = await vscode.authentication.getSession(
176183
PROVIDER_ID,
177-
[cesSurveyAuthorizationEndpoint],
184+
[cesSurveyAuthorizationEndpoint, SCOPE_OPTION_OFFLINE_ACCESS],
178185
{ silent: true }
179186
);
187+
if (!session) {
188+
session = await vscode.authentication.getSession(
189+
PROVIDER_ID,
190+
[cesSurveyAuthorizationEndpoint, SCOPE_OPTION_OFFLINE_ACCESS],
191+
{ createIfNone: true }
192+
);
193+
}
180194
accessToken = session?.accessToken ?? "";
181195
if (!accessToken) {
182196
throw new Error(ERROR_CONSTANTS.NO_ACCESS_TOKEN);
@@ -212,6 +226,7 @@ export async function graphClientAuthentication(
212226
[
213227
SCOPE_OPTION_CONTACTS_READ,
214228
SCOPE_OPTION_USERS_READ_BASIC_ALL,
229+
SCOPE_OPTION_OFFLINE_ACCESS
215230
],
216231
{ silent: true }
217232
);
@@ -222,6 +237,7 @@ export async function graphClientAuthentication(
222237
[
223238
SCOPE_OPTION_CONTACTS_READ,
224239
SCOPE_OPTION_USERS_READ_BASIC_ALL,
240+
SCOPE_OPTION_OFFLINE_ACCESS
225241
],
226242
{ createIfNone: true }
227243
);
@@ -258,14 +274,18 @@ export async function bapServiceAuthentication(
258274
): Promise<string> {
259275
let accessToken = "";
260276
try {
261-
const session = await vscode.authentication.getSession(
277+
let session = await vscode.authentication.getSession(
262278
PROVIDER_ID,
263-
[BAP_SERVICE_SCOPE_DEFAULT],
279+
[BAP_SERVICE_SCOPE_DEFAULT, SCOPE_OPTION_OFFLINE_ACCESS],
264280
{ silent: true }
265281
);
266282

267283
if (!session) {
268-
return accessToken;
284+
session = await vscode.authentication.getSession(
285+
PROVIDER_ID,
286+
[BAP_SERVICE_SCOPE_DEFAULT, SCOPE_OPTION_OFFLINE_ACCESS],
287+
{ createIfNone: true }
288+
);
269289
}
270290

271291
accessToken = session?.accessToken ?? "";
@@ -316,14 +336,18 @@ export async function powerPlatformAPIAuthentication(
316336
let accessToken = "";
317337
const PPAPI_WEBSITES_ENDPOINT = serviceScopeMapping[serviceEndpointStamp];
318338
try {
319-
const session = await vscode.authentication.getSession(
339+
let session = await vscode.authentication.getSession(
320340
PROVIDER_ID,
321-
[PPAPI_WEBSITES_ENDPOINT],
341+
[PPAPI_WEBSITES_ENDPOINT, SCOPE_OPTION_OFFLINE_ACCESS],
322342
{ silent: true }
323343
);
324344

325345
if (!session) {
326-
return accessToken;
346+
session = await vscode.authentication.getSession(
347+
PROVIDER_ID,
348+
[PPAPI_WEBSITES_ENDPOINT, SCOPE_OPTION_OFFLINE_ACCESS],
349+
{ createIfNone: true }
350+
);
327351
}
328352

329353
accessToken = session?.accessToken ?? "";
@@ -379,7 +403,7 @@ export async function authenticateUserInVSCode(isSilent = false): Promise<void>
379403
*/
380404
async function authenticateUserInternal(createIfNone: boolean): Promise<boolean> {
381405
try {
382-
const session = await vscode.authentication.getSession(PROVIDER_ID, [], { createIfNone: createIfNone });
406+
const session = await vscode.authentication.getSession(PROVIDER_ID, [SCOPE_OPTION_OFFLINE_ACCESS], { createIfNone: createIfNone });
383407

384408
if (session) {
385409
const userId = getOIDFromToken(session.accessToken);

0 commit comments

Comments
ย (0)